Security · 7 min read · RepoD Team

Beyond CVSS: Why EPSS + KEV Change How You Prioritize CVEs

CVSS scores were never designed for prioritization. Learn how combining Grype scanning with EPSS probability scores and the CISA Known Exploited Vulnerabilities catalog gives you a defensible, risk-based remediation workflow.

Your vulnerability scanner just produced a report with 847 findings. 23 are CRITICAL. Your team can realistically patch 5 packages this sprint. Which ones do you fix first?

If your answer is “the ones with CVSS 10.0”, you are probably fixing the wrong things.

The CVSS Prioritization Trap

CVSS (Common Vulnerability Scoring System) measures theoretical severity — how bad could it be if exploited, under the worst-case conditions. It does not measure:

  • Whether a public exploit actually exists
  • Whether the vulnerability is being actively exploited right now
  • Whether your specific configuration is vulnerable
  • Whether fixing it would actually reduce your risk

A CVSS 10.0 in a library that requires local authenticated access, running on a service exposed only to your internal network, with no public exploit after 3 years — is probably less urgent than a CVSS 7.2 with a weaponized exploit kit, actively targeted by ransomware groups, in your internet-facing API server.

EPSS: Exploit Probability at 30 Days

The EPSS (Exploit Prediction Scoring System), maintained by FIRST.org, uses machine learning trained on real-world exploit activity to produce a probability score between 0 and 1: the likelihood that a CVE will be exploited in the wild in the next 30 days.

The data is updated daily and is freely available. Key findings from the EPSS research:

  • Only ~2-7% of published CVEs are ever exploited in the wild
  • CVSS scores have no meaningful correlation with exploitation probability
  • EPSS identifies the top-exploited CVEs with ~4x better precision than CVSS

In practice: a CVE with CVSS 9.8 and EPSS 0.003 (0.3% exploitation probability) is far less urgent than a CVE with CVSS 6.5 and EPSS 0.92 (92% exploitation probability).

CISA KEV: Ground Truth for Active Exploitation

The CISA Known Exploited Vulnerabilities (KEV) catalog is a curated list of CVEs that CISA has confirmed are actively exploited in the wild. It is updated multiple times per week and represents the highest-confidence signal available for prioritization.

CISA’s Binding Operational Directive 22-01 requires US federal agencies to remediate KEV entries within 2 weeks (critical) or 6 months (non-critical). Even if BOD 22-01 doesn’t apply to you, KEV is the best public source for “fix this now” decisions.

How RepoD Combines These Signals

When RepoD scans a package with Grype, it enriches each detected CVE with both EPSS and KEV data:

{
  "cve": "CVE-2024-6387",
  "severity": "CRITICAL",
  "cvss": 8.1,
  "epss": 0.9732,
  "epss_percentile": 99.8,
  "kev": true,
  "kev_date_added": "2024-07-01",
  "package": "openssh-server",
  "version": "9.3p1-1"
}

CVE-2024-6387 (regreSSHion) is a good example: CVSS 8.1 (high, not critical), but EPSS 0.97 (top 0.2% of all CVEs by exploitation probability) and KEV-flagged. A pure CVSS-based policy would have deprioritized it; enriched scoring puts it at the front of the queue.

A Practical Prioritization Matrix

Combining CVSS, EPSS, and KEV gives you a 3-axis risk signal. A simple policy that maps well to real-world risk:

ConditionActionRationale
KEV = trueImmediate, same sprintConfirmed active exploitation
EPSS ≥ 0.70High priority, this sprint70%+ exploitation probability
CVSS ≥ 9.0 AND EPSS ≥ 0.30High priorityHigh severity + meaningful probability
CVSS ≥ 7.0 AND EPSS ≥ 0.10Normal priority, next sprint
CVSS < 7.0 AND EPSS < 0.05 AND KEV = falseScheduledTheoretical risk only

This matrix reduces a 847-finding report to roughly:

  • 3 immediate (KEV + high EPSS)
  • 12 high priority
  • ~80 normal priority
  • ~750 scheduled/informational

That’s a workload your team can actually execute.

Caching for Air-Gapped Environments

A common objection to EPSS and KEV enrichment is that they require outbound internet access. RepoD addresses this with a 24-hour disk cache:

  • EPSS scores are fetched in bulk from first.org/epss (a single CSV download, not per-CVE queries)
  • The KEV catalog is fetched from CISA’s JSON feed
  • Both are cached to /repos/security/ on disk

After the initial fetch, RepoD works fully air-gapped for 24 hours. If the fetch fails, it continues using the cached data. For permanently air-gapped environments, you can pre-populate the cache files and disable the fetch with "sync": { "enabled": false } in settings.json.

Building a CVE SLA Policy

NIS2, ISO 27001:2022, and most cyber insurance policies now require documented CVE remediation SLAs. RepoD’s SLA checker (running daily at 08:00) alerts when CVEs in the "review" state exceed the configured deadline:

{
  "cve_policy": {
    "sla_days": {
      "critical": 3,
      "high": 14,
      "medium": 90
    }
  }
}

When a CVE decision is overdue, it appears in the dashboard Security section with a red badge and triggers an alert to the configured notification channel. The decision log — who approved or rejected each CVE, when, and why — is preserved in the immutable audit trail for regulatory evidence.

Takeaway

CVSS gives you a severity estimate. EPSS + KEV give you an exploitation probability. The combination tells you what to fix first in a way you can defend to your CISO, your auditor, and your board.

For packages flowing through your infrastructure, the right place to apply this analysis is before distribution — not after an incident.


Explore RepoD’s CVE enrichment in the Security page or request a demo.