Guide to SBOM Vulnerability Management: Understanding the Basics
In today's digital landscape, software is a critical component of almost every product and system. Here's how to see inside that software with SBOMs!

Finite State Team
TL;DR
SBOM vulnerability management is the loop that turns a component inventory into a ranked list of things to fix: match components to published vulnerabilities, discard the ones that do not apply, fix what matters, and re-check when the databases change. On 29 July 2026, CISA and 17 partner agencies replaced the 2021 NTIA minimum elements, expanding the baseline from seven data fields to seventeen. Three of the new fields can only be filled in honestly if you hold the built artifact, which changes what a credible SBOM looks like for anyone shipping firmware.
What is SBOM vulnerability management?
SBOM vulnerability management matches the components listed in a software bill of materials against vulnerability databases, then tracks each finding through triage and remediation.
The inventory is the input. The work is everything after it.
A functioning loop has five stages:
- Generate an SBOM for the release, from source, from the build, or from the shipped binary.
- Match each component against vulnerability databases using its identifiers.
- Triage the matches, separating findings that apply to your product from findings that do not.
- Remediate or document, either by updating the component or by recording why the finding does not apply.
- Re-check on every new release and every time the databases change.
Stage 5 is the one teams underestimate. An SBOM generated in March describes March. The vulnerability data underneath it changes daily, so the same unchanged SBOM produces different findings in August. This is why SBOM vulnerability tracking is a standing process rather than a pre-launch task.
The inventory itself is the foundation, and what an SBOM contains determines how much of this loop you can automate.
How does an SBOM help you find vulnerabilities?
Each component carries identifiers like CPE and PURL. Scanners use those keys to look up published vulnerabilities, then compare your version against each affected range.
The lookup depends entirely on identifier quality. Two identifier schemes carry most of the weight:
- CPE (Common Platform Enumeration), maintained by NIST as part of the National Vulnerability Database. CPE strings are how most CVE records express which products a vulnerability affects.
- PURL (Package URL), standardised as ECMA-427 in December 2025. A PURL encodes ecosystem, namespace, name, and version, for example
pkg:rpm/redhat/httpd@2.4.57-8.el9.
The 2026 minimum elements ask for at least one common software identifier per component and permit several more, including UUIDs, commit hashes, and intrinsic identifiers such as OmniBOR and SWHID.
Where the lookup breaks. A component with a name and a version but no CPE or PURL cannot be matched automatically. Someone matches it by hand, or it goes unchecked. Red Hat, describing its own container SBOM work, put the limitation plainly: some packages, including various files and custom binaries, contain no such unique identifier, and there is no reliable method for matching them between documents. The same constraint applies to any component compiled into a firmware image without package metadata.
So a scan result is only as good as the identifiers underneath it. A clean report on an SBOM with sparse identifiers means the scanner found nothing to look up.
What changed in the 2026 SBOM minimum elements?
CISA and 17 partner agencies replaced the 2021 NTIA baseline on 29 July 2026, expanding seven data fields to seventeen and dropping SWID tags.
The 2026 Minimum Elements for a Software Bill of Materials is version 2.1 of a document first published by NTIA on 12 July 2021. Co-authors include the NSA, the FBI, and cybersecurity agencies from Australia, Canada, the Czech Republic, France, Germany, India, Italy, Japan, Korea, the Netherlands, New Zealand, Poland, and Slovakia. DG CONNECT of the European Commission contributed.
Ten elements are new:
- SBOM Author Signature, SBOM Data Format Name, SBOM Data Format Version
- SBOM Generation Context, SBOM Tool Name, SBOM Tool Version, SBOM Version
- Component Hash Value, Component Hash Algorithm, Component License
Four existing elements changed in ways that affect implementation:
- Depth became Coverage. The old element captured top-level dependencies only. Coverage now asks for all components including transitive dependencies, and states there is no minimum depth. The explanation is candid: the old definition reflected what tooling could do in 2021 rather than what security decisions require.
- Supplier Name became Component Producer, because "supplier" proved ambiguous around distributors.
- Known Unknowns became Explicitly Identifying Unknown Information. SBOM authors now distinguish data they lack from data they are withholding. Recipients may treat an SBOM as incomplete if essential component data is withheld.
- SWID tags left the accepted format list, on the grounds that SWID is not widely used and lacks multiple tools. SPDX and CycloneDX remain.
The Access Control element was removed and folded into Distribution and Delivery. The elements create no new legal requirement; they define what to ask for and what to publish.
Why do SBOM vulnerability scans produce false positives?
Published version ranges mark the release that carried the fix. Scanners flag everything below that release, including versions built before the flaw existed.
One CVE shows the mechanism cleanly.
CVE-2017-13704 is recorded in the NVD as affecting "dnsmasq before 2.78." A malformed DNS packet drives a negative value into a memset size parameter, which then writes up to 0xffffffff zero bytes and crashes the process. CVSS 3.0 base score 7.5, High.
Now the part the version range omits. The vulnerable memset calls entered dnsmasq in 2.77, added as a hardening measure to zero response buffers. The flaw is a regression that exists in 2.77 and was fixed before 2.78. Versions 2.76 and earlier never contained the code.
An SBOM listing dnsmasq 2.76 gets flagged against "before 2.78." The finding is wrong. Three distribution security teams reached that conclusion independently: Debian's tracker marks wheezy, jessie, and stretch not-affected with the note "Regression introduced in 2.77," SUSE records that its products are unaffected, and Amazon Linux 1, 2, and 2023 all show not-affected.
Three structural causes produce most of the noise:
- Range arithmetic. "Before X" assumes every earlier version is vulnerable. Regressions break that assumption.
- Backporting. A vendor fix applied without a version bump leaves a version string that reads vulnerable.
- Unreachable code. A vulnerable function present in a linked library that your product never calls carries no exposure. Determining that requires reachability analysis rather than version comparison.
None of this makes scanning useless. It means the scan output is a queue of hypotheses.
How do VEX and CSAF documents reduce the noise?
A VEX document states whether a specific product is affected by a specific vulnerability. CSAF carries the same status machine-readably inside a full security advisory.
The 2026 elements address both under Correlating SBOM With Security Advisories, noting that these documents help avoid unnecessary effort when a trusted source determines that a potential risk does not translate to actual risk.
For the dnsmasq case above, a VEX statement saying not_affected with the justification vulnerable_code_not_present closes the finding permanently. The next scan reads the VEX and stops re-raising it.
What a VEX statement carries:
- The product and version it describes
- The vulnerability identifier
- A status: affected, not affected, fixed, or under investigation
- For "not affected," a machine-readable justification such as component not present, vulnerable code not present, or vulnerable code not reachable
CSAF, maintained at OASIS, is the broader advisory format; VEX profiles exist inside it, and OpenVEX offers a lighter standalone specification.
The operational payoff is cumulative. Every triage decision you record as VEX is a decision you never repeat, which is the difference between a queue that shrinks and a queue that resets every quarter. Managing those documents across releases is its own discipline, covered under SBOM and VEX lifecycle management.
Should you use CycloneDX or SPDX for vulnerability tracking?
Both satisfy the 2026 baseline. CycloneDX 1.7 carries VEX natively, which suits vulnerability workflows. SPDX 3.0.1 added a security profile and leads on licensing.
The 2026 elements name these two as the formats currently widely used to generate and consume SBOMs, and describe both as products of open international processes.
CycloneDX, an OWASP project, reached 1.7 in October 2025 and was adopted as ECMA-424, 2nd Edition, that December. Native VEX support arrived in 1.4. Version 1.6 added cryptographic bills of materials and attestations. Version 1.7 added patent metadata and Traffic Light Protocol distribution constraints. It is the last release of the 1.x line and stays compatible with 1.4 through 1.6.
SPDX, a Linux Foundation project, is at 3.0.1, part of the 3.0 line released in April 2024. SPDX 3.0 added a security profile covering vulnerability and VEX data, narrowing a gap that CycloneDX held for years. Note the standards trail: ISO/IEC 5962:2021 codifies SPDX 2.2.1, so an ISO reference and a current-spec reference point at different versions. Plenty of tooling still emits 2.3.
Practical guidance for a device program:
- Pick based on what your tools already emit. Most widely used generators produce both.
- Avoid deprecated format versions. The 2026 elements say so explicitly, because consumption tooling drops them.
- Record the format name and version in the SBOM itself. Two of the ten new elements exist for this.
- Expect to hand over both at some point. Customers and notified bodies ask for what their own tooling reads.
The format matters less than the fields inside it. A CycloneDX file missing hashes and identifiers is weaker evidence than an SPDX file that has them.
Which components does an SBOM miss in a firmware image?
Manifest-driven generators read package declarations. Statically linked libraries, supplier blobs, and cross-compiled binaries carry no manifest, so they leave no entry to scan.
This is where SBOM vulnerability analysis diverges hardest between an application and a device. A web service has package-lock.json and a dependency tree. A firmware image is a filesystem someone else partly assembled.
| Firmware artifact | Why a manifest-driven generator stops |
|---|---|
| Statically linked libraries | The library is compiled into the executable. No package record survives linking, so there is nothing to declare. |
| Supplier and ODM binary blobs | Delivered as compiled objects with no build metadata and often no version string. |
| SquashFS, JFFS2, and UBI containers | The generator must unpack a filesystem image before any component is visible. Manifest parsers do not unpack. |
| Cross-compiled ARM, MIPS, PowerPC, and RISC-V binaries | Package managers are absent from the target. Components arrive from a vendor SDK or a Yocto recipe rather than a registry. |
| RTOS images (VxWorks, FreeRTOS, QNX, ThreadX) | No package manager exists in the build at all. Components are source trees merged at compile time. |
| Build-time and packaging additions | Introduced after the manifest was read, so no declaration exists to find. |
Each missing row is a component that generates no findings, which reads as a clean scan.
The 2026 guidance addresses this directly in its Validation section: organizations may use sources such as open source software repositories or binary analysis tools to detect components not listed in the SBOM. That is the standards body naming binary analysis as the check on inventory completeness.
How do you tell whether an SBOM describes what you actually shipped?
Compare the component hash against the artifact. The 2026 elements add hash value, hash algorithm, and generation context, which record how the SBOM was produced.
Three of the ten new fields are only answerable with the built artifact in hand:
- Component Hash Value. The output of a cryptographic hash applied to the executable component artifact. The guidance states that an author without access to the executable artifact should mark the value unknown.
- Component Hash Algorithm. Which algorithm produced that value, named from the IANA registry, so a recipient can verify integrity.
- SBOM Generation Context. The lifecycle phase at generation. The document's own examples: an SBOM from source code is "before build," and binary analysis tools generate an SBOM "after build."
Read together, those three fields make the provenance of an SBOM legible to whoever receives it.
| Manifest-derived SBOM | Binary-derived SBOM | |
|---|---|---|
| Reads | Declared dependencies and lock files | The compiled image that ships |
| Component Hash Value | Unknown, with no artifact to hash | Computed from the artifact |
| Generation Context | Before build | After build |
| Statically linked components | Absent | Detected |
| Supplier blobs | Absent | Detected |
| Build-time additions | Absent | Detected |
| Catches a mismatch between declaration and build | No | Yes |
Neither column is the wrong answer. A pre-build SBOM gives developers something to act on while the code is still open, and it arrives earlier. An after-build SBOM is the one that can carry hashes and answer the completeness question. Device programs generally need both, reconciled against each other.
The Finite State Platform, within the Finite State Product Security OS, is built around that reconciliation. It analyzes compiled firmware images directly across ARM, ARM64, x86-64, MIPS, PowerPC, and RISC-V, identifies firmware-only and closed-source components, and reconciles supplier-provided SBOMs against what the image actually contains.
What do the CRA and FDA expect from SBOM vulnerability management?
The CRA requires an SBOM in the technical file plus regular security tests. FDA requires a machine-readable SBOM in premarket submissions for cyber devices.
EU Cyber Resilience Act. Regulation (EU) 2024/2847 applies from 11 December 2027. Annex I Part II obliges manufacturers to identify and document vulnerabilities and components, including by drawing up an SBOM in a commonly used, machine-readable format covering at the very least the top-level dependencies. The same annex requires effective and regular tests and reviews. Annex VII puts the resulting test reports in the technical documentation, retained for 10 years after the product goes on the market or for the support period, whichever runs longer. Preparation guidance sits on the EU CRA compliance page.
Note the gap between the two baselines. The CRA's legal floor is top-level dependencies. The 2026 CISA elements ask for all components including transitive dependencies with no minimum depth. Both statements are accurate, and CISA's document is explicit that its elements create no new requirement. A manufacturer meeting only the CRA floor is compliant and will still be handed procurement questionnaires written against the higher baseline.
FDA premarket submissions. The current guidance, Cybersecurity in Medical Devices: Quality Management System Considerations and Content of Premarket Submissions, issued 3 February 2026, requires an SBOM for cyber devices under section 524B(b)(3). Beyond the component list, FDA asks for each component's level of support and end-of-support date, and for all known vulnerabilities including those in CISA's Known Exploited Vulnerabilities catalog, each with a safety and security risk assessment. The guidance also names software composition analysis of binary executable files in its vulnerability testing list.
One detail worth tracking: FDA's February 2026 guidance points to the NTIA October 2021 minimum elements document, which the July 2026 CISA guidance has since replaced. Expect that reference to be reconciled in a future revision.
How do you prioritize the vulnerabilities a scan returns?
Severity alone ranks poorly. Combine CVSS with CISA KEV for active exploitation, EPSS for probability, and reachability analysis for whether the code runs at all.
A first scan on a device image commonly returns hundreds of findings. Ranking them by CVSS base score puts a theoretical 9.8 in an unreachable library above a 6.5 being exploited in the wild today.
Four signals, in the order they change decisions:
- CISA KEV. Binary and unambiguous: this vulnerability is being exploited. FDA's guidance goes further for medical devices, recommending that KEV-listed vulnerabilities be designed out, since they already expose the system.
- Reachability. Whether your product calls the vulnerable code path. This removes more findings than any other signal, because a library linked for three functions carries vulnerabilities in the several hundred you never call.
- EPSS. A probability estimate for exploitation in the near term, useful for ordering the middle of the queue where CVSS scores cluster.
- CVSS. Technical severity, which describes impact if exploited rather than likelihood.
Then apply product context that no database has. A DNS crash bug is one thing on a workstation and another on an infusion pump. Network exposure, privilege, safety impact, and whether the device can be patched in the field all move a finding's real rank.
Record the reasoning, not just the ranking. Every regime above asks for the assessment rather than the score. A deferred finding with a written rationale and a VEX statement is a defensible position. The same finding deferred silently is a gap that surfaces during an audit, usually years later, when nobody remembers why.

Finite State Team
The Finite State team brings together experts in cybersecurity, embedded systems, and software supply chain risk to help connected device manufacturers secure their products and comply with evolving global regulations.