Safeguard
Security Guides•

How do you verify reachability claims in a scanner demo?

When a scanner demo says a vulnerability is reachable or not, ask for the call path. Here is how to test the claim on your own code in four steps.

Safeguard Security Team
3 min read

Ask the demo to show the call path: the chain of functions from your code to the vulnerable function. If it says "not reachable", ask what it checked. A label without evidence is a guess, and a wrong "not reachable" can hide a real exposure.

What reachability analysis is

A vulnerability usually lives in one function inside a library. If your code never calls that function, directly or through other code, the flaw is much less likely to be exploitable in your application. Reachability analysis tries to work this out by tracing calls.

It is a prioritization aid. It does not make a vulnerable package safe, and it is not perfect. Reflection, dynamic loading and framework magic can hide real calls from any static analysis.

A four step verification

  1. Pick a "reachable" finding. Ask to see the path. Open the first function in your own code and confirm it exists and is used.
  2. Pick a "not reachable" finding. Ask what the tool concluded and on what basis. Search your code for the vulnerable function name yourself.
  3. Pick one with unknown status. A tool that never says "unknown" may be overconfident.
  4. Change something. If time allows, add a call to the vulnerable function in a throwaway branch and rescan. The label should change.

Step four is the strongest test. It turns a claim into an experiment.

What good evidence looks like

  • A path with named functions and file locations you can open.
  • A statement of what the analysis covers, such as which languages and which kinds of calls.
  • A clear label for "could not determine".
  • A way to override the label with a reason when you disagree.

What weak evidence looks like

ClaimWhy it is weak
"Not reachable" with no detailYou cannot check it
100 percent of findings labeledReal analysis has gaps
No mention of language supportCoverage varies by language
No way to overrideYou are stuck with the tool's view

Using the result responsibly

Treat "not reachable" as a reason to lower urgency, not as a reason to ignore. Keep the finding tracked, because code changes. A function that is unused today may be called after next month's feature.

Treat "reachable" as a reason to raise urgency, and pair it with exploit data, such as whether the vulnerability appears in CISA's Known Exploited Vulnerabilities Catalog, which CISA recommends as an input to prioritization (see Sources).

Where Safeguard fits

Safeguard includes reachability analysis as a GA capability, designed to cut the noise from findings that your code never calls. The demo below shows the effect on a list of findings.

Try it yourself

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

Compare the list before and after reachability is applied, and ask yourself what evidence you would want for each removed item.

Quick check

Can reachability analysis be wrong?

Yes. Dynamic behavior and reflection can hide calls. Use it to prioritize, and keep not reachable findings visible.

Does reachable mean exploitable?

No. It means your code can reach the vulnerable function. Exploitability also depends on inputs, configuration and exposure.

Sources

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.