Join our Newsletter — 33% off our NHI Course

What is the difference between reachable and unreachable dependency findings?

Reachable findings point to code paths where the application actually invokes a vulnerable function, so the issue can affect real execution. Unreachable findings identify vulnerable components that exist in the dependency tree but are not called in a risky way. Both deserve visibility, but reachable findings usually warrant higher urgency because they represent the more immediate security exposure.

What the labels mean in practice

Dependency scanners use these labels to separate theoretical exposure from exposure that can actually be exercised at runtime. A reachable finding means execution can flow into the vulnerable function or path, so the defect is part of a real attack surface. An unreachable finding means the vulnerable library or component is present, but the risky code path is not invoked in the application’s current behavior.

That distinction matters because a vulnerability that exists in a transitive dependency is not equally dangerous in every application. If the code is never loaded, called, or enabled by the app’s configuration, the immediate security impact is lower, even though the dependency should still be tracked and explained to owners.

For supply-chain and dependency management, the question is not only whether a vulnerable version exists, but whether the application can actually exercise the vulnerable behavior. That is why dependency evidence from build manifests, lockfiles, and package inventories should be paired with code-path analysis rather than treated as a complete risk assessment.

Why reachable findings usually drive remediation priority

Reachable findings usually warrant faster attention because they indicate a path from a real request, job, or input to the vulnerable component. That makes exploitation more plausible, increases confidence that a fix will matter, and reduces the chance of wasting effort on defects that cannot be triggered in the current application design.

Unreachable findings are still useful because they reveal latent exposure, future regression risk, or dependencies that may become reachable after a feature change, configuration change, or refactor. Teams often use them to guide backlog hygiene, but they are typically triaged below reachable issues unless the component is likely to become active soon or the exposure is broad enough to matter strategically.

The operational difference is similar to the difference between a known installed asset and an exposed attack path: both are worth inventorying, but only one currently contributes to exploitability. For open source ecosystems and dependency security, that is why project-level guidance from OpenSSF and supply-chain controls such as SLSA focus so heavily on provenance, build integrity, and the path from source to deployed artifact.

Risk and Threat Considerations

Reachability changes the threat model because it turns a library version from passive inventory into an executable attack path. If attackers can influence inputs that flow into the vulnerable function, or if the application automatically invokes the code during normal operation, the finding can support exploitation, denial of service, or data exposure in ways an unreachable component cannot.

Failure mechanism: A vulnerable dependency is instantiated through a live call path, configuration toggle, or transitive behavior, allowing the flaw to be triggered by ordinary application traffic or a crafted request.

Impact: Reachable defects create immediate exposure, while unreachable defects mostly create latent risk, future-change risk, and noise unless the code path later becomes active.

Standards & Framework Alignment

This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.

OWASP Non-Human Identity Top 10 and OWASP Agentic AI Top 10 address the attack and risk surface, while CIS Controls v8 and NIST CSF 2.0 set the governance and control requirements practitioners need to meet.

Framework Control / Reference Relevance
CIS Controls v8 CIS 7 — Continuous Vulnerability Management Reachability informs which dependency flaws are truly exploitable and should be prioritized.
Recommendation — Prioritise reachable dependency flaws for remediation and track unreachable findings as lower-urgency exposure.
NIST CSF 2.0 DE.CM — Security Continuous Monitoring Reachable findings require monitoring code paths and deployed behavior, not just inventory presence.
ID.RA — Risk Assessment Reachable versus unreachable findings changes the practical severity and exploitability of the issue.
Recommendation — Monitor runtime behavior to confirm whether vulnerable dependency paths are actually exercised. Assess exploitability by combining dependency presence with code-path reachability.
OWASP Non-Human Identity Top 10 NHI-03 — Exposed Secrets and Credentials Dependency findings can become reachable through code paths that expose sensitive execution paths or secrets handling.
Recommendation — Review dependency paths that could expose sensitive runtime behavior or adjacent secret material.
OWASP Agentic AI Top 10 A1 — Agentic Prompt Injection and Instruction Hijacking Agentic systems depend on live tool and code paths, so reachability is central to whether a weakness is exploitable.
Recommendation — Verify that only reachable tool or execution paths are allowed to influence agent behavior.

Practitioner Guidance

What to verify: Ask whether the vulnerable symbol, class, or function is actually called in the deployed build, not just present in the package tree. Confirm the path with code tracing, runtime tests, or evidence from the application’s invocation pattern before assigning urgency.

Decision rule: Treat a finding as higher priority when it is reachable in a production-relevant path, has a plausible trigger, or sits behind a feature likely to be enabled later. Treat it as lower priority when the vulnerable code is inert, but keep it visible so it can be re-evaluated after dependency upgrades or refactors.

Practitioner takeaway: Reachability is the difference between “present somewhere in the dependency graph” and “usable in the attack path”, and remediation should follow the latter.