Safeguard
Security Guides•

How do you write affected and fixed versions in a CVE record?

Set status per version, give ranges a versionType, and use lessThan to name the fixing release. The CVE 5 version conventions with a worked example.

Safeguard Security Team
3 min read

In a CVE 5 record, mark each version as affected, unaffected or unknown, give ranges a versionType such as semver or maven, and use lessThan to name the release that contains the fix. Zero means no lower bound. An asterisk in an upper bound means infinity, not a wildcard.

The building blocks

The CVE Project's version guide describes these rules:

ConceptRule
Statusaffected, unaffected, or unknown for each entry
DefaultVersions matched by no entry take the product's defaultStatus, which defaults to unknown
Single versionNeeds only version and status
RangeNeeds versionType and either lessThan or lessThanOrEqual
Lower bound0 means no lower bound
Upper boundAn asterisk means infinity
Custom version typeDiscouraged, because tools cannot evaluate it

A worked example in plain words

Say your library 2.x line broke in 2.3.0 and was fixed in 2.7.4, while the 1.x line never had the bug. You would describe it like this:

  1. Product default status: unaffected, since most versions are fine.
  2. One range entry: version 2.3.0, lessThan 2.7.4, versionType semver, status affected.
  3. Nothing for 1.x, because the default already covers it.

A reader and a tool can now answer "am I on 2.5.1" without guessing.

Why lessThan beats lessThanOrEqual

The guide notes that ranges use lessThan more often, because it can name the exact fixing version. A lessThanOrEqual value only names the last release you tested, and implies the next one is fixed. If you later skip a release, you have made a claim you cannot support. Name the real fix.

Pick the right version type

Each numbering system orders versions differently, which is why a range needs a type. Semver, maven, python and rpm are examples the guide lists. Git commit hashes can serve as versions too, with a repository field, and then ordering follows commit ancestry. Use the type your users' tools understand.

Common mistakes

  1. Leaving the default as unknown on a product where nearly everything is unaffected, which makes tools flag everything.
  2. Writing a range with no versionType.
  3. Forgetting a backport. If you fixed the 2.6 line in 2.6.9 as well, add that. See fixed versions and backports.
  4. Listing only one branch when several are affected.

Try it yourself

Click through it at your own pace, or open it full screen.

Look at how a fixed version turns into a concrete upgrade step.

Quick check

What does 0 mean as a lower bound?

No lower bound. The range starts at the earliest version.

Is an asterisk a wildcard in an upper bound?

No. The guide says it means infinity.

Safeguard's dependency scanning and autonomous remediation can propose fix PRs, off by default with every category on Manual. A free scan shows which fixed versions apply to you.

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.