Safeguard
Security Guides•

How do you report reachable vulnerabilities without hiding the rest?

Show total findings and the reachable subset side by side, state the method, and keep unreachable items tracked with expiry. Never replace the total.

Safeguard Security Team
3 min read

Report reachable vulnerabilities next to the total, not instead of it. Show how many findings exist, how many sit in code paths your application can actually call, and how you decided. Keep unreachable items visible and tracked so the filter never becomes a way to make a number look better.

Why reachability belongs in a report

A dependency scan may list hundreds of vulnerable components, yet many affect functions your code never calls. Reachability analysis checks whether a vulnerable function can be reached from your code. It cuts noise for engineers, and it gives leaders a more truthful picture of near term risk.

It also carries a risk: if the report shows only the reachable number, a reader may believe the rest does not exist.

The two-line pattern

LineMeaning
Total findingsEverything matched in your components
Reachable findingsSubset with a call path from your code
Not reachable, trackedSubset parked with a reason and review date
UnknownSubset the analysis could not determine

The fourth row matters. Static analysis cannot always resolve dynamic calls, reflection or generated code. Report "unknown" honestly rather than folding it into "not reachable".

Steps

  1. Run dependency scanning and reachability on the same build.
  2. Label each finding reachable, not reachable or unknown.
  3. Set remediation targets by reachable severity, with a longer, documented target for the rest.
  4. Keep not reachable items in the backlog with a review date, because code changes can make them reachable.
  5. Re-run on every release and on new advisories.

State your method

Add a footnote: tool and version, languages covered, languages not covered, and date of the run. A reader should know the claim covers, for example, only Java and Python services.

Watch for

  • Findings that become reachable after a refactor. Treat a change in label as an event.
  • Transitive dependencies, where the call path runs through another library.
  • Pressure to hide the total. Resist it, because auditors and customers ask for totals.

Try it yourself

Open the demo and compare the list before and after the reachability filter. Notice which items remain and which are set aside.

Click through it at your own pace, or open it full screen.

Safeguard provides reachability analysis alongside SBOM and dependency scanning, and you can run a free scan at gold.safeguard.sh/scan.

Quick check

Can we stop tracking unreachable findings?

No. Keep them with a review date, since a code change can make them reachable.

What does "unknown" mean?

The analysis could not decide, for example because of dynamic calls. Report it separately.

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.