Safeguard
Security Guides•

Can reachability analysis justify accepting a vulnerability?

Reachability results are good evidence that a flaw is unlikely to be exploited, but they do not stand alone. What to record and where the limits are.

Safeguard Security Team
3 min read

Reachability analysis can support a decision to accept or defer a vulnerability, because it shows whether your code calls the vulnerable function. It is evidence, not proof. Record the method and version, note its limits, and re-run it when the code changes.

What reachability tells you

A dependency can have a known flaw in a function your application never calls. Reachability analysis traces call paths from your code into the dependency and reports whether the vulnerable code can execute. If it cannot, the practical risk is much lower than the score suggests.

That fits the way scoring bodies describe their own numbers. The CVSS v4.0 FAQ says Base scores "are not risk" and that applying environmental data is the consumer's responsibility. Reachability is one such piece of local context.

Two outcomes, two records

ResultBest record
Vulnerable code cannot run, and you can show whyVEX not_affected, with the justification vulnerable_code_not_in_execute_path
Reachability is unclear or partialRisk acceptance, with a short term and a re-check

The OpenVEX specification includes vulnerable_code_not_in_execute_path as a not_affected justification. If your evidence is strong, prefer that. See risk acceptance vs VEX not_affected.

Limits to write down

  • Dynamic behavior. Reflection, plugins and dynamic loading can hide call paths from static analysis.
  • Configuration. A flag may enable the vulnerable path in another deployment.
  • Time. The result is true for this commit. New code can change it.
  • Transitive depth. Some tools trace deeper than others.
  • Not every flaw is a function call. Some risks sit in how data is parsed or in install-time behavior.

State the limits in the record. An approver who knows them can set a fair expiry.

What to attach as evidence

  1. Tool name and version, and the commit analyzed.
  2. The vulnerable function or entry point.
  3. The result, as saved output.
  4. The date and who reviewed it.
  5. The trigger to re-run: any release, or any change to the calling module.

A sensible policy

Let reachability lower priority and extend deadlines, but do not let it erase the finding. Keep the record visible, re-run it on every release, and revoke the exception if the call path appears. That keeps the benefit, which is less noise, without the main danger, which is false comfort.

Where Safeguard fits

Safeguard offers reachability analysis for dependency findings, and its policies can use reachability results when deciding whether a gate should block.

Try it yourself

Click through it at your own pace, or open it full screen. Look at how many findings drop in priority once call paths are checked.

Quick check

If the function is unreachable, can I just ignore the finding?

Record it, as a VEX not_affected statement with evidence where possible, and re-check on each release. Ignoring it without a record leaves nothing to show a customer or auditor.

Does reachability replace compensating controls?

No. It addresses whether the flaw can run. Compensating controls reduce risk when it can.

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.