Safeguard
Industry Analysis•

Which public dataset fits your question: KEV, EPSS, OSV or NVD?

Pick the dataset by the question: KEV for known exploitation, EPSS for likelihood, OSV for package versions, NVD for CVE records. Here is a decision table.

Safeguard Security Team
6 min read

Choose the dataset by the question. KEV answers "was this exploited, according to CISA?" EPSS answers "how likely is exploitation in the next 30 days?" OSV answers "which package versions does an advisory affect?" NVD holds the CVE record itself. Using the wrong one produces a number that sounds right and means something else.

Decision table

Your questionFitsWhat it cannot tell you
Has this CVE been exploited in the wild?KEVWhether unlisted CVEs were exploited
How likely is exploitation soon?EPSSWhat will happen on your host
Is my package version affected?OSVWhether the code path is reachable
What does the CVE record say?NVDOpen source package ranges in detail
How fast do entries reach the catalog?KEV plus CVE datesCauses of delay
How do ecosystems differ in advisory volume?OSV per-ecosystem exportsReal vulnerability counts

The EPSS description from FIRST is a probability that a published CVE will be exploited in the wild in the next 30 days. The KEV page describes the catalog as CISA's authoritative source of vulnerabilities exploited in the wild. OSV's documentation describes aggregated advisory records exported by ecosystem. Those are three different statements, and each limits what a study can claim.

Mismatches to avoid

  1. Using EPSS to claim something was exploited. It is a probability, not an observation.
  2. Using KEV to estimate how common exploitation is. KEV is a list of known cases, so it understates.
  3. Using OSV record counts as a count of vulnerabilities. A flaw can have several records. See OSV advisory records versus unique vulnerabilities.
  4. Using one dataset's fields to fill another's gaps, such as copying severity from a different source without saying so.

Combining datasets

Many good posts join two sources. Do it deliberately:

  1. Write the single question first.
  2. Name the key you will join on, usually the CVE ID.
  3. Decide how to handle rows with no match. See the join post.
  4. Record each snapshot, since they update on different schedules.
  5. State which dataset defines the population.

For practitioners rather than researchers

The same split applies to day to day triage. Exploitation evidence, likelihood and reachability are different signals, and none replaces the others. For triage use, see which signal to read first. Safeguard's reachability analysis and dependency scanning address the local question that global datasets cannot, and a free scan is available at gold.safeguard.sh/scan.

A worked example, three questions

Take three plausible research questions and match each to a source.

Question one: "Of the CVEs in a customer's SBOM, which have a record of exploitation?" Use KEV as the primary source, because it lists exploitation CISA has evidence of. Join on the CVE ID. Report unmatched IDs, and say that absence from KEV is not evidence of safety.

Question two: "Which of those are most likely to be attacked next month?" Use EPSS, with the score date and model version. Say that it is a probability across environments, not a prediction for that customer.

Question three: "Which versions of each package are affected?" Use OSV, which records affected versions as ranges or lists per package, and read the introduced and fixed events. Say which field you used.

Each question needs a different source, and a post that uses KEV to answer question two, or EPSS to answer question one, is making a category error.

When one dataset is not enough

SituationAdd
KEV says exploited, but you cannot tell if you are affectedOSV or the vendor advisory for versions
OSV says a version is affected, but is it reachableReachability analysis on your code
EPSS is low, but the product is exposedYour own asset and exposure data
NVD record lacks a scoreAnother severity source, labeled as such

No public dataset knows your environment. Global signals narrow the list, and local facts decide the order.

Steps for choosing

  1. Write the question as a sentence with a verb: "count", "compare", "rank", "explain".
  2. Identify the unit: CVE, advisory record, package version, entry.
  3. Pick the dataset whose unit and field match.
  4. Check the limits of that dataset in its own documentation.
  5. If you need two datasets, decide the join key and the missing value rule.
  6. Record snapshots for each.

A caution on NVD

The NVD holds the CVE record and its metadata, including enrichment status that can change after a CVE is published. If your question depends on a score or on configuration data, check whether the record has been analyzed before you rely on it. See why a new CVE shows no severity score for what that gap means.

Wording your claim to match the dataset

Once you have picked the source, check that your sentence only claims what that source supports.

Weak claimClaim the data supports
Attackers favor this productCISA lists n entries for this vendor in release 2026.10.16
This CVE will be exploitedEPSS gave this CVE a probability of p on the score date
Ecosystem X is less secureEcosystem X has fewer or more advisory records in this export
This package is vulnerableThis version falls inside an affected range in this record

Each supported claim names its source and its date, and none of them asserts a cause or a forecast the data cannot carry.

Try it yourself

Click through it at your own pace, or open it full screen. See which signals a single finding carries.

Quick check

Can KEV and EPSS answer the same question?

No. KEV records known exploitation. EPSS estimates likelihood. They are often used together, but they answer different questions.

Is NVD or OSV better for open source packages?

OSV is built around package ecosystems and version ranges. NVD is the CVE record. Many analyses use both and say which supplied what.

Is it acceptable to use only one dataset?

Yes, if the question fits it. State the limits of that dataset in your limitations paragraph.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.