EPSS vs CVSS: Why "Critical" Doesn't Mean "Fix First"
CVSS measures how bad exploitation would be. EPSS measures how likely it is in the next 30 days. Confusing the two is why teams patch alphabetically while the actually-exploited bug waits.
Webcuris Research
Security Engineering
·2 min read

CVSS answers how bad would exploitation be — a severity score from 0 to 10 built from the vulnerability's characteristics. EPSS answers a different question entirely: how likely is this vulnerability to be exploited in the wild in the next 30 days — a probability from 0 to 1, re-estimated daily by FIRST from real exploitation telemetry. Teams that treat CVSS as a priority queue are sorting by the wrong axis: most critical-severity CVEs are never exploited at all, while some medium-severity ones are exploited within days.
What each score is made of
| CVSS | EPSS | |
|---|---|---|
| Measures | Worst-case impact and exploit characteristics | Probability of observed exploitation within 30 days |
| Produced by | Humans scoring against a rubric, once | A model over live exploitation data, updated daily |
| Changes over time | Rarely — the vulnerability is what it is | Constantly — publication of a PoC can move it 100× |
| Scale | 0–10 severity bands | 0–1 probability (plus a percentile) |
| Blind spot | Says nothing about whether anyone bothers | Says nothing about how bad it is if they do |
The two scores are not competitors; they are orthogonal axes. Every vulnerability in your backlog sits somewhere on the plane they span, and the quadrant it lands in is the priority decision:
The four quadrants
| Quadrant | Example shape | What to do |
|---|---|---|
| High CVSS · High EPSS | RCE with a public PoC being sprayed | Now. This is the drop-everything category — and it is small |
| High CVSS · Low EPSS | Critical bug needing local access nobody has | Schedule it into normal patching — watch EPSS, it moves |
| Low CVSS · High EPSS | Info-leak being actively harvested | Investigate your exposure — actively exploited beats theoretically severe |
| Low CVSS · Low EPSS | The long tail — most of the backlog | Batch with routine updates; do not let it consume triage attention |

Where EPSS is honestly limited
- It is population-level, not your-environment-level. EPSS models the internet's exploitation activity; it does not know your firewall rules, your compensating controls, or whether the vulnerable path is even reachable in your deployment.
- It lags novel targeting. A probability model built on observed activity is quiet right up until activity is observed. Pair it with CISA's KEV catalog — KEV is confirmed exploitation, and membership overrides any score.
- A low score is not permission to ignore. It is permission to schedule rather than to interrupt — which is precisely the distinction a priority system exists to make.
Using both without a spreadsheet
The practical version is a risk score that folds both axes together. When a Webcuris scan finds a vulnerable dependency — including a package name an AI invented, the finding's risk is computed from severity and the advisory's EPSS probability, alongside confidence and asset exposure — so the list you read is already in fix-first order, and a medium with a 0.9 exploitation probability outranks a critical with a 0.0004. The raw scores stay visible on every finding, because a prioritisation you cannot audit is a prioritisation you cannot trust.
Keep reading

How to Find Secrets Already Committed to a Git Repository (and What to Do at 2 A.M.)
Deleting the file does nothing — the secret lives in history, clones, forks and caches. The search commands, the rotate-first order of operations, and how to prove the old credential is actually dead.

A Vulnerable Dependency Was Found. Does It Actually Matter?
Most flagged dependencies are not exploitable in your application. Five questions that separate the ones that matter from the ones that generate tickets — and what to do when the answer is genuinely no.

Secure, HttpOnly, SameSite: Cookie Attributes Explained by What Goes Wrong Without Them
Three attributes, three specific attacks. What each one stops, what happens on the day it is missing, and the one line of Set-Cookie a session cookie should carry.