Table of contents
Title
Table of content
Table of contents
Title

Software bill of materials (SBOM)

Updated

An SBOM, or software bill of materials, is a machine-readable inventory of every component inside a piece of software: the libraries it imports, the versions it pins, the licenses those libraries carry, and the dependencies that those dependencies pull in behind them. The NTIA, the U.S. agency that structured the original software transparency effort, defines an SBOM as "a nested inventory for software, a list of ingredients that make up software components."

The ingredient list matters because almost none of the ingredients are yours. In Fluid Attacks' benchmark of 36 third-party AppSec tools against a 1,201-vulnerability dataset, 80% of the vulnerabilities sat in the codebase, 13% in the backend, and the rest in dependencies and the frontend. An SBOM maps that last slice precisely and the other 93% not at all. Knowing which part you are looking at separates an inventory that drives decisions from a file that satisfies an auditor.

This page covers what an SBOM must contain under CISA's 2026 standard, which formats survived it, which regulations demand one, how software composition analysis produces it, and where it stops being useful.

What is an SBOM?

An SBOM is a structured record of a product's components, the relationships between them, and the metadata that identifies each one without ambiguity. It answers one operational question: if a flaw is announced in component X, do we ship X, in which version, and where?

That question sounds trivial until a deadline forces you to answer it. A modern application is mostly code that someone else wrote and that your team never reviewed. An industry estimate cited on our call-path analysis page puts typical usage at 10% to 20% of imported code, so most of what you pull in never runs. The SBOM you generate is therefore long, mostly inert, and impossible to keep in anyone's head.

An SBOM is therefore only worth producing if something else reads it. A list of open-source dependencies sitting in a repository changes nothing. The same list, cross-referenced against a vulnerability feed and refreshed on every build, turns a disclosure into a work order. That refresh is the dividing line between a living inventory and a compliance artifact.

What an SBOM is not

Four things get confused often enough to be worth separating.

Artifact or process

What it is

What it answers

SBOM

A document: the inventory of components

What is inside this build?

Software composition analysis

The scan that produces and enriches it

Which of these components are known to be flawed?

VEX

A companion document on exploitability

Does that flaw actually affect this product?

Dependency scanner

A narrower tool, often one ecosystem only

Are my direct dependencies out of date?

The distinction that costs teams the most is the first two. The document is an output; SCA is the engine. Buying the output without the engine leaves you with a snapshot that is wrong by the next commit.

Why SBOMs matter now

Three incidents turned a procurement checkbox into an incident-response tool and made component inventory a software supply chain security problem. Each exposed a different gap, and each gap now maps to a field in the current standard.

Log4Shell: when nobody could answer "do we use it?"

When Log4Shell (CVE-2021-44228) was disclosed in December 2021, the patch was available almost immediately. The bottleneck was not remediation. It was discovery. Log4j sat four and five levels deep inside build tools, agents and application servers that teams had never thought of as Java logging consumers.

Organizations with a current SBOM queried it and had a target list in minutes. Everyone else spent weeks grepping repositories and emailing vendors. That is why the 2026 Coverage element says an SBOM should list every component in the target software, including transitive dependencies, with no minimum depth. An inventory that stopped at direct dependencies would have missed Log4j in most of the places it was running.

SolarWinds: why hashes became two separate fields

The 2020 SolarWinds compromise worked because the malicious code arrived through a signed, official update. Nothing in the dependency list looked wrong. What was wrong was that the shipped artifact no longer matched what the build had produced.

An SBOM generated at build time gives you that baseline. If a component's cryptographic hash does not match the value recorded for it, the pipeline has grounds to reject the build before distribution. CISA now lists the hash value and the hash algorithm as two separate fields, precisely so the comparison can be automated rather than eyeballed. That pair is what turns an SBOM from a disclosure document into a control.

The 2025 npm compromise: the SBOM as triage

In September 2025, a phishing email against a single maintainer account led to malware reaching 18 widely used JavaScript packages with about 2.6 billion combined weekly downloads, among them debug, chalk and ansi-styles. The exposure window was hours. The only teams that could act inside it were the ones able to filter an existing SBOM by package name and version. Our write-up of the incident describes that move inside our platform: open the Packages table, filter by component name.

SBOM at Fluid Attacks

We generate the SBOM as a by-product of scanning, not as a separate exercise. The Fluid Attacks documentation states the principle plainly: "SCA tools can automatically generate a comprehensive SBOM, providing a detailed, standardized record of all components and their origins."

What we inventory, and from what

Our Software Composition Analysis reads lockfiles and manifests across 19 supported package managers, covering JavaScript, Python, Java, Kotlin, Ruby, Swift, PHP, Go, C#, Scala and Dart. Coverage moves: a September 2026 release added deterministic lockfile parsers for Yarn, pnpm and Bun.

Each entry is then matched against our own vulnerability catalog rather than a mirrored CVE feed. Weakness 448 in our database, "Use of software with malware", covers the case where "one or more dependencies used in the project contains code or components suspected of being compromised by malware or malicious behavior." It links to the requirements an auditor will ask about, which a raw feed cannot give you.

What it looks like in practice

The inventory is attached to a target of evaluation, which our platform documentation defines as follows: "A package ToE represents a third-party component on which the application depends."

Step

Where it happens

Evidence produced

Resolve the dependency graph

SCA scan on commit

Component, version, ecosystem, transitive path

Match against the catalog

Fluid Attacks Database

Linked weakness, CVSS 4.0, EPSS, KEV status

Trace the call path

Static analysis

Whether the flawed function is callable

Map to controls

Requirements engine

Requirements 155, 262 and 330

Export the inventory

Packages section

Standardized file, two format options

The export itself is two clicks: "In Packages, click on Export SBOM and follow the prompts." The result is "available in the CycloneDX and SPDX formats."

Export SBOM button in the Packages section of Fluid Attacks' platform

The Packages section exports the inventory in two standardized formats.

Deterministic reachability, not probabilistic

Most of the value sits after the export. An SBOM tells you a flawed version is present; it does not tell you whether the flawed code can run. We answer that by tracing call paths, not by scoring likelihood. Our published comparisons show the difference against two SCA vendors.

Capability

Fluid Attacks

Snyk

Black Duck

Reachability

14 languages

5 languages

Not offered

Verdict type

Deterministic

Probabilistic

—

Malware detection in packages

Yes

Yes

No

Source: Fluid Attacks' public comparisons against Snyk and Black Duck, built from each provider's official product information.

A probabilistic verdict tells a developer a finding is probably irrelevant. A deterministic one tells them the function is never called from their entry points. Only the second survives a conversation with an auditor. As of October 2026, that verdict is also the seventh criterion in our organization priority configuration.

The limit we run into: The inventory maps the smaller share

Here is the part most vendor pages leave out. In our benchmark, the universe of 1,201 vulnerabilities broke down with 80% in the codebase, 13% in the backend, and the rest in dependencies and the frontend. Everything an SBOM can see lives in that last 7%, and it shares it with the frontend.

The detection numbers point the same way. Across that dataset, the automated tool that identified the highest percentage of vulnerabilities was our own scanner, at 22.7% recall with 99% precision; the strongest third-party tool reached 21.6% recall at 72% precision. A pentester working the same dataset found 1,076 of the 1,201 vulnerabilities: 89.6% recall at 100% precision. No inventory closes that gap, because the flaws that matter most are usually in business logic nobody imported.

Fluid Attacks benchmark results for 36 third-party AppSec tools

The best automated recall was 22.7%; the pentester reached 89.6%.

That is an argument for generating the document, not against it. It is an argument against mistaking it for a security program. Teams that pair component inventory with manual testing cover both halves; those that buy only the first cover the half that was easiest to automate.

The practice that decides the rest: regenerate and gate

A document generated once is wrong by the next merge. The practice that makes the difference is regenerating on every build and enforcing a policy against the result. Our State of Attacks 2026 report, covering 1,119,396 vulnerabilities reported between January 1 and December 31, 2025, found that systems running our CI Gate reached a 72.2% remediation rate against 58% for systems without it. The inventory is the input; the gate is what gives it consequences.

Our guidance for the financial sector makes the same point: keep a detailed record of every component in use and scan it continuously.

Go deeper: our page on reachability analysis explains how call-path tracing filters a component list down to what is exploitable.

What goes in an SBOM: the 2026 minimum elements

In July 2026, CISA published the final Minimum Elements for a Software Bill of Materials, developed with the NSA, the FBI and fifteen international cybersecurity agencies. It replaces the 2021 NTIA baseline and the August 2025 public comment draft. The required data roughly doubled and now splits into two groups.

SBOM metadata

Metadata describes the document itself: who produced it, with which tool, at what point in the lifecycle, and in what format. The new fields are an author signature, a document version, the data format name and version, the tool name and version, and a generation context. That last one matters: a record built from source at compile time and one built by scanning a finished binary describe different things, and consumers are entitled to know which they got.

Component data

Component data describes the ingredients: Component Producer, Component Name, Component Version, Component Identifiers, Component Hash Value, Component Hash Algorithm, Component License and the dependency relationships between them. Every component should carry at least one common software identifier, a field that can also hold unique identifiers, commit hashes and intrinsic identifiers.

What changed from the 2021 baseline

2021 NTIA baseline

2026 CISA element

Why it changed

Supplier Name

Component Producer

Separates who made the component from who shipped it

Other Unique Identifiers

Component Identifiers

At least one common software identifier should be included

Author of SBOM Data

SBOM Author, plus a new SBOM Author Signature

The document itself becomes verifiable

Hash listed once

Hash Value and Hash Algorithm

Makes integrity comparison automatable

Depth: top-level dependencies only

Coverage: all components, no minimum depth

Transitive dependencies are where risk hides

Accommodation of Mistakes

Accommodation of Updates to SBOM Data

Recipients can now expect the data to be accurate

SWID among the data formats

Dropped from the named formats

Not widely used, too few tools behind it

Access Control as its own element

Folded into Distribution and Delivery

Sharing rules consolidated

The revision also separates what is genuinely unknown from what the author knows and is withholding, which lets a consumer tell a gap in the data from a commercial decision. If you certified a document against the 2021 list, assume it no longer qualifies.

Nutrition label next to an SBOM listing app dependencies

Same idea, different product: both declare what is inside.

SBOM formats after the 2026 revision

CISA names two SBOM data formats as being in broad use. A third, SWID, was dropped from that list.

Feature

SPDX

CycloneDX

Origin

Linux Foundation

OWASP Foundation

Standard

ISO/IEC 5962:2021

ECMA-424

Primary focus

Licensing and IP compliance

Security and vulnerability analysis

Data formats

JSON, YAML, RDF, Tag-Value, XML

JSON, XML, Protobuf

Best for

Legal review, long-term archiving

CI/CD automation, exploitability reporting

SWID tags, standardized as ISO/IEC 19770-2, remain in use for IT asset management. CISA dropped them from the named SBOM formats in 2026 on the grounds that SWID is not widely used and has too few tools behind it. The guidance still tells organizations to accept any widely used, interoperable and machine-processable format, so SWID is not forbidden — just no longer one of the two CISA points to.

If you are producing the SBOM for a security pipeline, the OWASP format is built for it and carries exploitability statements natively. If your driver is license compliance, the Linux Foundation one carries an ISO number, which still counts with some buyers. Emitting both costs almost nothing, and our platform does exactly that.

Regulations that require an SBOM

The document stopped being a recommendation several years ago.

Instrument

Year

Who it binds

What it requires

Executive Order 14028

2021

Vendors selling software to U.S. federal agencies

Section 4(e)(vii): provide the purchaser an SBOM directly or publish it on a public website

EU Cyber Resilience Act

2024

Manufacturers of products with digital elements sold in the EU

Annex I, Part II(1): draw one up in a commonly used, machine-readable format covering at least top-level dependencies

FDA, under section 524B of the FD&C Act

2023

Manufacturers of cyber devices

An SBOM in premarket submissions, covering commercial, open-source and off-the-shelf components

PCI DSS 4.0

2022

Entities handling payment card data

Requirement 6.3.2: maintain an inventory of bespoke and custom software

Executive Order 14028 is the one that changed market behavior. It made the SBOM a condition of federal procurement, and the requirement propagated down supply chains with no federal exposure at all. The EU Cyber Resilience Act, which we covered when it was adopted, went further by attaching fines and market withdrawal to non-compliance.

Note what none of them ask. They require you to name your components, not to show that those components are sound. The CRA does not even require disclosure: its Annex II says only that if a manufacturer shares the document with users, it must say where to find it. An SBOM you can produce but not vouch for satisfies a reviewer and leaves the exposure untouched, which is why compliance and software supply chain security are not the same objective.

How to generate an SBOM with SCA

Generation is the easy part. Choosing a scanner that produces something trustworthy is not.

SCA resolves the dependency graph from lockfiles and manifests, matches each component against vulnerability data, and emits the SBOM in a standard format. Because it runs on every commit, the document stays current without anyone maintaining it by hand. Our DevSecOps tooling post describes the mechanic: as the scan inventories the open-source dependencies in your software, producing the SBOM is a formality.

Four criteria separate useful implementations from box-checking ones:

  • Ecosystem coverage: a scanner that cannot parse your lockfile format will silently under-report. Check the package manager list against your stack, not against a marketing page.

  • Full graph resolution: confirm the tool walks every level. CISA's Coverage element asks for it, and a scanner that reads only top-level manifests cannot produce a compliant SBOM.

  • Vulnerability intelligence: a list of components is not a list of risks. Ask what the matching runs against, and whether the exploitability verdict is deterministic or inferred.

  • Pipeline enforcement: generation without a policy gate produces a document nobody reads. Our supply chain analysis documentation covers how it connects to build-breaking policy.

The output then feeds everything else: our Static Application Security Testing (SAST) and Dynamic Application Security Testing (DAST) cover the code the SBOM cannot see, and risk-based vulnerability management on a single platform is where findings get prioritized. Both our Essential and Advanced plans generate the document; the Advanced plan adds pentesters to the half automation misses.

Fluid Attacks Database entry for use of software with malware

Weakness 448 links a compromised dependency to requirements 155, 262 and 330.

Conclusions

An SBOM is an inventory, and an inventory is only as useful as the questions you can ask it. The 2026 revision raised the bar on what counts as a valid SBOM: every nested dependency, a common software identifier per component, a hash split into value and algorithm, a signed author, and two formats in broad use instead of three.

Meeting that bar is table stakes for selling software into the U.S. federal government or the European market. It is not a security strategy. Our benchmark puts 93% of real vulnerabilities outside the dependency layer an SBOM describes, and the best automated recall at 22.7% against a pentester's 89.6%. Generate the SBOM, regenerate it on every build, gate the pipeline on it, and then go test the part it cannot reach. The first three steps are a tooling decision. The fourth decides your actual exposure.

Frequently asked questions

Is an SBOM the same as SCA?

No. Software composition analysis is the process; the SBOM is one of its outputs. The scan resolves your dependency graph and matches components against vulnerability data. It is the standardized document that scan produces. You can hold one without running the other, but a file generated once and never refreshed stops reflecting your software within days.

Does an SBOM have to list transitive dependencies?

Yes, under the 2026 CISA Coverage element. The guidance says an inventory should include all components in the target software, including transitive dependencies, and states plainly that there is no minimum depth. That replaces the 2021 baseline, which covered top-level dependencies only. The reasoning comes from incidents like Log4Shell, where the vulnerable library was almost never a direct dependency.

How often should an SBOM be updated?

On every build. Dependencies change with every merge, and a stale SBOM gives false assurance. Regeneration alone is not enough either: in our State of Attacks 2026 data, systems enforcing a CI gate reached a 72.2% remediation rate versus 58% for those without one.

Can an SBOM find zero-day vulnerabilities?

No, and it is not meant to. It tells you what you have, not what is wrong with it. Its value appears the moment a flaw is disclosed: you query it, find every affected build, and start remediating while others are still searching. Discovery time is the variable it changes.

What is VEX and how does it relate to SBOMs?

VEX states whether a known vulnerability is actually exploitable in a given product. An SBOM might show you ship a flawed library; the companion document can state the flawed function is never reachable from your entry points. Used together, they cut the remediation queue down to what genuinely needs work.

Does Fluid Attacks generate SBOMs, and in which formats?

Yes, in CycloneDX and SPDX, from the Packages section of our platform. Our SCA resolves dependencies across 19 package managers, matches each component against our own weakness catalog, and determines exploitability deterministically across 14 languages. Both the Essential and Advanced plans include generation and export.

Know what you ship, and what it can reach

Our scanners inventory your dependencies on every commit and our pentesters test the code that inventory never describes. Start free trial · Contact us

Get started with Fluid Attacks' SSCS solution right now

Reduce risk without slowing delivery

Reduce risk without slowing delivery

Fast and accurate results from one continuous security program powered by AI, scanners, and pentesters.

Fast and accurate results from one continuous security program powered by AI, scanners, and pentesters.

Prevent

Prevent

Prevent

Detect

Detect

Detect

Manage

Manage

Manage

Remediate

Remediate

Remediate