Reachable CVE Gate

Gate ID: reachable-cve

Blocks only CVEs with confirmed reachable code paths from application entry points. This gate leverages Stella’s reachability analysis to distinguish exploitable vulnerabilities from those in unreachable code.

This gate is not a CVE-id denylist. A rule that matches only finding.cve_id == "CVE-..." is presence-based evidence and must be reported as matchClass=denylist, even when its rationale mentions an entrypoint, shell, libc, or likely runtime use. A reachability-backed block must cite a completed finding with matchClass=reachability; unknown, computing, and plain package presence are not reachability proof.

How It Works

  1. Evaluates CVE findings against reachability analysis results
  2. Filters to only reachable CVEs (code path exists from entry point to vulnerable function)
  3. Applies severity threshold to reachable CVEs
  4. Blocks if reachable CVEs exceed severity threshold

Configuration

{
  "Policy": {
    "Gates": {
      "ReachableCve": {
        "Enabled": true,
        "SeverityThreshold": 7.0,
        "RequireCompleteReachability": false,
        "TreatUnknownAsReachable": false,
        "BlockOnReachabilityError": false,
        "Environments": {
          "production": {
            "SeverityThreshold": 4.0,
            "TreatUnknownAsReachable": true
          }
        }
      }
    }
  }
}

Options

OptionTypeDefaultDescription
EnabledbooltrueWhether the gate is active
SeverityThresholddouble7.0CVSS score threshold for reachable CVEs
RequireCompleteReachabilityboolfalseRequire reachability analysis for all components
TreatUnknownAsReachableboolfalseTreat CVEs with unknown reachability as reachable
BlockOnReachabilityErrorboolfalseFail gate if reachability analysis fails
Environmentsdict{}Per-environment overrides

Reachability States

StateDescriptionDefault Behavior
ReachableCode path confirmed from entry pointSubject to severity threshold
NotReachableNo code path foundAllowed (not blocked)
UnknownReachability not analyzedDepends on TreatUnknownAsReachable
PartialSome paths reachableTreated as reachable

Base-Image OS Packages

Base-image packages need explicit evidence before this gate can treat them as reachable. For example, busybox may provide /bin/sh or PID 1, and libc may be loaded by every process, but those are not automatically proven by an application source callgraph. Until Scanner/ReachGraph emits an explicit base-image inference fact, those package CVEs should be handled by an honest denylist/backstop rule with matchClass=denylist.

The cheaper S051 path is to add deterministic base-image facts for:

Those facts must include the observed executable/library path, package PURL, source image digest, analyzer version, and evidence reference. Without that record, the correct policy state remains unknown for reachability, even if a separate denylist blocks the CVE.

Example Gate Results

Pass:

Reachable CVE check passed. 8 CVE(s) found, 2 reachable, none above threshold 7.0

Pass (no reachable):

Reachable CVE check passed. 15 CVE(s) found, 0 reachable (all in unreachable code)

Fail:

Reachable high-severity CVE(s) found: CVE-2024-1234 (CVSS: 9.1, reachable via /api/upload), CVE-2024-5678 (CVSS: 7.5, reachable via /auth/login)

CLI Usage

# Evaluate reachable CVE gate
stella policy evaluate --gate reachable-cve --image myapp:v1.2.3

# With specific severity threshold
stella policy evaluate --gate reachable-cve --severity 9.0 --image myapp:v1.2.3

# Treat unknown as reachable (conservative)
stella policy evaluate --gate reachable-cve --treat-unknown-reachable --image myapp:v1.2.3

Integration with Reachability Analysis

This gate requires reachability analysis results from the Stella Scanner. Ensure images are scanned with reachability enabled:

stella scan --image myapp:v1.2.3 --reachability

Reachability analysis examines:


Last updated: 2026-01-19.