CVSS and EPSS for faster triage

Why CVSS alone sends you after the wrong tickets

CVSS scores how severe a vulnerability looks in theory. It does not tell you whether anyone is actually trying to use it. That gap matters when the patch queue is long and the people doing the work have finite capacity, because a high score can pull attention towards a problem that stays quiet for months.

A pure CVSS sort also hides the dull truth that many high-scoring issues never get exploited in the wild. Some will be awkward, noisy, or expensive to fix, and still never matter operationally. Others with a middling score will sit in a live exploit chain and turn into a real incident before the ticket is even touched.

EPSS adds exploitation likelihood to the queue

EPSS estimates the probability that a CVE will be exploited within 30 days. It runs on a 0.0 to 1.0 scale and updates daily, which makes it useful for defensive triage rather than long-range planning. The score is a signal about near-term exploit probability, not a judgement about technical severity.

That difference is the useful bit. CVSS tells you how bad the wound could be. EPSS tells you whether anyone is likely to swing at it this week.

Treat CVSS as impact, not priority

CVSS still matters. A vulnerability with a low technical impact score does not deserve panic just because EPSS is high, and a high-impact bug does not become harmless because the probability looks low. The mistake is using one number to do two jobs.

Use CVSS to understand consequence. Use EPSS to sort the queue. When both are high, the decision is usually simple: patch now. When CVSS is high and EPSS is low, the item still matters, but it does not need to displace live exploitation work.

Use EPSS bands to separate noise from the pile that actually matters

A raw probability figure is easy to stare at and then ignore. Bands are blunt, which is the point. They give triage a shape that people can act on without turning every vulnerability review into a debate club.

A practical split is straightforward:

  • low EPSS: keep it in the normal patch cycle
  • mid EPSS: check for exposure, internet reachability, and compensating controls
  • high EPSS: move it to the front of the queue, especially if the asset is exposed

The exact cut-off matters less than using the same rule every time. A medium CVSS issue with a high EPSS should move faster than a pristine-looking CVSS 9 that nobody has touched in months. The latter is still worth fixing, just not before the thing that is already attracting exploit traffic.

Folding EPSS into patch prioritisation without making a mess

EPSS works best when it sits alongside other exploitation signals, not when it is treated like a magic answer. Known exploited-vulnerability lists, threat intelligence, and local asset context still matter. A score on its own does not tell you whether the vulnerable system is internet-facing, reachable only on a lab VLAN, or already hidden behind three layers of awkwardness.

Cross-check with threat intelligence and known exploitation data

Known exploited records give direct evidence that a vulnerability has been used. That is stronger than a probability score, but it is also narrower and slower to grow. A conservative exploited-vulnerability list can miss activity that defenders already see elsewhere. Local and commercial threat intelligence can fill some of that gap, especially when the same CVE starts turning up in exploit kits, scanner noise, or public write-ups.

GCVE matters here because it lets exploitation evidence and enrichment arrive from more than one place against the same identifier. That is useful when the central pipeline is slow, backlogged, or simply thin on detail. If one source says a CVE is dull and another shows active exploitation, the queue should stop pretending both signals carry the same weight.

Set a simple rule for when to patch now, watch, or defer

A triage rule works best when it is boring enough to survive a bad day.

Patch now:

  • high EPSS and high CVSS
  • any vulnerability with known exploitation on exposed assets
  • anything sitting on a public service, VPN edge, or mail path where delay hurts

Watch:

  • medium EPSS with moderate CVSS
  • assets that are not exposed today but could be reached through lateral movement
  • items where the fix is ugly and needs a maintenance slot

Defer:

  • low EPSS
  • low operational exposure
  • issues with no meaningful access path and no sign of exploitation

The point is not to make a perfect ranking. The point is to stop treating every CVSS 9 as equal and every CVSS 6 as harmless. Both habits waste time.

A triage workflow that holds up under pressure

Use EPSS as the first cut when the queue is too full and the pressure is real. Sort by exploitation likelihood, then apply CVSS, exposure, and known exploitation evidence before a human signs off on the order. Keep the rule set short enough that it still works when the rota is thin and the inbox is ugly.

If a vulnerability has high EPSS, public exposure, and any sign of active exploitation, it does not need a committee. If it scores high on CVSS but stays low on EPSS and lives behind good controls, it can wait its turn. That is the job: patch the things that are likely to be hit, not the things that merely look impressive in a report.

Related posts

Immich | v3.1.0

Immich v3 1 0: web and mobile UX and accessibility improvements, workflow EXIF and path filters, auth and admin security updates, CLI and bug fixes

headscale | v0.29.3

headscale v0 29 3: fixes tagging and re registration, stabilizes ephemeral reconnects, adds registration security checks, upgrade notes, min TS client v1 80 0

Immich | v3.1.0

Immich v3 1 0: web UX and accessibility, path and EXIF workflow filters, OAuth admin security, mobile updates and iOS14 drop, bug fixes and contributors