# Software Bill of Materials (SBOM) Deep-Dive
Definition
A Software Bill of Materials (SBOM) is a formal, machine-readable inventory of every component that makes up a piece of software. Modeled after the bill of materials used in manufacturing, an SBOM enumerates the open source libraries, third-party packages, and commercial components embedded in an application, along with metadata describing each component's identity, provenance, and licensing. The term gained regulatory weight in 2021 when Executive Order 14028 mandated SBOMs for software sold to the federal government, but the operational value of SBOMs extends well beyond compliance: they are the foundation for continuous vulnerability tracking, license governance, and supply chain risk management.
Where a traditional vulnerability scanner might periodically sweep a running application, an SBOM provides a persistent, queryable record of what software is actually present, independent of when it is running. When a new CVE is published, an organization with a maintained SBOM can answer in seconds whether any of its applications contain the affected component. Without one, the same question can take days of manual triage across every codebase.
SBOMs exist in two primary formats, each with distinct ecosystems of tooling and standards body backing: SPDX (Software Package Data Exchange) and CycloneDX. Understanding both formats, and the tools that generate them, is prerequisite knowledge for any team operating a mature software supply chain security program.
---
How It Works
SPDX is the older and more broadly standardized of the two formats. Developed under the Linux Foundation and ratified as ISO/IEC 5962:2021, SPDX defines a document schema that supports multiple serialization formats: tag-value (a human-readable key-value text format), JSON, YAML, RDF/XML, and spreadsheet. SPDX documents are organized around packages, files, and snippets, and they capture detailed licensing information (individual file-level license expressions are possible). Because of its ISO status, SPDX carries the most regulatory and procurement weight, particularly with U.S. federal agencies that explicitly reference it in SBOM guidance from CISA and NTIA.
CycloneDX is an OWASP project. It serializes to JSON and XML and is oriented more explicitly toward security use cases than toward license compliance. CycloneDX introduced the concept of VEX (Vulnerability Exploitability eXchange) documents as a companion format, and its schema includes first-class support for services, hardware, and machine learning model metadata, in addition to traditional software components. For teams primarily concerned with vulnerability management rather than license auditing, CycloneDX is often easier to work with.
Both formats represent the same underlying data model. Conversion utilities exist to move between them, and modern tooling increasingly supports generating either format from a single invocation.
SBOM Contents and the NTIA Minimum Elements
The National Telecommunications and Information Administration (NTIA) published minimum element guidance for SBOMs in 2021, identifying the floor of what a useful SBOM must contain:
- Supplier name: The organization or individual that created or distributed the component.
- Component name: The name as it appears in the package registry or source repository.
- Version: The specific version string, commit hash, or build identifier. Ranges are not sufficient.
- Unique identifier: Typically expressed as a PURL (Package URL, a standardized URI scheme:
pkg:npm/lodash@4.17.21, pkg:pypi/requests@2.28.2). PURLs are package-ecosystem-specific and unambiguous.
- Dependency relationship: Whether component A depends on component B, and whether that dependency is direct or transitive.
- Author of SBOM data: Who produced the SBOM document itself, distinct from who produced the component.
- Timestamp: When the SBOM was generated.
Beyond the minimums, a production-grade SBOM also includes checksums (SHA-256 hashes of component archives for integrity verification), declared licenses (SPDX license expression syntax), copyright notices, and download locations. The richer the metadata, the more useful the SBOM becomes for both vulnerability correlation and license compliance enforcement.
SBOMs must be generated, not manually authored. The tooling ecosystem is mature:
Syft (Anchore) is an open source CLI tool and Go library that generates SBOMs from container images, filesystems, archives, and supported package ecosystems (npm, pip, Maven, Go modules, and more). Syft integrates natively with Grype, Anchore's open source vulnerability scanner, allowing a pipeline to generate an SBOM and scan it in a single workflow. Output formats include SPDX JSON, CycloneDX JSON/XML, and Syft's own JSON format.
Trivy (Aqua Security) is primarily a vulnerability scanner but includes SBOM generation as a first-class feature. Because it combines scanning and SBOM generation in a single tool, Trivy is a common choice for teams that want minimal toolchain complexity. It supports container images, filesystems, Git repositories, and Kubernetes clusters.
cdxgen is a multi-language CycloneDX generator. It has unusually broad language support, including JavaScript, Python, Java, Rust, Go, C#, Ruby, and Dart. For polyglot monorepos, cdxgen is often the most practical option since it can traverse the entire repository and produce a single merged CycloneDX document covering all language ecosystems.
Microsoft SBOM Tool is an open source tool from Microsoft focused on SPDX generation. It was designed for integration into Azure DevOps and GitHub Actions pipelines and handles repositories with mixed language ecosystems well.
Anchore Enterprise is a commercial platform built on top of the open source Anchore engine, adding SBOM storage, policy enforcement, drift detection, and integrations with vulnerability databases beyond NVD.
---
Why It Matters
The Vulnerability Correlation Problem
The Log4Shell crisis of December 2021 illustrated the SBOM gap in stark terms. When CVE-2021-44228 was published, most organizations had no reliable answer to "which of our applications uses Log4j?" Developers manually searched codebases, searched container images, asked other developers. The process was slow, error-prone, and missed transitive dependencies where Log4j was pulled in not directly by the application but by a library the application depended on.
An organization with a maintained SBOM and a working correlation pipeline could query: "which SBOMs in our registry contain a component matching pkg:maven/org.apache.logging.log4j/log4j-core?" The answer would arrive in seconds, filtered to specific versions, with affected systems identified before the first patch was even available.
This is the core value proposition: SBOMs convert the reactive "what is vulnerable?" question into a continuous, automated monitoring problem.
License Compliance
Beyond security, SBOMs serve legal and compliance functions. Open source licenses impose obligations. GPL-licensed components require derivative works to be released under compatible terms. LGPL components have different distribution requirements. AGPL adds network-use provisions. An organization that ships a product without knowing its license composition is exposed to legal risk from organizations like the Software Freedom Conservancy that actively enforce GPL violations.
Regulatory Drivers
Executive Order 14028 (Improving the Nation's Cybersecurity, May 2021) directed the federal government to require SBOMs from software vendors as a condition of procurement. CISA has published substantial guidance on SBOM implementation, including format recommendations and minimum element requirements. The FDA has issued guidance requiring SBOMs for medical device software. The European Union's Cyber Resilience Act (CRA), which entered into force in 2024, imposes SBOM requirements on hardware and software products sold in the EU market.
Federal contractors and regulated industry vendors who cannot produce SBOMs on demand are increasingly unable to close enterprise and government deals.
---
Technical Details
CI/CD Pipeline Integration
The canonical SBOM workflow integrates generation into the build pipeline rather than treating it as a manual or post-hoc process. A production pipeline looks like this:
- Build step: Compile application, resolve all dependencies.
- SBOM generation step: Run Syft or cdxgen against the build artifact or container image. Output: SBOM document (CycloneDX JSON or SPDX JSON).
- Sign the SBOM: Use Sigstore/cosign to cryptographically sign the SBOM document, binding it to the artifact's digest. This allows consumers to verify the SBOM was produced by a trusted pipeline.
- Publish to artifact registry: Push the container image with the SBOM attached as an OCI artifact (using the
referrers API). The SBOM is stored alongside and linked to the image digest.
- Vulnerability scan: Run Grype or Trivy against the SBOM, correlating component PURLs against NVD, OSV (Open Source Vulnerabilities database), GitHub Advisory Database, and ecosystem-specific advisories (npm, PyPI, RubyGems security feeds).
- Policy gate: Fail the pipeline if any component has a CVE above a defined CVSS threshold with a "fixed" status (meaning a patched version is available).
- Continuous monitoring: Subscribe to vulnerability feed updates. When a new CVE is published that matches a PURL in any stored SBOM, trigger an alert.
VEX: Vulnerability Exploitability eXchange
A raw vulnerability scan against an SBOM will generate false positives. A component may contain a vulnerable code path that the application never calls. A CVE may be present in the component but mitigated by a configuration the application uses. VEX documents allow a vendor to assert the exploitability status of a CVE against a specific product version.
VEX defines four statuses:
- Not affected: The product is not affected by this CVE. A justification is required (component not present, vulnerable code path not in execution graph, mitigating controls exist).
- Affected: The product is affected. Remediation information should be included.
- In triage: The vendor is currently analyzing the vulnerability.
- Fixed: The vulnerability has been addressed in a specific product version.
CycloneDX supports VEX as a document type within the same schema. CISA has also published a standalone VEX format. When consuming third-party software, requesting VEX documents alongside SBOMs allows automated tools to filter scanner output to only actionable findings.
SBOM Consumption Workflow
When receiving software from a vendor, the consuming organization should:
- Request both the SBOM and any available VEX documents.
- Verify the SBOM signature against the vendor's published signing key.
- Import the SBOM into a vulnerability management platform (Dependency-Track is the leading open source option; commercial options include Anchore Enterprise, Mend, and Snyk).
- Configure the platform to monitor for new CVEs matching the imported component inventory.
- Establish SLAs with the vendor for VEX updates and patched releases.
---
CDA Perspective
CDA's Continuous Surface Reduction (CSR) methodology treats SBOM generation and continuous scanning as core controls within the VSD domain. CSR's core principle is directional: "Every surface you expose is a surface we eliminate." Every untracked dependency is an unmonitored surface. SBOMs make that surface visible; continuous vulnerability correlation keeps it measured.
Within the CSR operational workflow, SBOM generation is a required step in any pipeline that produces a deployable artifact. CDA recommends CycloneDX as the primary format for security-focused workflows given its first-class VEX support, with SPDX for any deliverables going to federal customers where ISO/IEC 5962:2021 alignment is required.
CDA also applies SBOM logic to its own service estate. Every deployed Cloudflare Worker and Next.js application in the CDA ecosystem has a corresponding SBOM maintained in the artifact registry. When new CVEs are published against Node.js packages or Rust crates used in the Worker runtime, the monitoring pipeline generates alerts before a threat actor could exploit the window between disclosure and remediation.
For clients onboarded through CDA's managed security programs, SBOM program setup is part of the initial engagement scope under the VSD domain. This includes toolchain selection, pipeline integration, artifact registry configuration, and continuous monitoring subscription.
---
Key Takeaways
- An SBOM is a machine-readable inventory of every software component in an application, including direct and transitive dependencies.
- The two primary formats are SPDX (ISO/IEC 5962:2021, Linux Foundation) and CycloneDX (OWASP). Both capture the same underlying data; CycloneDX has stronger native VEX support.
- NTIA minimum elements are the regulatory floor: supplier, name, version, unique identifier (PURL), dependency relationship, SBOM author, and timestamp.
- Generation tooling includes Syft, Trivy, cdxgen, Microsoft SBOM Tool, and Anchore. SBOM generation belongs in the CI/CD pipeline at build time, not as a manual or periodic process.
- VEX documents allow vendors to assert exploitability status per CVE, reducing false-positive noise in automated scanning workflows.
- EO 14028 mandated SBOMs for federal software procurement; the EU Cyber Resilience Act extends similar requirements to the EU market.
- Without an SBOM, answering "are we affected by this CVE?" is a manual, slow, error-prone process. With one, it is an automated query against a maintained inventory.
- CDA's CSR methodology requires SBOM generation for all deployable artifacts as a foundational surface reduction control.
---
Sources
- NTIA. (2021). The Minimum Elements for a Software Bill of Materials (SBOM). U.S. Department of Commerce. https://www.ntia.gov/report/2021/minimum-elements-software-bill-materials-sbom
- CISA. (2023). SBOM Sharing Roles and Considerations. Cybersecurity and Infrastructure Security Agency. https://www.cisa.gov/sbom
- Executive Order 14028. (2021). Improving the Nation's Cybersecurity. The White House. https://www.federalregister.gov/documents/2021/05/17/2021-10460
- Linux Foundation / SPDX. (2021). SPDX Specification v2.3. ISO/IEC 5962:2021. https://spdx.dev/specifications/
- OWASP CycloneDX. (2023). CycloneDX Specification v1.5. https://cyclonedx.org/specification/overview/
- CISA. (2023). Vulnerability Exploitability eXchange (VEX): Use Cases. https://www.cisa.gov/resources-tools/resources/minimum-requirements-vulnerability-exploitability-exchange-vex
- Anchore. (2023). Syft: CLI tool and library for generating a Software Bill of Materials. https://github.com/anchore/syft
- OWASP. (2023). Dependency-Track: Continuous SBOM Analysis Platform. https://dependencytrack.org/
- European Parliament. (2024). Cyber Resilience Act (Regulation EU 2024/2847). Official Journal of the European Union.