Reachability as Evidence

Prove Whether Vulnerable Code is Actually Called

Three-layer analysis — static call graphs, binary symbol matching, runtime eBPF probes — produces signed DSSE proofs that meaningfully reduce false positives.

What this means for your business

Fix only vulnerabilities your app can actually hit — skip the rest. Stella proves which CVEs are reachable so your team focuses on real risk, not scanner noise. ReachabilityAnalysis that proves whether vulnerable code is actually called by your application — filtering out false positives from scanner noise

30-Second Executive Summary

Up to 70-90%

Typical Noise Reduction

Observed range varies by stack and coverage.

3

Analysis Layers

Static call graphs, binary symbols, runtime eBPF probes

100%

Signed & Replayable

Every reachability verdict is DSSE-signed evidence

Three-Layer Analysis

Each layer provides progressively stronger evidence that a vulnerable function is (or isn't) reachable from your application code. CVECommon Vulnerabilities and Exposures - a unique identifier for a publicly known security vulnerability

Layer 1

Static Call-Graph Analysis

Extract call graphs from bytecode, AST, and source code. Trace paths from entrypoints to vulnerable symbols.

  • • Language support: Go, Rust, C#, Java, Python, JavaScript, C/C++
  • • Handles virtual dispatch, interface calls, reflection with conservative approximation
  • • Produces DAG with reachability state per node
Layer 2

Binary Symbol Analysis

Match vulnerable symbols against compiled binary exports. Confirms the code is actually linked.

  • • Symbol table extraction from ELF, PE, Mach-O
  • • Cross-references DWARF/PDB debug info when available
Layer 3

Runtime eBPF Probes

Optional production profiling. Captures actual function invocations during execution.

  • • Tetragon-based eBPFExtended Berkeley Packet Filter — a Linux kernel technology that runs sandboxed programs for high-performance observability and runtime analysis without kernel modules instrumentation
  • • Records symbol_id, code_id, hit_count, loader_base
  • • Privacy-preserving: no argument values captured

Result: Significantly fewer false positives. Focus on reachable CVEs instead of hundreds of theoretical ones.

Implementation: node hash joins

ReachabilityAnalysis that proves whether vulnerable code is actually called by your application — filtering out false positives from scanner noise evidence is content-addressed for deduplication and verification. Node hashes enable efficient diffing between versions. Node Hash SHA256(normalize(purl) + ":" + normalize(symbol)) Path Hash SHA256(entryNodeHash + ":" + joinedIntermediateHashes + ":" + sinkNodeHash) Top-K significant paths are preserved in the evidence bundle. Paths are ranked by execution frequency (from runtime) or call depth (from static).
Read more

Reachability evidence is content-addressed for deduplication and verification. Node hashes enable efficient diffing between versions.

Node Hash

SHA256(normalize(purl) + ":" + normalize(symbol))

Path Hash

SHA256(entryNodeHash + ":" + joinedIntermediateHashes + ":" + sinkNodeHash)

Top-K significant paths are preserved in the evidence bundle. Paths are ranked by execution frequency (from runtime) or call depth (from static).

Unknowns as First-Class State

When analysis cannot determine reachability, the uncertainty is tracked explicitly — not hidden or silently assumed safe.

ReachabilityAnalysis that proves whether vulnerable code is actually called by your application — filtering out false positives from scanner noise BucketDefault Weight
Entrypoint1.0
Direct call0.85
Runtime confirmed0.45
Unknown0.5
Unreachable0.0

Final score = max(bucket_weights) across all paths. Unknown nodes contribute to risk scoring rather than being ignored.

Reachability coverage matrix for policy gating

Before enabling hard blocking in production, validate coverage on your own code corpus. The matrix below describes how to evaluate each language/runtime path and how unknowns should be treated.

Language/runtimeStatic call pathBinary/symbol evidenceRuntime evidenceDefault gate when unknown
Go, Rust, C/C++Validate direct and transitive call-path extractionValidate symbol/build-id matching accuracyOptional eBPF confirmation for high-risk servicesReview or block on critical findings by policy
Java and JVM languagesValidate method-level reachability and dynamic dispatch casesValidate bytecode/jar symbol mappingRuntime traces recommended for reflective pathsRoute unknowns to manual review lane
.NETValidate IL call graph and package lineageValidate PDB/symbol resolution in release buildsRuntime confirmation for trimmed/AOT scenariosReview unknowns before allow decision
Node, Python, Ruby, PHPValidate framework entrypoints and dynamic import boundariesSymbol evidence is partial by design for dynamic dispatchRuntime traces strongly recommendedKeep unknown as explicit state and require approval

Policy recommendation: treat unknown as a first-class verdict, set explicit thresholds per severity, and log reviewer override reasons in the evidence bundle.

Implementation: signed proofs

Every reachability analysis produces a cryptographically signed proof stored in content-addressed storage. DSSE?Dead Simple Signing Envelope - a simple, flexible standard for signing arbitrary data with cryptographic signatures DSSEDead Simple Signing Envelope - a simple, flexible standard for signing arbitrary data with cryptographic signatures envelope with in-totoA framework for securing the software supply chain by verifying that each step was carried out as planned and by authorized actors SLSASupply-chain Levels for Software Artifacts — a framework for ensuring the integrity of software artifacts throughout the supply chain predicate format Verifiable by auditors without network access Deterministic replay produces bit-identical results Graph and traces archived for offline verification Content-Addressed Storage Paths cas://reachability_graphs/<hh>/<sha>.tar.zst cas://runtime_traces/<hh>/<sha>.tar.zst
Read more

Every reachability analysis produces a cryptographically signed proof stored in content-addressed storage. DSSEDead Simple Signing Envelope - a simple, flexible standard for signing arbitrary data with cryptographic signatures

  • DSSEDead Simple Signing Envelope - a simple, flexible standard for signing arbitrary data with cryptographic signatures envelope with in-totoA framework for securing the software supply chain by verifying that each step was carried out as planned and by authorized actors SLSASupply-chain Levels for Software Artifacts — a framework for ensuring the integrity of software artifacts throughout the supply chain predicate format
  • Verifiable by auditors without network access
  • Deterministic replay produces bit-identical results
  • Graph and traces archived for offline verification

Content-Addressed Storage Paths

cas://reachability_graphs/<hh>/<sha>.tar.zst

cas://runtime_traces/<hh>/<sha>.tar.zst

Implementation: eBPF probes

Optional Tetragon-based instrumentation captures actual function executions in production, providing the highest-confidence reachability evidence. Captured Probe Data symbol_id: canonical symbol identifier code_id: code section identifier hit_count: execution frequency loader_base: memory base address cas_uri: content-addressed reference Probes submit observations to /api/v1/observations in batches. Each observation includes the CAS URI for the underlying artifact.
Read more

Optional Tetragon-based instrumentation captures actual function executions in production, providing the highest-confidence reachability evidence.

Captured Probe Data

symbol_id: canonical symbol identifier

code_id: code section identifier

hit_count: execution frequency

loader_base: memory base address

cas_uri: content-addressed reference

Probes submit observations to /api/v1/observations in batches. Each observation includes the CAS URI for the underlying artifact.

Ready to reduce false positives?

Install Stella Ops and start producing signed reachability proofs with three-layer analysis.