Triage a CVE properly

A ticket arrives with an identifier and nothing else. CVSS already answered “how bad is it”, badly. The real question is do we act now, and how do I justify either answer.

1. What is true

Look up CVE-2021-44228. Is it in KEV, what is the EPSS score, and what is the SSVC decision?

vulnetix_vuln returns, among ~10 KB:

{
  "id": "CVE-2021-44228",
  "kev": {
    "vendorProject": "Apache",
    "product": "Log4j2",
    "dueDate": "2021-12-24T00:00:00Z",
    "knownRansomware": "Known",
    "requiredAction": "For all affected software assets..."
  },
  "epss": { "score": 0.99999, "percentile": 1.0 },
  "ssvc": { "decision": "Act", "priority": "immediate", "automatable": "YES" },
  "exploitationMaturity": { "level": "ACTIVE" },
  "affectedRoutines": [ "..." ],
  "affected": { "total": 676 }
}

Four independent signals agreeing: a binding CISA deadline, near-certain exploitation probability, an SSVC decision of Act, and known ransomware use. That is evidence, not a severity label.

Note The interesting case is the opposite one. A CVSS 9.8 with EPSS 0.00042, no KEV entry, exploitation maturity NONE and no sightings in two years is a very different object from this, and CVSS alone cannot tell them apart. Most of what you triage is the second kind.

2. Is it being exploited, or just exploitable

Is it being exploited?

vulnetix_exploits:

{
  "exploitCount": 19868,
  "activeSources": [
    { "source": "poc", "count": 15259 },
    { "source": "crowdSec", "count": 101 },
    { "source": "nmapNse", "count": 70 }
  ]
}

Then vulnetix_sightings for whether that is history or current:

{ "count": 2568, "lastObservation": "2026-08-08T00:00:00Z", "daysSinceLastSeen": 2 }

Seen two days ago. Five years after disclosure.

3. How fast does this class move

How long did it take to be weaponised?

vulnetix_timeline:

"meta": {
  "publicationToFirstExploitDays": 20,
  "lifecycleStage": "LEGACY",
  "insights": ["Exploit published within 1 month", "Patches available in 986 versions"]
}

Twenty days from disclosure to a public exploit. That is the sentence to put in front of whoever is asking for a two-week deferral.

4. Does it reach your code

Tools cannot answer this, because it is your repository. affectedRoutines from step 1 gives you what to look for, and the local workflow does the rest:

/mcp__vulnetix__vulnetix_vuln CVE-2021-44228

The prompt cross-references your lockfiles and, with the CLI installed, runs a tree-sitter reachability scan, a real AST pass over your project instead of a heuristic. reachability.direct and .transitive are authoritative when present.

5. Decide, with the reasoning attached

On Pro and above:

{
  "identifier": "CVE-2021-44228",
  "context": "internal batch service, no untrusted input, Java 8, behind a WAF"
}

vulnetix_triage_reason returns a priority band, the rationale, the dominant factors, and what would change the answer. That last one is what makes the decision reviewable instead of an opinion.

On Community you get the same inputs and reason it through yourself; the tool returns the data and says the analysis was tier-gated.

6. Fix and verify

What is the remediation plan, and which action first?

vulnetix_remediation returns 37 ranked actions with concrete steps, effort and impact ratings, distribution patches and registry fixes.

Then locally:

/mcp__vulnetix__vulnetix_fix CVE-2021-44228
/mcp__vulnetix__vulnetix_verify_fix CVE-2021-44228

verify_fix re-scans and gates on the result, writing the verdict to .vulnetix/memory.yaml so the decision survives the conversation.

If you cannot patch

Is there a workaround, and can I detect exploitation meanwhile?

vulnetix_workarounds for mitigations that need no patch. vulnetix_detection_rules for deployable Snort, YARA and Nuclei content. The rules come back whole, because you cannot deploy a description.

The whole thing as one prompt

/mcp__vulnetix__vulnetix_vuln CVE-2021-44228

The prompt runs this sequence with the thresholds and the CWSS scoring already written. Use the tools directly when you want one specific fact; use the prompt when you want the procedure.