EPSS & KEV: real-world exploitability
In plain terms
The CVSS base score tells you how bad a vulnerability could be in the abstract. Two signals tell you how likely it is to bite you. Both fill in the real-world dimension of risk that CVSS calls threat (temporal, in CVSS 3.1), as distinct from your environmental context:
- EPSS (Exploit Prediction Scoring System) is a probability, from 0 to 1, that a given CVE will be exploited in the wild in the next 30 days, produced by a data-driven model from FIRST.
- KEV (Known Exploited Vulnerabilities) is CISA's authoritative list of vulnerabilities that are being exploited right now.
Why it matters
CVSS has a field for exploitation and nearly nobody fills it in, so an unpopulated score is computed as though the flaw were already under attack. These two feeds are how the industry supplies from outside what the score left empty.
Only a small fraction of all CVEs are ever exploited. Sorting purely by the CVSS base score means spending effort on "critical" vulnerabilities that no attacker has ever bothered with, while a "medium" that's on the KEV list, and so being actively exploited, waits in the backlog. EPSS and KEV re-focus attention on the vulnerabilities that pose real risk today.
| The feed | What it tells you |
|---|---|
| KEV | is binary and high-confidence. If it's on the list it is being exploited, so treat it as urgent, regardless of its CVSS. |
| EPSS | is a dial, where a high score means "attackers are likely to weaponize this soon." |
Where it fits
These aren't scanners but enrichment. You take the CVEs your SCA and image scans already found, and cross-reference them against KEV and EPSS to sharpen priority.
How it works
KEV
CISA adds a vulnerability to the catalog when three things are true: it has a CVE ID, there is reliable evidence it has been exploited in the wild, and there is a clear remediation, such as a vendor update. Exploitation means an attacker ran code on a system without the owner's permission, and attempted exploitation counts as well as successful. Scanning, security research and a published proof of concept do not count, and neither does how exploitable a flaw looks on paper.
Federal civilian agencies in the US are required to remediate catalog entries within set timeframes, under Binding Operational Directive 26-04. Everybody else is urged to treat the catalog the same way, which is why it works as a shared definition of urgent.
EPSS
FIRST trains a model on observed exploitation activity and runs it against every published CVE once a day. Its inputs are signals that tend to come before an attack:
| Input | What the model reads |
|---|---|
| Public exploit code | whether a Metasploit module exists, exploit code in public GitHub repositories weighted by how widely those repositories are used, and inclusion in attacker tooling such as Nuclei templates |
| Discussion | chatter about the flaw and how often it is referenced |
| The flaw's own properties | every CVSS metric individually, rather than the score |
Observed exploitation trains the model and does not feed the daily score, so a score rises when exploit code appears or discussion spikes, before an attack is recorded. That is also why EPSS and KEV are independent: one forecasts from leading indicators, the other records what happened.
A prioritization step joins your findings' CVE IDs against both feeds. Neither feed can lower a finding, because a CVE missing from KEV or scoring low on EPSS is a statement that nothing was seen yet.
Common pitfalls
| The pitfall | Why it bites |
|---|---|
| EPSS is a probability, not a guarantee | A low score isn't "safe," just "less likely." |
| A proof of concept is not a KEV entry | Public exploit code raises a CVE's EPSS score. It reaches KEV only once somebody is seen using it. |
| Feeds go stale | EPSS updates daily and KEV grows continuously; use current data. |
| Neither one knows about your system | EPSS and KEV tell you whether a vulnerability is being exploited somewhere, rather than whether it's reachable or business-critical in your system. Combine this signal with your environmental context, meaning exposure and criticality for the full picture. |
draugr feeds update, and you turn them on once
in the descriptor, under config.exploitability. A CVE on KEV becomes critical; a CVE at
or above your EPSS threshold is raised one band. Ranking never reaches the
network, it reads the cached copy, so the same scan run twice ranks the same way and a
gated run stays reproducible. Fetching is something you ask for, which is what keeps a band
explainable: it came from a copy with a date on it rather than from whatever a service returned
that morning. Each finding that moved says why it moved, ranked as critical, on KEV
(2026-08-01), because a priority you can't check is a hint rather than evidence. See using KEV and EPSS in a
scan in the docs.
Keep learning
- CVE & CVSS, the severity baseline these refine
- Vulnerability prioritization, where all the signals combine