Prerequisites

  • Source code repository or lockfile access (Git clone URL or local path)
  • At least one supported lockfile present in the repository (see supported formats below)
  • Claude API key configured for AI-powered reachability analysis (Settings → AI Configuration)
  • Network access to NVD, OSV, and EPSS databases for vulnerability matching
  • Written authorization covering source code analysis of the target application
  1. 1

    Select SCA & Reachability from Home Screen

    Click the 📦 SCA & Reachability card on the Home screen. This opens the SCA configuration panel.

    What makes PhantomYerra SCA different from traditional SCA tools: Traditional SCA tools report every CVE associated with every dependency version in your manifest. This produces hundreds of findings, the vast majority of which your application never actually calls. PhantomYerra builds a call graph from your application's HTTP entry points, CLI handlers, and event listeners, tracing function calls all the way down into dependency code. Only vulnerabilities where the vulnerable function is actually reachable from an entry point are flagged as actionable. The result: 70-90% noise reduction, with every remaining finding backed by a concrete call chain.

  2. 2

    Configure Source Input

    Provide the source code for analysis. PhantomYerra needs both the dependency manifest and the application source to build call graphs:

    Input Methods: Git Repository Clone URL (HTTPS or SSH) + branch + optional commit hash Local Path Absolute path to project root on disk Lockfile Upload Upload lockfile directly (dependency-only mode, no reachability) Supported Lockfiles (auto-detected from repository): package-lock.json npm (JavaScript/TypeScript) yarn.lock Yarn (JavaScript/TypeScript) pnpm-lock.yaml pnpm (JavaScript/TypeScript) Pipfile.lock Pipenv (Python) requirements.txt pip (Python) — with pinned versions poetry.lock Poetry (Python) Gemfile.lock Bundler (Ruby) go.sum Go modules (Go) Cargo.lock Cargo (Rust) pom.xml Maven (Java) — resolved dependency tree build.gradle Gradle (Java/Kotlin) — resolved dependency tree packages.lock.json NuGet (.NET/C#) composer.lock Composer (PHP) Package.resolved Swift Package Manager (Swift) mix.lock Hex (Elixir)

    If the project uses multiple lockfiles (e.g., a monorepo with both package-lock.json and requirements.txt), PhantomYerra analyzes all of them and merges the results.

    Branch Selection: Choose the branch to analyze. Default is main or master. For PR reviews, select the feature branch to see new dependency risks introduced by that branch.

  3. 3

    Configure Analysis Options

    Analysis Depth: Dependencies Only Direct dependencies listed in manifest Dev + Production Both devDependencies and production dependencies Full Transitive All transitive dependencies (deepest analysis) Reachability Mode: Call Graph (default) Build full call graph from entry points to deps Most accurate — traces actual function calls Static Import-level analysis only (faster, less precise) Checks if vulnerable module is imported, not if the specific vulnerable function is called Behavioral Runtime-informed (requires test suite execution) Runs test suite, instruments calls, highest accuracy Language (auto-detected): JavaScript / TypeScript / Python / Java / Go / Ruby / Rust .NET (C#) / PHP / Swift / Elixir / Kotlin Framework Hints (optional, improves entry point detection): Express / Fastify / Next.js / Django / Flask / FastAPI Spring Boot / Gin / Rails / Laravel / ASP.NET Core Phoenix / Vapor / Actix-Web / Rocket

    Framework hints help PhantomYerra identify entry points more accurately. For example, selecting "Express" tells the analyzer to look for app.get(), app.post(), and router.use() patterns as HTTP entry points. Without hints, PhantomYerra uses heuristic detection (works for most projects but may miss custom routing patterns).

  4. 4

    Complete Mission Control Wizard

    Step 1: Environment → Source repository confirmed Step 2: Mode → Automated AI (selected) Step 3: Surfaces → SCA & Reachability (auto-selected) Step 4: Source Input → Git URL or local path confirmed Step 5: Auth Token → Authorization for source code analysis Step 6: Options → Depth, reachability mode, language, framework Step 7: AI Interview → "What are the main entry points?" "Are there background workers or cron jobs?" "Any vendored/forked dependencies?" Step 8: Review → Confirm settings, launch analysis
  5. 5

    AI SCA Pipeline (8-Phase)

    Claude orchestrates the full SCA pipeline, building from dependency resolution through to prioritized findings:

    Phase 1: Dependency Tree Resolution Parse all lockfiles, resolve full transitive dependency tree. For each dependency: name, version, license, direct vs transitive. Output: complete dependency graph with version pins. Phase 2: Version Extraction & SBOM Generation Generate CycloneDX SBOM (JSON) with all components. Extract exact versions, package URLs (purls), hashes. Cross-reference with known end-of-life / unmaintained packages. Phase 3: CVE Matching Match every dependency version against: NVD (National Vulnerability Database) — primary source OSV (Open Source Vulnerabilities) — language-specific advisories GitHub Advisory Database — GitHub Security Advisories Vendor advisories (npm, PyPI, RubyGems, crates.io) Output: raw CVE list with CVSS vectors and severity. Phase 4: EPSS Scoring Enrich each CVE with EPSS (Exploit Prediction Scoring System): EPSS score (0.0-1.0) = probability of exploitation in next 30 days EPSS percentile = how this CVE ranks against all CVEs CVEs with EPSS > 0.5 are flagged as "Actively Exploited" priority. Phase 5: Call Graph Construction Build call graph from all entry points: HTTP route handlers, CLI entry points, event listeners, background workers, scheduled tasks, WebSocket handlers. Trace every function call chain into dependency code. Resolve dynamic imports, conditional requires, lazy loading. Phase 6: Reachability Verdict For each CVE, determine if the vulnerable function is reachable: REACHABLE Entry point → call chain → vulnerable function POTENTIALLY_REACHABLE Call chain exists but passes through dynamic dispatch, reflection, or conditional logic UNREACHABLE Vulnerable function never called from any entry point in the application Phase 7: Exploit Availability Check For each REACHABLE CVE, check: Public PoC available? (GitHub, Exploit-DB, PacketStorm) Active exploitation in the wild? (CISA KEV, threat intel feeds) Metasploit module available? Patch available? (fixed version identified) Phase 8: Prioritized Report Generation Rank all findings by: Reachability → CVSS → EPSS → Exploit Avail. Generate noise reduction metrics (before/after reachability filter). Produce call chain evidence for every REACHABLE finding. Generate upgrade recommendations with breaking change warnings.
  6. 6

    Review Dashboard

    The SCA dashboard provides a complete view of your dependency security posture:

    Summary Panel (top): Total CVEs Found Raw CVE count before filtering After Reachability Filter CVEs that are REACHABLE or POTENTIALLY_REACHABLE Noise Reduction % Percentage of CVEs eliminated by reachability analysis Example: 847 total → 94 reachable = 89% noise reduction Reachability Badges (per finding): [REACHABLE] Red badge — fix immediately, full call chain shown [POTENTIALLY_REACHABLE] Yellow badge — review required, partial call chain [UNREACHABLE] Gray badge — safe to deprioritize, reason shown Call Chain Viewer (click any REACHABLE finding): HTTP Entry: POST /api/users/update → UserController.update(req, res) src/controllers/user.ts:47 → UserService.updateProfile(userId, data) src/services/user.ts:123 → sanitize(data) src/utils/sanitize.ts:8 → lodash.merge(target, data) node_modules/lodash/merge.js:23 CVE-2021-23337 — Prototype Pollution — REACHABLE SBOM Export (bottom toolbar): CycloneDX JSON Machine-readable SBOM for compliance SPDX Alternative SBOM format CSV Spreadsheet-friendly export VEX Vulnerability Exploitability eXchange document

    Click Reports → Generate → SCA Reachability Report for the full PDF with executive summary, reachability analysis results, call chain evidence, upgrade plan, and compliance documentation.

What Claude Analyzes (SCA Reachability)

  • Known vulnerabilities (CVE/GHSA) in all direct and transitive dependencies
  • Reachability of vulnerable functions from application entry points
  • Exploit availability and active exploitation status (CISA KEV, EPSS)
  • License compliance: GPL, AGPL, LGPL, MIT, Apache, BSD, proprietary conflicts
  • End-of-life and unmaintained packages (no security patches)
  • Typosquatting detection (dependency confusion, namespace hijacking)
  • Pinning and lockfile integrity (detect unpinned or floating versions)
  • Breaking change analysis for recommended upgrades
⏱ Typical duration: 5-30 minutes depending on repository size and dependency count. Call graph construction is the most time-intensive phase (scales with codebase LOC).

Configuration Options

OptionValuesDefaultDescription
Analysis DepthDependencies Only / Dev+Prod / Full TransitiveFull TransitiveHow deep into the dependency tree to analyze
Reachability ModeCall Graph / Static / BehavioralCall GraphMethod used to determine if vulnerable functions are reachable
LanguageAuto / JS / Python / Java / Go / Ruby / Rust / .NET / PHPAuto-detectProgramming language of the application being analyzed
FrameworkAuto / Express / Django / Spring / Rails / etc.Auto-detectWeb framework hint for better entry point detection
CVE DatabasesNVD / OSV / GitHub / AllAllWhich vulnerability databases to query for CVE matching
EPSS EnrichmentOn / OffOnAdd exploit probability scores from FIRST EPSS database
License CheckOn / OffOnCheck dependency licenses for compliance conflicts
License PolicyPermissive / Strict / CustomPermissiveWhich licenses to allow/deny in the dependency tree
SBOM FormatCycloneDX / SPDX / BothCycloneDXOutput format for the Software Bill of Materials
VEX OutputOn / OffOffGenerate VEX document with reachability justifications
CI/CD Fail ThresholdREACHABLE only / All CVEs / CustomREACHABLE onlyWhich findings cause CI/CD pipeline failure
Severity ThresholdCritical / High / Medium / Low / InfoHighMinimum severity to include in actionable findings
Ignore FilePath to .phantomyerra-ignoreNoneFile listing CVEs to suppress (accepted risk)
Report FormatPDF / HTML / JSON / SARIFPDFOutput format for the SCA report

Reachability Verdicts Explained

VerdictMeaningAction RequiredCall Chain Evidence
REACHABLEThe vulnerable function is directly called from an HTTP-reachable entry point with data that flows from user inputFix immediately: upgrade dependency or apply workaroundFull call chain from entry point to vulnerable function with file:line references
POTENTIALLY_REACHABLEThe vulnerable function is called but the path passes through dynamic dispatch, reflection, or runtime-conditional logicDeveloper review required: verify if user input can reach this pathPartial call chain with gap notation where static analysis could not resolve the target
UNREACHABLEThe vulnerable function is never called from any entry point in the applicationSafe to deprioritize: document for compliance, fix in next sprintReason provided: "function not imported", "only called in test suite", "behind admin gate"

Common Scenarios

Goal: Reduce the overwhelming CVE list from npm audit to only exploitable findings.

Recommended Settings: Full Transitive depth, Call Graph reachability, Express framework hint, EPSS enrichment enabled.

Approach: Upload the repository with package-lock.json. PhantomYerra resolves the full dependency tree (typically 1000-3000 packages for a mid-size Express app). The call graph traces from Express route handlers into node_modules/. Expect 80-95% noise reduction — most CVEs in transitive dependencies affect functions your app never calls. Focus remediation on the 5-15% that are REACHABLE.

Expected Duration: 10-15 minutes.

Goal: Audit a Django application with requirements.txt and identify which outdated packages actually pose a risk.

Recommended Settings: Dev+Production depth (include test dependencies to verify they are not shipped), Call Graph reachability, Django framework hint.

Approach: PhantomYerra parses requirements.txt and resolves transitive dependencies via pip's resolver. For Django apps, entry points are detected from urls.py patterns, management commands, and Celery tasks. The analyzer traces through Django's middleware chain, view functions, serializers, and model methods into third-party libraries. Common finding: Pillow CVEs are often UNREACHABLE if the app does not process user-uploaded images.

Expected Duration: 8-12 minutes.

Goal: Analyze a Maven-based Spring Boot microservice and produce VEX documents for customer compliance questionnaires.

Recommended Settings: Full Transitive depth, Call Graph reachability, Spring Boot framework hint, VEX output enabled, CycloneDX SBOM format.

Approach: PhantomYerra resolves the Maven dependency tree from pom.xml (typically 200-500 JARs for a Spring Boot app). Bytecode-level call graph analysis traces from @RestController methods through @Service and @Repository layers into third-party JARs. Spring Boot's auto-configuration means many libraries are included but never activated — reachability analysis identifies these as UNREACHABLE. Generate VEX documents in CycloneDX format for SOC 2 and ISO 27001 audits.

Expected Duration: 15-25 minutes (bytecode analysis is more intensive than source-level).

Goal: Block PRs that introduce REACHABLE Critical/High CVEs while allowing UNREACHABLE CVEs to pass.

Recommended Settings: CI/CD Fail Threshold = REACHABLE only, Severity Threshold = High, SARIF output for GitHub Code Scanning integration.

Approach: Add PhantomYerra SCA to your CI pipeline. On every PR, PhantomYerra resolves dependencies from the lockfile, matches CVEs, and runs reachability analysis against the branch's source code. Only REACHABLE findings with High or Critical severity block the merge. UNREACHABLE and POTENTIALLY_REACHABLE findings are reported as annotations but do not block. SARIF output integrates with GitHub's Security tab, showing findings inline on the PR diff. Developers see exactly which function calls reach vulnerable code.

Expected Duration: 3-8 minutes per pipeline run.

Common Issues

The reachability analyzer could not detect any HTTP entry points, CLI handlers, or event listeners. This usually means the framework was not recognized. Go to Settings → SCA → Framework Hint and select the correct framework (Express, Django, Spring, etc.). For custom frameworks or non-web applications, manually specify entry point files in the analyzer configuration: "entry_points": ["src/main.ts", "src/cli.ts"]. For serverless functions (AWS Lambda, Azure Functions), select the "Serverless" framework hint.

This occurs when the lockfile is out of sync with the manifest (e.g., package.json was modified but package-lock.json was not regenerated). Run the package manager's install command to regenerate the lockfile: npm install, yarn install, pip freeze > requirements.txt, etc. For monorepos, ensure all workspace lockfiles are present. If the repository requires authentication for private registries, configure the registry credentials in Settings → SCA → Registry Auth.

POTENTIALLY_REACHABLE findings occur when the call chain passes through dynamic dispatch (e.g., obj[methodName]() in JavaScript, reflection in Java). Two approaches to reduce these: (1) Switch to Behavioral reachability mode, which runs your test suite and instruments actual function calls at runtime — this resolves dynamic dispatch definitively. (2) Add type annotations or JSDoc comments to your source code to help the static analyzer resolve dynamic calls. For Java projects, enabling -parameters compiler flag preserves method parameter names, improving call graph precision.

Different tools query different vulnerability databases and use different matching algorithms. PhantomYerra queries NVD + OSV + GitHub Advisories simultaneously, which may produce more or fewer matches than a single-source tool. Additionally, PhantomYerra de-duplicates CVEs that appear in multiple databases under different identifiers (CVE vs GHSA). To see the raw un-deduplicated count, enable Settings → SCA → Show All Advisory IDs. To match a specific tool's output, disable databases in Settings → SCA → CVE Databases until only NVD remains (for npm audit parity).

Call graph construction scales with codebase size. For very large codebases: (1) Switch to Static reachability mode (import-level only) for a faster but less precise result. (2) Limit analysis to specific directories using Settings → SCA → Source Paths (e.g., only src/ excluding test/ and vendor/). (3) Increase the analysis timeout in Settings → SCA → Call Graph Timeout from the default 300s to 900s. (4) For monorepos, analyze each workspace/package separately rather than the entire repository at once.

Full Disclosure

264 modules · 30+ surfaces · 14 vuln families · 120+ classes

The sections above describe what this surface tests. For the complete enumeration of every vulnerability class PhantomYerra covers across all surfaces — with scanner module names — see the Coverage Matrix.

View Full Coverage Matrix →