Safeguard
Supply Chain•

SBOM vs vulnerability report vs VEX: which one answers what?

An SBOM lists what is inside, a scan report lists known flaws, and a VEX says which flaws matter. Learn which document answers which question.

Safeguard Security Team
7 min read

An SBOM lists the parts inside your software. A vulnerability scan report lists known flaws in those parts. A VEX statement says whether a given flaw actually affects your product. Three documents, three questions: what is in it, what is wrong with it, and does that problem matter here.

TL;DR

  • SBOM: the ingredient list. It does not say whether anything is broken.
  • Vulnerability scan report: the list of known problems found when the ingredients are checked against public databases. It changes as new problems are found.
  • VEX: a short statement from the software maker about whether a specific flaw affects a specific product.
  • Customers often ask for the first, receive the second, and really need the third.

Definition. VEX stands for Vulnerability Exploitability eXchange. CISA describes a VEX document as an attestation, a form of security advisory, that indicates whether a product is affected by a known vulnerability or vulnerabilities.

What does an SBOM tell you?

An SBOM answers one question: what is in this software?

CISA calls it a nested inventory, a list of ingredients. The 2026 minimum elements guidance, written by CISA with partner agencies, describes the data in it. That includes the name and version of each component, who produced it, its identifiers, its license, and how the components relate to each other.

What the SBOM does not do is judge. It does not say a component is safe or unsafe. The same guidance puts it directly: "An SBOM alone is data about software components. Analysis of SBOMs transforms data into insights about associated risks."

Think of the ingredient label on a cereal box. It lists wheat, sugar and salt. It does not tell you whether you are allergic to anything. You have to compare it with your own needs.

What does a vulnerability scan report tell you?

A vulnerability scan answers a different question: which of these ingredients have known problems?

A scanner takes your list of components and compares each one with databases of known vulnerabilities. A vulnerability is a flaw in software that an attacker might misuse. Most are tracked with a CVE number, which is a public ID for a specific flaw.

The result is a report. It usually names the component, the flaw, how severe it is rated, and sometimes the version that fixes it.

Two things are worth knowing.

It changes over time. Your software can stay exactly the same while the report gets longer, because researchers find new flaws in old code every day. The 2026 guidance says that after learning new vulnerability information, an organization can check whether its SBOMs contain a vulnerable component. That check is the scan, and it can be repeated whenever the data changes.

It does not know your context. A scanner sees that a flawed component is present. It does not automatically know whether your product ever uses the flawed part. That leads to the third document.

What does a VEX statement tell you?

VEX answers the question the first two cannot: does this flaw matter for this product?

The software maker makes the call and writes it down in a standard format. The CycloneDX project describes VEX as focused on "whether a vulnerability in a component can actually be exploited in its specific context." The OpenVEX specification, one open format, defines four statuses:

StatusPlain meaning
not_affectedNo action is needed. A reason must be given.
affectedAction is recommended to fix or address it.
fixedThese product versions contain a fix.
under_investigationIt is not yet known. Updates will follow.

For "not affected," OpenVEX requires a justification or an impact statement. The justification labels include component_not_present and vulnerable_code_not_in_execute_path. The second one means the product includes the flawed code but does not run it.

CISA's 2026 guidance says VEX and similar advisories "help avoid unnecessary effort if a trusted source deems that potential risk does not translate to actual risk."

Which document should I send, and when?

Use the question as your guide.

The reader asksBest documentWhy
What is in your software?SBOMIt is the inventory.
Do you have known vulnerabilities?Scan reportIt shows today's matches.
Our scanner flagged a CVE in your product. Is it real?VEX statementIt gives your reasoned answer.
Did you fix it?VEX (fixed) or release notesIt ties the fix to versions.

Here is a simple way to handle a customer request in four steps.

  1. Send the SBOM first. It is stable for a given release and lets the customer run their own checks.
  2. Share scan results only on purpose. A raw report is a snapshot and can cause alarm without context.
  3. Answer each flagged item with a status. Use not affected, affected, fixed or under investigation.
  4. Update when things change. When you ship a fix, issue a new statement. OpenVEX describes how a product can move from under investigation to fixed over time.

For guidance on what to share, see what to send when a customer asks for your SBOM.

Worked example: one flagged flaw

These numbers are invented to show the flow. They are not from a real product.

A customer's scanner reads your SBOM and reports 40 findings.

StepInvented result
Findings from the customer's scan40
Package present but the vulnerable code is never called22
Component fixed in the current release6
Still under review4
Real, needs a fix8

You reply with a VEX document. Twenty two items are marked not affected with the reason that the vulnerable code is not in the execute path. Six are marked fixed with the release number. Four are under investigation. Eight are marked affected, with a plan.

The customer now has a clear picture. Instead of 40 unexplained alarms, they see 8 real items and a timeline. The conversation moves from "why is your software full of holes?" to "when will those 8 be fixed?"

Try it yourself

In the demo below, follow how a finding moves from a raw alert to a decision. Look for the point where the tool separates what is present from what needs action.

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

How can Safeguard help?

Safeguard's SBOM and dependency scanning produces the inventory and exports it in SPDX or CycloneDX. Its vulnerability management compares that inventory with known issues, and reachability analysis shows which flagged packages your code can actually reach. That reachability work is the evidence behind a "not affected" answer.

If a fix exists, autonomous remediation can open a fix pull request for your review. It is off by default and every category starts on Manual. You can start with a free scan at gold.safeguard.sh/scan.

Related reading: VEX statements and SBOM noise and why a clean scan is not proof of safety.

Quick check

Does an SBOM tell me if my software is vulnerable?

Not by itself. An SBOM lists components. A scan compares the list with known vulnerabilities, and a VEX statement says whether a flaw matters for your product.

Why does my scan report change when my code did not?

New flaws are found in existing software all the time. The same list of components can match more known problems tomorrow than it did today.

Who writes a VEX statement?

The maker of the product writes it, because they know whether the flawed code is used. The reader decides how much to trust it.

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.