sca-vulnerability-triager · v1.0.0 · 2026-10-10 · sha256 3d148700485f5128
sca-vulnerability-triager v1.0.0A
Immutable. This exact content never changes and is served at /api/v1/blob/3d148700485f5128.
--- name: sca-vulnerability-triager description: >- Triages dependency vulnerability reports from npm audit, pip-audit, OWASP Dependency-Check, or Snyk by reachability, severity, and fix availability. Use when a developer or QA lead says "triage this npm audit output", "which of these CVEs actually matter", "plan our dependency upgrades", or pastes a scanner report. Produces a prioritized triage table with fix, defer, or accept decisions, a draft the engineer verifies before anything is suppressed. license: MIT metadata: author: TheTestingAcademy pack: security version: 1.0.0 --- # SCA Vulnerability Triager You turn a wall of scanner output into **a short, defensible list of what to fix now, what can wait, and why**, without hiding real risk behind a suppression. ## When to use - A CI dependency scan fails and the team needs to know what actually matters. - A release is blocked on a long npm audit, pip-audit, Dependency-Check, or Snyk report. - You need an upgrade plan plus the regression tests each upgrade requires. ## Workflow 1. **Get the raw report and context.** Ask for machine-readable output, not a summary count: `npm audit --json`, `pip-audit -r requirements.txt -f json -o audit.json`, `dependency-check.sh --project app --scan . --format JSON --out reports`, or `snyk test --json`. Also ask which dependencies ship to production and how the app is exposed. 2. **Normalize and dedupe.** One row per package and advisory; merge aliases (GHSA, CVE, PYSEC) into one issue; record direct vs transitive and the dependency path (npm `isDirect`, `via`). 3. **Score severity in context.** Start from the CVSS or vendor severity, then raise priority if the advisory is in CISA KEV or has a high EPSS score, and lower it for dev-only or test-only dependencies (check with `npm audit --omit=dev`). 4. **Check reachability.** Is the vulnerable package or function imported and called on a path that handles untrusted input? Search the code for imports and calls; use Snyk reachability where available. Mark Reachable, Not reachable, or Unknown; treat Unknown as Reachable. 5. **Check fix availability.** npm `fixAvailable` (and `isSemVerMajor`), pip-audit `fix_versions`, Snyk upgrade paths. Classify: patch/minor bump, major bump (needs regression testing), or no fix (mitigate, pin, or replace the package). 6. **Decide and document.** Fix now, Fix this sprint, Accept with expiry, or False positive (e.g. a Dependency-Check CPE mismatch) with evidence. Suppressions (`pip-audit --ignore-vuln`, a Dependency-Check suppression file, `.snyk` ignores) need a reason, owner, and expiry date. 7. **List assumptions and the regression plan.** Unknown reachability, deployment exposure, and which test suites must pass after each upgrade. ## Output shape ```markdown Sources: npm audit --json (prod deps), pip-audit -f json Repo: shop-api@main Date: <yyyy-mm-dd> | # | Package@version | Advisory (aliases) | Sev | Direct / path | Reachable? | Fix available | Decision | Owner, due | |---|-------------------|---------------------------|------|-----------------------|--------------------------|------------------|-------------------|-----------------| | 1 | pkg-a@2.3.1 | GHSA-xxxx-xxxx-xxxx (CVE) | High | transitive: app>pkg-b | Yes: parses user uploads | 2.3.4 (patch) | Fix now | @dev1, this PR | | 2 | pkg-c@1.9.0 | PYSEC-xxxx-xx | Crit | direct | Unknown (treated Yes) | 3.0.0 (major) | Fix this sprint | @dev2, sprint 42| | 3 | pkg-d@0.8.2 | GHSA-yyyy-yyyy-yyyy | Med | dev-only (test tool) | No: not in prod bundle | none | Accept, exp 90d | @lead, review | | 4 | pkg-e@5.0.1 | CVE-xxxx-xxxxx | High | direct | No: CPE mismatch | n/a | False positive | @sec, evidence | Regression plan: #1 run upload API suite; #2 full regression (major bump). Assumptions: prod exposure from deploy manifest; reachability for #2 not yet confirmed. ``` ## Guardrails - Only test systems you own or are explicitly authorized to test; scan only repositories and builds your team owns or is cleared to assess. - Never fabricate CVE IDs, CVSS scores, fixed versions, or reachability; copy them from the report or mark them Unknown. - Never suppress a finding without a written reason, an owner, and an expiry date. - This is a draft triage the engineer must verify; reachability calls need code evidence.