Safeguard
Supply Chain•

A customer ran a scan on your SBOM. How do you reply to the findings?

When a customer sends scanner findings on your SBOM, triage them, answer with VEX statuses, and reply with specific, dated answers, not a blanket denial.

Safeguard Security Team
3 min read

Triage every finding, sort it into affected, not affected, fixed or under investigation, and reply with a short VEX document that says which, with a reason for each not affected claim. Do not send a blanket denial. A list with a status per item and a date is what the customer can act on.

Why this happens

Customers feed your SBOM to a scanner. The scanner matches component names and versions to advisories and reports everything. It cannot tell whether the code is reachable or whether you have already mitigated it. Many findings will be noise, and some will be real.

Steps

  1. Acknowledge within a day, and say when you will reply in full.
  2. Deduplicate. The same advisory often appears several times through different paths.
  3. Check each unique finding against your product. Is the component really in the shipped build? Is the vulnerable function used?
  4. Assign a status from the OpenVEX set.
  5. Write the reply as a VEX document, plus a short cover note.
  6. Update your own tracking so the next request is faster.

The four statuses

StatusMeaningWhat you must add
not_affectedThe product is not exposedA justification, an impact statement, or both
affectedThe product is exposedA remediation or mitigation action
fixedA release resolves itThe fixed version
under_investigationYou are still checkingA date for your next update

The OpenVEX specification lists five justification values for not affected: component not present, vulnerable code not present, vulnerable code not in execute path, vulnerable code cannot be controlled by an adversary, and inline mitigations already exist. It recommends the machine readable justification, with the free text impact statement as optional.

Be careful with not affected

A not affected claim must be true and checkable. If you claim the vulnerable code is not in the execute path, you should be able to show how you know. If you cannot, use under investigation and say so. Customers lose trust when a not affected is later reversed.

Match to components

Identify each statement's product and component with a package URL where you can. The spec recommends purls as identifiers. If your SBOM has no purls, matching your statement to their scanner results will be manual for them.

Try it yourself

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

Try deciding whether a finding is exploitable in context. That is the judgment behind each VEX status you send.

Quick check

Do I have to answer every scanner finding?

Answer every unique advisory that matches a component in your SBOM. A VEX document lets you do it compactly.

Can I just say we are not vulnerable?

Not usefully. Give a status and a reason per advisory, and a date.

Safeguard's reachability analysis and SBOM scanning help establish whether a vulnerable function is used, and a free scan is available at gold.safeguard.sh/scan.

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.