SBOM Examples: Enhance Software Supply Chain Security
Software Bill of Materials (SBOM) adoption is rapidly accelerating, driven by increasing cybersecurity threats and regulatory mandates. As of 2026, organizations are prioritizing transparency in their software supply chains to mitigate risks associated with third-party components. An SBOM acts as a “nutrition label” for software, detailing all the ingredients – open-source libraries, commercial components, and their respective versions – that make up an application. This document provides a comprehensive overview of SBOM examples, illustrating their structure, content, and practical applications in enhancing software security and compliance.
What is a Software Bill of Materials (SBOM)?
A Software Bill of Materials (SBOM) is a formal, machine-readable inventory of software components and their relationships. It lists all the constituent parts of a piece of software, including open-source libraries, proprietary code, and commercial off-the-shelf (COTS) components. The primary goal of an SBOM is to provide transparency into the software supply chain, enabling organizations to understand their software’s composition and identify potential vulnerabilities or licensing issues.
Why Are SBOMs Crucial in 2026?

The digital landscape in 2026 is characterized by complex software supply chains and sophisticated cyberattacks. The SolarWinds incident in 2020 and subsequent breaches highlighted the critical need for visibility into software dependencies. Government initiatives, such as U.S. Executive Order 14028, have mandated SBOMs for software sold to federal agencies, further accelerating industry adoption. Organizations now leverage SBOMs to:
- Identify and Remediate Vulnerabilities: Quickly determine if software components contain known vulnerabilities (CVEs).
- Manage Licenses: Ensure compliance with open-source software licenses.
- Improve Security Posture: Gain a clear understanding of the software attack surface.
- Streamline Compliance: Meet regulatory requirements and customer demands for transparency.
- Enhance Incident Response: Expedite the impact assessment of security incidents.
Understanding SBOM Formats: SPDX and CycloneDX
Two prominent standards dominate the SBOM landscape: SPDX (Software Package Data Exchange) and CycloneDX. Both formats aim to standardize SBOM generation and consumption, ensuring interoperability across different tools and organizations.
SPDX (Software Package Data Exchange)
SPDX is an open standard developed by the Linux Foundation. It provides a flexible framework for communicating the components, licenses, copyrights, and security-related information of a software package. SPDX documents can be generated in various formats, including JSON, YAML, and RDF.
Key Elements of an SPDX SBOM:
- Document Information: Metadata about the SBOM itself, including its creation date and the tool used.
- Package Information: Details about each software package, such as its name, version, supplier, and unique identifier.
- File Information: Describes individual files within a package, including their checksums and licenses.
- Relationship Information: Defines how different elements (packages, files, snippets) relate to each other.
- License Information: Specifies the licenses associated with components, including declared licenses, extracted licenses, and license comments.
CycloneDX
CycloneDX is a lightweight SBOM standard designed for security context and supply chain component analysis. It is also an open standard, managed by the OWASP Foundation. CycloneDX is particularly well-suited for tools that automate vulnerability scanning and dependency analysis. It supports multiple output formats, including JSON and XML.
Key Elements of a CycloneDX SBOM:
- Component Identification: Details about each software component, including its name, version, PURL (Package URL), and CPE (Common Platform Enumeration).
- Vulnerability Information: Links to known vulnerabilities affecting the components.
- Dependency Graph: Illustrates the relationships between different components.
- Services: Describes services that are part of the software composition.
- Evidence: Information about how components were identified and verified.
Practical SBOM Examples
To illustrate how SBOMs are used, let’s consider a hypothetical web application and the SBOMs it might generate. This application, “WebAppX,” uses a combination of open-source libraries, a commercial database driver, and custom-developed modules.
Example 1: SBOM for a Simple Web Application (SPDX JSON Format)
Imagine WebAppX uses Node.js and several npm packages. An SPDX SBOM might look like this simplified example in JSON format:
“`json
{
“SPDXID”: “SPDXRef-DOCUMENT”,
“creationInfo”: {
“created”: “2026-10-26T10:00:00Z”,
“creators”: [
“Organization: ExampleCorp”,
“Tool: SPDX-Generator-v1.2.3”
],
“licenseListVersion”: “3.22”
},
“name”: “WebAppX”,
“documentNamespace”: “http://example.com/spdx/webappx/v1.0-a1b2c3d4-e5f6”,
“packages”: [
{
“name”: “WebAppX-Core”,
“SPDXID”: “SPDXRef-Package-WebAppXCore”,
“versionInfo”: “1.5.0”,
“supplier”: “NOASSERTION”,
“downloadLocation”: “NOASSERTION”,
“licenseConcluded”: “Apache-2.0”,
“licenseDeclared”: “Apache-2.0”,
“copyrightText”: “Copyright 2026 ExampleCorp”
},
{
“name”: “Express.js”,
“SPDXID”: “SPDXRef-Package-Express”,
“versionInfo”: “4.18.2”,
“supplier”: “Person: TJ Holowaychuk “,
“downloadLocation”: “https://registry.npmjs.org/express/-/express-4.18.2.tgz”,
“licenseConcluded”: “MIT”,
“licenseDeclared”: “MIT”,
“copyrightText”: “Copyright Authors and Contributors”
},
{
“name”: “Moment.js”,
“SPDXID”: “SPDXRef-Package-Moment”,
“versionInfo”: “2.29.4”,
“supplier”: “NOASSERTION”,
“downloadLocation”: “https://registry.npmjs.org/moment/-/moment-2.29.4.tgz”,
“licenseConcluded”: “MIT”,
“licenseDeclared”: “MIT”,
“copyrightText”: “Copyright 2011-2022 Moment.js contributors”
}
],
“relationships”: [
{
“spdxElementId”: “SPDXRef-DOCUMENT”,
“relatedSpdxElementId”: “SPDXRef-Package-WebAppXCore”,
“relationshipType”: “DESCRIBES”
},
{
“spdxElementId”: “SPDXRef-Package-WebAppXCore”,
“relatedSpdxElementId”: “SPDXRef-Package-Express”,
“relationshipType”: “DEPENDS_ON”
},
{
“spdxElementId”: “SPDXRef-Package-WebAppXCore”,
“relatedSpdxElementId”: “SPDXRef-Package-Moment”,
“relationshipType”: “DEPENDS_ON”
}
]
}
“`
Analysis of the SPDX Example:
This SBOM clearly lists the main application package (`WebAppX-Core`) and its dependencies (`Express.js`, `Moment.js`). It provides crucial information such as:
- Package Names and Versions: Essential for identifying specific components.
- Licenses: `Apache-2.0` for the core application, `MIT` for both Express.js and Moment.js. This helps in license compliance checks.
- Suppliers and Download Locations: Aids in tracing the origin of components.
- Relationships: Explicitly states that `WebAppX-Core` depends on `Express.js` and `Moment.js`.
Example 2: SBOM for a Java Application (CycloneDX JSON Format)
Consider a Java backend service, “OrderService,” built with Maven and using libraries like Spring Boot, Apache Commons, and a commercial Oracle JDBC driver. A CycloneDX SBOM might appear as follows (simplified JSON):
“`json
{
“bomFormat”: “CycloneDX”,
“specVersion”: “1.5”,
“serialNumber”: “urn:uuid:3e671687-395b-4189-906d-0c51197038f2”,
“version”: 1,
“metadata”: {
“timestamp”: “2026-10-26T11:30:00Z”,
“tools”: [
{
“vendor”: “OWASP”,
“name”: “cyclonedx-maven-plugin”,
“version”: “2.7.9”
}
],
“component”: {
“type”: “application”,
“name”: “OrderService”,
“version”: “2.1.0”
}
},
“components”: [
{
“type”: “library”,
“name”: “spring-boot-starter-web”,
“version”: “3.1.5”,
“purl”: “pkg:maven/org.springframework.boot/spring-boot-starter-web@3.1.5”,
“licenses”: [
{
“license”: {
“id”: “Apache-2.0”
}
}
]
},
{
“type”: “library”,
“name”: “commons-lang3”,
“version”: “3.12.0”,
“purl”: “pkg:maven/org.apache.commons/commons-lang3@3.12.0”,
“licenses”: [
{
“license”: {
“id”: “Apache-2.0”
}
}
]
},
{
“type”: “library”,
“name”: “ojdbc11”,
“version”: “21.8.0.0”,
“purl”: “pkg:maven/com.oracle.database.jdbc/ojdbc11@21.8.0.0”,
“licenses”: [
{
“license”: {
“name”: “Oracle JDBC Driver License”,
“text”: “Commercial license. See Oracle documentation for details.”
}
}
]
}
],
“dependencies”: [
{
“ref”: “pkg:maven/org.springframework.boot/spring-boot-starter-web@3.1.5”,
“dependsOn”: [
“pkg:maven/org.apache.commons/commons-lang3@3.12.0”
]
}
]
}
“`
Analysis of the CycloneDX Example:
This CycloneDX SBOM provides similar core information but uses different identifiers and structures:
- PURL (Package URL): A standardized way to represent software packages, making them easily queryable. `pkg:maven/org.springframework.boot/spring-boot-starter-web@3.1.5` is a PURL for the Spring Boot starter.
- Component Types: Differentiates between `application` and `library`.
- License Details: Explicitly mentions “Oracle JDBC Driver License” for the commercial component, indicating the need for manual review.
- Dependency Graph: Shows that `spring-boot-starter-web` depends on `commons-lang3`.
Using SBOMs for Vulnerability Management
One of the most significant benefits of SBOMs is their role in vulnerability management. By integrating SBOMs into security workflows, organizations can proactively identify and address risks.
Scenario: Identifying a Vulnerability in Express.js
Let’s revisit the first example, WebAppX, which uses `Express.js` version `4.18.2`. Suppose a critical vulnerability (CVE-2026-XXXX) is discovered in `Express.js` versions `4.18.0` through `4.18.2` on October 25, 2026.
- Generate SBOM: The development team generates an SPDX SBOM for WebAppX using a build tool or CI/CD pipeline plugin.
- Scan SBOM: A security tool (like a Software Composition Analysis (SCA) tool) ingests the SBOM.
- Match Vulnerability: The tool compares the components listed in the SBOM against vulnerability databases. It finds that `Express.js` version `4.18.2` is present and is affected by CVE-2026-XXXX.
- Alert and Remediate: The security team receives an alert detailing the affected application and component. They can then prioritize updating `Express.js` to a patched version (e.g., `4.18.3` or later) within WebAppX.
This process dramatically reduces the time it takes to detect and respond to vulnerabilities compared to manual methods. The ability to quickly pinpoint affected software across an organization’s entire application portfolio is invaluable.
Generating SBOMs: Tools and Techniques
Generating accurate and comprehensive SBOMs requires the right tools and integration into the software development lifecycle (SDLC).
Common SBOM Generation Tools:
- For JavaScript/Node.js: `npm audit –json`, `yarn audit –json`, Syft, Trivy, CycloneDX Node.js plugin.
- For Java: Maven plugins (e.g., `cyclonedx-maven-plugin`, `spdx-maven-plugin`), Gradle plugins, Syft, Trivy.
- For Python: `pip-audit`, `sbom-tool`, Syft, Trivy.
- General Purpose: Syft, Trivy, Dependency-Track, Azure SBOM Tool, Google’s SLSA tooling.
Integrating SBOM Generation into CI/CD:
The most effective way to ensure SBOMs are current and accurate is to generate them automatically as part of the Continuous Integration and Continuous Deployment (CI/CD) pipeline.
- Build Stage: After code compilation or dependency resolution, the CI/CD pipeline triggers an SBOM generation tool.
- Artifact Storage: The generated SBOM file (e.g., `sbom.spdx.json` or `bom.cyclonedx.json`) is stored alongside the application artifact (e.g., Docker image, JAR file).
- Security Scanning: SCA tools or vulnerability scanners can then access the SBOM to perform analysis.
- Policy Enforcement: Gates can be implemented to prevent deployments if the SBOM reveals unacceptable risks (e.g., components with critical vulnerabilities or non-compliant licenses).
This automated approach ensures that SBOMs are always up-to-date with the latest code changes and dependencies. For developers looking to implement charting capabilities within their applications, understanding how to draw charts with simple examples can be beneficial. You can Learn How To Draw Charts With Simple Teechart Tchart Examples In C.
Challenges and Best Practices for SBOM Implementation
While SBOMs offer significant advantages, organizations face challenges in their adoption and effective utilization.
Common Challenges:
- Tooling Fragmentation: A wide array of tools exist, each with varying capabilities and support for different formats.
- Accuracy and Completeness: Ensuring the SBOM accurately reflects all software components, including transitive dependencies and build-time tools, can be difficult.
- Vulnerability Data Correlation: Accurately mapping SBOM components to vulnerability databases requires robust data integration.
- Operationalizing SBOMs: Integrating SBOM analysis into existing security workflows and processes requires planning and resources.
- Commercial and Proprietary Components: Generating SBOMs for COTS software or internally developed proprietary components can be complex.
Best Practices:
- Standardize on Formats: Choose either SPDX or CycloneDX (or both) and ensure tools support the chosen standard(s).
- Automate Generation: Integrate SBOM creation into the CI/CD pipeline for consistent and up-to-date SBOMs.
- Integrate with Security Tools: Connect SBOMs to SCA tools, vulnerability scanners, and risk management platforms.
- Focus on Key Information: Prioritize identifying vulnerabilities, license compliance, and critical components.
- Educate Teams: Train development, security, and operations teams on the importance and use of SBOMs.
- Leverage PURLs and CPEs: Utilize these standardized identifiers for better component tracking and vulnerability correlation.
- Consider Build System Integration: Explore how to capture components added during the build process, not just runtime dependencies. For modern C++ development, understanding new features can be crucial. Explore Modern Examples For The New Modern C++ Builder 12 | Dimensional Data.
The Future of SBOMs
The role of SBOMs is expected to expand beyond vulnerability management. As of 2026, discussions are ongoing regarding their use in:
- Supply Chain Attestation: Providing verifiable proof of software integrity.
- Compliance Audits: Streamlining audits for various regulations.
- Operational Technology (OT) Security: Extending SBOM practices to industrial control systems.
- AI/ML Model Provenance: Tracking components and data used in training AI models.
Furthermore, advancements in AI are likely to improve automated SBOM generation and analysis, making the process more efficient and accurate. Techniques like Learn C++ Optimization With A Genetic Algorithms Example | Dimensional Data highlight the continuous innovation in software development that SBOMs aim to track.
Conclusion
SBOM examples demonstrate the practical value of software transparency in today’s complex digital environment. By providing a detailed inventory of software components, SBOMs empower organizations to proactively manage vulnerabilities, ensure license compliance, and strengthen their overall cybersecurity posture. As adoption continues to grow in 2026, driven by regulatory pressures and the increasing sophistication of cyber threats, mastering SBOM generation and utilization is becoming a fundamental requirement for secure and compliant software development. Embracing standards like SPDX and CycloneDX, and integrating SBOMs into automated workflows, are key steps toward building a more resilient and trustworthy software supply chain.
Frequently Asked Questions (FAQ)
What is the primary benefit of using an SBOM?
The primary benefit of an SBOM is to provide transparency into the software supply chain. This allows organizations to quickly identify all components within their software, understand their origins, and detect potential security vulnerabilities or license compliance issues, thereby reducing risk and improving security posture.
What are the most common SBOM formats?
The two most common and widely adopted SBOM formats are SPDX (Software Package Data Exchange) and CycloneDX. Both are open standards designed to provide a comprehensive and machine-readable inventory of software components.
How can SBOMs help in managing software vulnerabilities?
SBOMs help manage vulnerabilities by providing a detailed list of all software components and their versions. Security teams can then compare this list against vulnerability databases (like CVEs) to quickly identify if any components contain known security flaws, enabling faster patching and remediation.
Is generating an SBOM a manual process?
While manual SBOM generation is possible, it is highly inefficient and prone to errors. Best practices involve automating SBOM generation using tools integrated into the CI/CD pipeline, ensuring accuracy and consistency with every software build.
Can SBOMs be used for commercial off-the-shelf (COTS) software?
Yes, SBOMs can be generated for COTS software, although the process might differ. Vendors are increasingly providing SBOMs for their products. For software where vendors do not provide an SBOM, organizations may need to use specialized tools or rely on the vendor’s claims, highlighting the importance of vendor transparency.
What is a Package URL (PURL) in the context of SBOMs?
A Package URL (PURL) is a standardized, human-readable, and machine-parsable string that identifies a software package. It includes information like the package type, name, version, and qualifiers. PURLs are commonly used in CycloneDX SBOMs to uniquely identify components and facilitate automated analysis and correlation with vulnerability data.
