SCA TRIAGE

Reachability Analysis: How to Eliminate False Positive SCA Alerts

Why Reachability Analysis Matters for Application Security

The average enterprise application pulls in hundreds of open-source dependencies, each bringing its own transitive dependency tree. When a CVE is published against any component in that tree, traditional SCA tools flag it regardless of whether the vulnerable function is ever executed.

The result is staggering noise. Research consistently shows that 60-80% of flagged dependency vulnerabilities exist in code paths no application ever calls (Endor Labs, “State of Dependency Management,” 2024). Organizations running multiple scanners — 5.3 tools on average per team — compound the problem, with the same unreachable CVE appearing across every dashboard.

Teams with 100,000+ vulnerability backlogs (66% of organizations, per industry surveys) spend 50-80% of AppSec capacity on manual triage. Mean time to remediation stretches to 252 days. False positive rates from traditional SCA scanners run between 71% and 88%.

Reachability analysis directly attacks this problem. Instead of treating every CVE as equally urgent, it asks a precise technical question: Does my application actually call the vulnerable function? When the answer is no, the alert can be safely deprioritized — or eliminated entirely.

For teams evaluating SCA solutions, Forrester now treats reachability as a baseline expectation. The 2024 Forrester Wave for SCA explicitly evaluates whether tools prioritize “vulnerabilities by using criteria such as exploitability, maturity, effort to fix, [and] reachability (whether the vulnerable method is called)” (Forrester, “The Forrester Wave: Software Composition Analysis, Q4 2024”). GitLab’s lack of reachability analysis was specifically cited as preventing it from achieving an on-par developer experience score.

Reachability is no longer a differentiator. It is table stakes.

60-80%
of dependency CVEs exist in unreachable code
Endor Labs 2024
66%
of orgs have 100,000+ vulnerability backlogs
Industry surveys
252 days
Mean time to remediation
Veracode SoSS
71-88%
False positive rate — traditional SCA scanners
Traditional SCA scanner research

How Reachability Analysis Works

Reachability analysis maps the execution paths between your application code and the functions exposed by its dependencies. The core mechanism is call graph construction — building a directed graph of which functions call which other functions, from your entry points down through every layer of the dependency tree.

1

Dependency resolution

The tool parses your manifest file (package.json, pom.xml, requirements.txt, go.mod) and resolves the full dependency tree, including transitive dependencies.

2

Call graph construction

Static analysis traces function calls from your application code into dependency code. This produces a graph showing which dependency methods are actually invoked.

3

CVE-to-function mapping

When a CVE is published, the analysis maps the vulnerability to the specific function or code path it affects — not just the package version.

4

Reachability verdict

If no execution path connects your application code to the vulnerable function, the vulnerability is marked unreachable. If a path exists, it is marked reachable and prioritized for remediation.

Concrete Example

Your application depends on lodash@4.17.20, which has a known prototype pollution vulnerability in lodash.merge(). Reachability analysis traces your code’s call graph and finds that your application imports lodash.get() and lodash.debounce() but never calls lodash.merge(). The vulnerable function is unreachable — the CVE is real, but it cannot be triggered in your application. Deprioritize.

Call Graph — lodash reachability
Your Application
  ├── imports lodash.get()        Used (no CVE)
  ├── imports lodash.debounce()   Used (no CVE)
  └── lodash.merge()              NEVER CALLED (CVE-2020-28500)
                                    Verdict: UNREACHABLE  Deprioritize

Static vs. Runtime Reachability

Two approaches exist, and the distinction matters:

Static reachability

Static reachability analyzes source code without executing it. It builds call graphs from code structure alone. This is the most common approach — it works in CI/CD pipelines, requires no production instrumentation, and catches issues before deployment. The tradeoff is potential over-approximation: static analysis may flag paths that are theoretically reachable but practically never executed (e.g., dead code behind feature flags).

Runtime reachability

Runtime reachability instruments production applications to observe which dependency functions are actually loaded into memory and executed. Mend.io pioneered this approach through its Sysdig partnership, providing both static and runtime signals (Forrester Wave SCA, Q4 2024). Runtime reachability is more precise but requires production access and only reflects currently observed behavior — it can miss code paths triggered by rare events.

Most mature SCA programs use static reachability as the default triage layer, with runtime data as supplementary evidence for high-stakes decisions.

How Pixee Uses Reachability Analysis

Pixee’s approach to reachability is fundamentally different from detection-only tools. Where most SCA vendors use reachability to generate smarter alerts, Pixee uses it to generate smarter fixes.

Triage
95%

False positive reduction

Pixee’s triage automation combines reachability analysis with broader exploitability context — EPSS scoring, deployment configuration, internet-facing exposure, and data sensitivity. Reachability is one input into a multi-dimensional assessment that reduces false positives by 95% across 10+ scanner tools. This is not call-graph-only filtering. It is evidence-based exploitability validation that proves whether an attacker can actually reach the vulnerable code in your specific environment.

Remediation
76%

Merge rate

When reachability confirms a vulnerability is exploitable, Pixee does not stop at an alert. It generates a context-aware pull request that fixes the vulnerability — updating the root dependency in the manifest file, predicting breaking changes with 80-90% confidence, and matching your codebase’s coding conventions. Across 100,000+ PRs, 76% are merged by developers without modification.

Key Differentiator

This is the critical difference. Endor Labs provides function-level reachability and claims 92% noise reduction — but it is detection-only. Developers still have to manually fix every confirmed vulnerability. Pixee closes the loop: reachability-informed triage feeds directly into automated remediation.

Pixee is also scanner-agnostic. Whether your SCA findings come from Snyk, Checkmarx, Black Duck, or any combination of tools, Pixee ingests the alerts, applies reachability-informed triage, and produces merge-ready fixes. You do not need to replace your scanner. You need to resolve what it finds.

95%
False positive reduction
76%
PR merge rate
100,000+
PRs generated
10+
Scanner tools supported

Industry Context

Reachability analysis has moved from emerging capability to evaluation criterion in under two years.

  • Forrester (2024): The Forrester Wave for SCA evaluates reachability as a core prioritization criterion alongside exploitability, effort to fix, and production context. GitLab was specifically penalized for lacking it (Forrester Wave SCA, Q4 2024).
  • Gartner (2025): Mend.io’s acquisition of Atom Security to extend reachability from code to runtime containers was noted as a strategic move (Gartner MQ Application Security, Q4 2025).
  • Endor Labs (2024): Claims function-level reachability with 92% noise reduction, positioning it as their primary SCA differentiator.
  • VEX integration: Reachability results feed directly into VEX (Vulnerability Exploitability eXchange) documents. When a CVE is proven unreachable, it can be tagged with a VEX status of “Not Affected” — providing auditable evidence for compliance teams.

Frequently Asked Questions

Reachability analysis determines whether vulnerable code in a third-party dependency is actually called by your application. By constructing call graphs that trace execution paths from your code into dependency libraries, reachability analysis identifies which CVEs can actually be triggered in your environment. Vulnerabilities in functions your application never calls are unreachable and can be safely deprioritized, eliminating 60-95% of false positive SCA alerts.

Traditional SCA tools flag every known vulnerability in your dependency tree, regardless of whether the vulnerable function is used. Reachability analysis filters this list by tracing which dependency functions your application actually calls. Since 60-80% of dependency CVEs exist in unreachable code paths, reachability eliminates the majority of false positives. This lets security teams focus remediation effort on the vulnerabilities attackers can actually exploit.

Static reachability analyzes source code structure to build call graphs without executing the application. It works in CI/CD pipelines and catches issues pre-deployment, but may over-approximate by flagging theoretically possible paths. Runtime reachability instruments production applications to observe which dependency functions are actually executed, providing higher precision but requiring production access and only reflecting currently observed behavior. Most mature programs use static reachability as the primary triage layer.