AI Code Review

CVSS, EPSS, and CISA KEV. How to Actually Prioritize Vulnerabilities

Amartya | CodeAnt AI Code Review Platform
Sonali Sood

Founding GTM, CodeAnt AI

Your scanner returned 4,000 findings. About 2,400 of them are rated High or Critical. Your team can remediate perhaps forty this month.

That arithmetic is the entire problem, and severity scoring alone does not solve it.

A CVSS score describes how bad a vulnerability would be if exploited. It says nothing about whether anyone will ever exploit it.

This guide covers the three data sources that actually answer that question, how they differ, and how to combine them into a rule your team can run on Monday.

Where this connects to your stack: CodeAnt AI correlates all three signals inside attack surface management, across more than thirty data sources including the National Vulnerability Database, the CISA Known Exploited Vulnerabilities catalog, and EPSS scoring. This article is the reasoning behind that correlation, written so you can apply it with any tooling.

What is vulnerability prioritization?

Vulnerability prioritization is the practice of ranking known vulnerabilities by the risk they pose to your specific environment, so that limited remediation capacity goes to the findings that matter.

It exists because two numbers never match. The number of vulnerabilities disclosed each year runs into the tens of thousands. The number any single team can fix runs into the hundreds.

The naive approach sorts by severity and works down the list. That fails for a structural reason worth stating plainly.

Severity is a property of the vulnerability. Risk is a property of the vulnerability in your environment, exposed to actual adversary behaviour. Sorting by severity alone optimises for the wrong variable.

Three public data sources give you the missing variables. Each answers a different question and none of them is sufficient alone.

Source

Question it answers

Maintained by

CVSS

How bad would this be if exploited?

FIRST

EPSS

How likely is exploitation in the near term?

FIRST

CISA KEV

Is this being exploited right now?

CISA

What is a CVSS score?

CVSS stands for the Common Vulnerability Scoring System. It is an open standard maintained by FIRST that produces a numeric severity rating from 0.0 to 10.0 for a given vulnerability.

The score is not a single opinion. It is computed from a defined set of metrics, which is what makes it comparable across vendors and researchers.

The CVSS severity ratings

Score

Rating

0.0

None

0.1 to 3.9

Low

4.0 to 6.9

Medium

7.0 to 8.9

High

9.0 to 10.0

Critical

What the base metrics actually measure

The Base score, which is the number you almost always see quoted, is built from two groups.

Exploitability metrics describe how hard the vulnerability is to trigger. Attack Vector distinguishes network-reachable from physically-present. Attack Complexity captures whether conditions outside the attacker's control are required.

Privileges Required and User Interaction capture what the attacker must already have or must persuade someone to do.

Impact metrics describe what happens when it works, measured against confidentiality, integrity, and availability.

CVSS v4.0 restructured this. The old Scope metric was replaced by separate impact metrics for the vulnerable system and for subsequent systems, and the Temporal group was renamed Threat.

Many tools still report v3.1, so check which version a score refers to before comparing two numbers.

What a CVSS score does not tell you

This is where teams go wrong, so it is worth being blunt about the limits.

A Base score deliberately excludes your environment. It does not know whether the affected component is deployed, reachable from the internet, or behind three other controls.

It also excludes adversary behaviour entirely. A theoretically devastating flaw in software nobody attacks scores identically to one under active mass exploitation.

CVSS provides Temporal and Environmental metric groups precisely to address this. They go largely unused, because populating them requires per-asset work at a scale few teams can sustain.

The result is a well-known distribution problem.

A large share of all published CVEs score 7.0 or above, so "fix everything High and Critical" is not a prioritization strategy. It is a restatement of the backlog.

What is EPSS?

EPSS stands for the Exploit Prediction Scoring System. It is maintained by FIRST and it answers a completely different question from CVSS.

An EPSS score is a probability between 0 and 1 that a given CVE will be exploited in the wild within the next thirty days. Scores are recomputed daily.

How EPSS works

EPSS is a machine learning model trained on observed exploitation data.

It ingests features associated with each CVE, including vulnerability characteristics, the existence of public exploit code, references, vendor, and observed activity, and outputs a probability.

Two numbers are published per CVE and they are frequently confused.

The probability is the direct model output. A score of 0.10 means roughly a ten percent chance of observed exploitation in the next thirty days.

The percentile is where that CVE ranks against all others. A percentile of 0.95 means the CVE scores higher than ninety-five percent of all scored CVEs.

Use the probability for absolute decisions and the percentile for relative ranking. Reporting a percentile as if it were a probability is a common and consequential error.

Why EPSS changes the arithmetic

The base rate of exploitation is low. Only a small fraction of published CVEs are ever observed being exploited in the wild.

That means severity-first prioritization spends most of its effort on vulnerabilities nobody will ever attack.

EPSS is the correction, because it lets you exclude the large low-probability mass and concentrate on the tail.

The critical caveat is that EPSS is a prediction, not an observation.

A low score is not a guarantee of safety, and a targeted attack against your organisation specifically is exactly the case a population-level model handles worst.

What is the CISA KEV catalog?

The CISA Known Exploited Vulnerabilities catalog is a list of vulnerabilities with reliable evidence of active exploitation in the wild.

It is maintained by the United States Cybersecurity and Infrastructure Security Agency.

Note the disambiguation, because it costs people time. In this context KEV means Known Exploited Vulnerabilities. It is unrelated to any other use of those three letters.

The inclusion criteria

A vulnerability enters the catalog only when three conditions are met.

It has an assigned CVE ID. There is reliable evidence of active exploitation in the wild. And there is a clear remediation action available, typically a vendor patch.

That third criterion matters. The catalog is designed to be actionable, so a vulnerability with no available fix generally does not appear.

Why KEV outranks both other signals

CVSS is theoretical. EPSS is predictive. CISA KEV is observational.

If a CVE is in the catalog, the question of whether anyone exploits it has been answered empirically. No probability estimate improves on a confirmed observation.

The catalog also carries regulatory weight.

Under Binding Operational Directive 22-01, United States federal civilian executive branch agencies are required to remediate catalogued vulnerabilities by specified due dates.

Many private organisations have adopted the same standard voluntarily, because it is the clearest available definition of "urgent".

The limitation is coverage. The catalog contains only what CISA has confirmed, which means it is authoritative when a CVE appears and silent rather than reassuring when one does not.

How CVSS, EPSS, and CISA KEV compare

Dimension

CVSS

EPSS

CISA KEV

Question

How bad if exploited?

How likely to be exploited?

Is it exploited?

Output

0.0 to 10.0 severity

0 to 1 probability

Binary, in or out

Nature

Deterministic formula

Statistical prediction

Empirical observation

Update cadence

On publication or revision

Daily

As confirmed

Environment-aware

Only via unused optional metrics

No

No

Coverage

Nearly all CVEs

Nearly all CVEs

Small confirmed subset

Best use

Sizing consequence

Excluding the improbable mass

Defining urgent

Failure mode

Treats theoretical as urgent

Misses targeted attacks

Silence is not safety

The single most useful sentence to take from that table. CVSS tells you how bad, EPSS tells you how likely, and CISA KEV tells you it already happened.

None of the three tells you whether the affected component is actually reachable in your environment. That gap is addressed later in this article.

How to combine all three into one prioritization rule

Here is a defensible tiering that a team can implement without a data science function. Treat the thresholds as starting points to calibrate against your own remediation capacity.

Tier

Condition

Target

P0

In CISA KEV, and the component is deployed

Emergency change, days

P1

EPSS probability at or above 0.10, and CVSS 7.0 or above

Current sprint

P2

EPSS at or above 0.10, or CVSS 9.0 or above

Next sprint

P3

CVSS 7.0 or above, EPSS below 0.10

Routine patch cycle

P4

Everything else

Batch, or accept with a documented reason

Four notes on applying it.

Calibrate the EPSS threshold to your capacity, not to a blog post. Sort your backlog by EPSS descending, walk down until you hit the number of items you can genuinely fix per cycle, and use that score as your line.

Deployment status is a gate, not a tiebreaker. A CISA KEV entry for software you do not run is not a P0. It is not a finding at all.

Re-run the scoring on a schedule. EPSS changes daily and the CISA KEV catalog grows continuously. A priority assigned three months ago is stale by construction, and the direction of travel is usually upward.

Record acceptances explicitly. P4 with a documented reason is a decision. P4 because nobody looked is an unmanaged risk wearing a tier label.

What risk-based vulnerability management looks like in practice

Risk-based vulnerability management is the programme-level version of the rule above. It replaces "remediate by severity" with "remediate by modelled risk to this organisation".

Four inputs make it work. The first two are common and the last two rarely are.

Vulnerability data. Which CVEs affect which components. This is what scanners provide.

Threat data. EPSS and CISA KEV, which supply the likelihood dimension.

Asset context. Whether the affected component is deployed, internet-facing, and what data it can reach. This input has the largest effect on the final ranking and is usually the weakest.

Reachability. Whether the vulnerable code path is actually invoked in your configuration. A vulnerable function in a linked library that your SCA tooling flags is a materially different risk when it sits on your primary request path versus a library your application never calls into.

The honest reporting metric is not open findings, and it is not mean time to remediate. It is the count of vulnerabilities that are both exploitable and reachable, and the trend of that count over time.

Where vulnerability prioritization still breaks down

Three failure modes survive even a well-run risk-based programme. Each is worth naming.

Fixed in a repository is not fixed in production

A merged patch and a deployed patch are different claims, and most dashboards only measure the first.

The Liquid Network incident in September 2026 is the clearest recent illustration.

A fix for a consensus-level bug in the Elements codebase was merged to public branches around September 1 to 3, but never shipped in a tagged release.

The exploit landed on September 6 and roughly $320 million in Bitcoin left the network in about 23 minutes.

Every ticket in that scenario reads as closed. The full breakdown is in our writeup of that attack path.

An unreleased fix is a public exploitation window

Once a security fix is merged in a public repository, the vulnerability is effectively disclosed to anyone reading the commit log, whether or not an advisory exists.

Patch diffing turns that commit into a working exploit in days. Prioritization frameworks that key on CVE publication date systematically miss this window, because the CVE often does not exist yet.

Severity is a property of the chain, not the component

This is the deepest limitation. Every framework in this article scores individual vulnerabilities in isolation.

Real compromises are chains.

A low-severity information disclosure that leaks an internal hostname, combined with a medium-severity authorization gap, produces a critical outcome that neither component's score predicts.

No amount of per-CVE scoring surfaces that.

Only validating the path end to end does.

Which is the argument for attack path validation alongside prioritization rather than instead of it.

How CodeAnt AI Applies These Signals

Three parts of the platform touch this problem, and being specific about which is more useful than being expansive.

CodeAnt AI CVE intelligence view listing 109 known vulnerabilities for an external target with CVSS severity scores, EPSS exploit-prediction percentages, a known-exploited filter, and affected hosts, including multiple critical CVEs scored 9.9.

CVSS, EPSS, and a known-exploited filter, on the same row for every CVE. This is the three-signal comparison from earlier in this article, applied to a live target rather than a spreadsheet.

Attack surface management correlates more than thirty data sources continuously, including the National Vulnerability Database, the CISA Known Exploited Vulnerabilities catalog, and EPSS scoring. The output view lists each CVE with its CVSS severity, its EPSS percentage, and a known-exploited filter, which is the three-signal comparison in one place.

The cadence is the point. This runs daily rather than on a scan schedule, so a newly published CISA KEV entry against software you run surfaces the same day rather than at the next quarterly review.

Deterministic scoring in the AI penetration testing pipeline adds the dimension CVSS cannot. Findings are scored by vulnerability weight, target weight, proximity to data, and reachability, using pure code rather than a model so the result is auditable.

CodeAnt AI findings panel listing confirmed vulnerabilities by severity, including a cross-host SaaS bypass and admin-settings source disclosure, completed in under three hours with no traffic sent.

A queue ranked by proximity to data, not raw CVSS. Two findings with similar severity scores can sit far apart here once reachability and target weight are factored in.

Proximity to data is the variable that matters most and that public scoring omits entirely. A defect zero hops from a customer database outranks a higher-CVSS defect three hops away.

Proof of exploitation closes the loop. More than 500 agents chain findings to demonstrate what an attacker actually reaches, on the principle that a detected vulnerability is not a confirmed leak.

For context on what scoring alone misses, CodeAnt has found 150+ CVEs including a CVSS 10.0 vulnerability in pac4j that went undetected for six years.

Those projects represent 2B+ monthly downloads protected.

The Vulnerability Prioritization Checklist

Data foundations

  • Ingest all three signals. CVSS from NVD, EPSS daily from FIRST, and the CISA KEV catalog. Two out of three is the common failure.

  • Record the CVSS version alongside every score. A v3.1 and a v4.0 number are not directly comparable.

  • Use EPSS probability for thresholds and percentile for ranking. Do not mix them.

Context

  • Gate on deployment status before anything else. An unrun component is not a finding.

  • Flag internet-facing assets as a separate dimension rather than folding them into severity.

  • Establish reachability for your top findings. If you cannot answer whether the vulnerable path is invoked, that is the gap to close first.

Operations

  • Calibrate thresholds to actual throughput. Measure how many items you close per cycle and set the line there.

  • Re-score on a schedule, because EPSS moves daily and CISA KEV grows.

  • Track merged versus deployed as distinct states in your workflow.

  • Document every acceptance with a named owner and a review date.

Reporting

  • Report exploitable and reachable counts, not open finding counts.

  • Report your patch window, measured from public fix availability to full deployment.

Where This Leaves You

The three signals are complementary and cheap. All are public, all are free, and combining them takes an afternoon of engineering.

What they cannot give you is environment context or chain awareness. Both of those live in your own infrastructure, and no external feed supplies them.

So the sequence is straightforward.

Use CVSS, EPSS, and CISA KEV to shrink the queue from thousands to dozens, then use reachability and attack path validation to determine which of those dozens actually reach anything.

FAQs

What is the difference between CVSS and EPSS?

Is EPSS better than CVSS?

What does it mean when a CVE is in the CISA KEV catalog?

What EPSS score should trigger action?

Why do most vulnerabilities never get exploited?

Start Your 14-Day Free Trial

AI code reviews, security and quality trusted by modern engineering teams.

Table of Content
No headings found on page
Ship clean & secure code faster

Get Pentest Report

NO CC REQUIRED