| SBOM Format | Governing Body | Primary Strength |
|---|---|---|
| CycloneDX | OWASP | Strong vulnerability and license data modeling, widely supported by scanners |
| SPDX | Linux Foundation / ISO | Broadest legal and licensing metadata, ISO/IEC 5962 standardized |
| SWID | ISO/IEC 19770-2 | Software identification tags, common in enterprise asset management |
Why Most SBOM Programs Stall After Generation
Ask most security teams whether they generate SBOMs and the answer is increasingly yes. Ask whether they can tell you, within minutes of a new CVE disclosure, exactly which production services are affected — and the answer is usually no. That gap is the entire story of SBOM implementation in 2026. Generation has become a commodity: tools like Syft, Trivy, and the Microsoft SBOM Tool can produce a CycloneDX or SPDX document from a container image or build artifact in seconds. The hard, unsolved-at-most-organizations part is everything downstream — ingesting that document into something queryable, matching it continuously against vulnerability feeds, and routing the results to the people who can actually patch the affected component before it becomes an incident.
This is not a hypothetical problem. When Log4Shell was disclosed, organizations without a queryable software inventory spent days or weeks manually grepping build manifests and asking application teams to self-report. Organizations with a working SBOM pipeline could query “which of our services depend on log4j-core between these version ranges” and get an answer in minutes. That is the entire value proposition of an SBOM implementation done right, and it’s why generation without response tooling captures maybe a third of the value.
Regulatory pressure has accelerated SBOM adoption significantly, but it has also created a specific failure mode worth naming directly: teams that treat SBOM generation as a checkbox for a contractual or regulatory requirement, produce the document, hand it to a customer or auditor, and never look at it again internally. That approach satisfies the letter of most current requirements while missing the actual security benefit entirely. The organizations getting real value from SBOM programs are the ones treating the generated document as the input to an ongoing process — matching, triage, and remediation — rather than as the deliverable itself. This guide is written for that second group, walking through generation, format selection, CI/CD integration, monitoring platform selection, and the triage workflow that turns a static inventory into an operational vulnerability response capability.
Step 1: Generate SBOMs at Build Time, Not After the Fact
The right point to generate an SBOM is during the build, when the exact set of resolved dependencies, container base layers, and build tool versions is known with certainty. Generating an SBOM later — say, by inspecting a running production container — is slower, less accurate, and misses build-time-only dependencies.
Generation Tooling Checklist
- Use Syft (or an equivalent scanner) to generate SBOMs directly from container images, filesystems, or archives as part of the build job, outputting CycloneDX 1.6 or SPDX 3.0 depending on downstream tooling requirements.
- Generate one SBOM per build artifact — per container image, per deployable package — rather than one SBOM per repository, since a monorepo can produce multiple artifacts with different dependency sets.
- Capture transitive dependencies, not just direct ones; the majority of real vulnerabilities in modern applications live several layers deep in the dependency tree.
- Include container base image layers in the SBOM scope — a vulnerable OS package in the base image is just as exploitable as a vulnerable application library.
- Sign the SBOM alongside the artifact it describes so its provenance can be verified later, using a tool like Cosign or an in-toto attestation.
- Store SBOMs with a retention policy that matches your artifact retention — you need the SBOM for every version still running in production, not just the latest release.
Figure: SBOM data flow from build to vulnerability response
A build job generates a CycloneDX SBOM alongside the compiled artifact, which is signed and pushed to an SBOM repository. A continuous monitoring service cross-references every stored SBOM against live CVE feeds. When a match is found, the system automatically opens a ticket pre-populated with the affected component, version, fix availability, and exploitability score, routed to the team that owns the deployable artifact.
Step 2: Choose CycloneDX or SPDX Based on Downstream Use
CycloneDX, maintained by OWASP, was designed from the outset with security use cases in mind and has strong native support for vulnerability data (VEX — Vulnerability Exploitability eXchange), making it the more common choice for teams whose primary goal is vulnerability response. SPDX, standardized as ISO/IEC 5962 and maintained by the Linux Foundation, has historically stronger licensing and legal metadata support, making it a common choice for organizations where license compliance is as much a driver as security. Many mature programs generate both, or generate one and convert as needed, since most tooling in the ecosystem supports interoperability between the two formats.
| Use Case | Recommended Format | Reason |
|---|---|---|
| Vulnerability response, VEX integration | CycloneDX | Native vulnerability and exploitability data structures |
| License compliance, legal review | SPDX | Richer licensing metadata, ISO-standardized |
| Regulatory submission (US federal contracts) | Either, per contract requirement | NTIA minimum elements satisfied by both formats |
Step 3: Integrate SBOM Generation Into CI/CD
An SBOM generated manually once a quarter is a compliance artifact, not a security tool. Real value requires generation on every build, automatically, with no human step to forget.
- Add SBOM generation as a pipeline stage immediately after the build/package step, before the artifact is pushed to a registry.
- Fail the pipeline (or at minimum warn loudly) if SBOM generation fails, rather than letting an artifact ship without one.
- Attach the SBOM to the artifact in your registry as an OCI attestation or sidecar file so it travels with the image through every environment.
- Version-tag SBOMs to match the exact artifact version, never overwrite a prior SBOM in place.
- Run a vulnerability scan against the freshly generated SBOM as a pipeline gate, blocking merges or deploys that introduce components with known critical, actively-exploited CVEs.
Step 4: Ingest SBOMs Into a Monitoring Platform
Generation and CI/CD integration solve the “do we have an inventory” problem. Ingestion into a continuous monitoring platform solves the “do we know when that inventory becomes dangerous” problem. OWASP Dependency-Track is the most widely deployed open-source option purpose-built for this: it ingests CycloneDX SBOMs, continuously cross-references components against the National Vulnerability Database, GitHub Advisory Database, and OSV, and maintains a live view of every project’s risk posture rather than a point-in-time snapshot.
- Feed every generated SBOM into your monitoring platform automatically as part of the CI/CD pipeline, not as a separate manual upload step.
- Tag ingested SBOMs with metadata — service owner, environment, criticality tier — so alerts can be routed and prioritized correctly.
- Configure continuous re-scanning, since a component that was safe last week can become critical the moment a new CVE is disclosed against it, with no code change on your side at all.
- Correlate SBOM data with runtime information where possible — a vulnerable component that is never actually loaded or executed carries meaningfully lower real-world risk than one running in a production request path.
Step 5: Turn Matches Into Triaged, Actioned Tickets
This is the step most SBOM programs skip, and it’s the one that actually matters. A raw list of “components with known CVEs” is not vulnerability response — it’s just a longer, more accurate version of the same overwhelming backlog security teams already have. Real vulnerability response requires triage logic layered on top of the raw matches.
Triage and Response Checklist
- Prioritize using EPSS (Exploit Prediction Scoring System) alongside CVSS — a medium-severity CVE with high real-world exploitation probability often deserves faster action than a critical-severity CVE that is theoretical only.
- Cross-reference against CISA’s Known Exploited Vulnerabilities (KEV) catalog and treat any match there as an immediate, top-of-queue action regardless of CVSS score.
- Check reachability — whether the vulnerable code path is actually invoked by your application — before treating every match as equally urgent; several modern scanners now support call-graph-based reachability analysis for exactly this purpose.
- Auto-generate tickets pre-populated with the affected component, installed version, fix version if one exists, and the service owner, so triage does not start from zero every time.
- Define SLAs by severity and exploitability tier, and track mean time to remediate as a real operational metric, not a vanity dashboard number.
- Build a fast-path for emergency patching (a Log4Shell-scale event) that bypasses normal change management review cycles, agreed with stakeholders in advance rather than negotiated live during an incident.
| Response Stage | Key Input | Output |
|---|---|---|
| Detection | SBOM matched against CVE/KEV feeds | Raw vulnerability match list |
| Prioritization | CVSS, EPSS, KEV status, reachability | Ranked, actionable queue |
| Triage | Service ownership, criticality tier | Assigned, SLA-bound ticket |
| Remediation | Available patch or mitigation | Patched artifact, verified fix |
Rolling Out SBOM Implementation Across an Organization
A common failure pattern is trying to implement SBOM generation and vulnerability response across every repository and service simultaneously, which produces an unmanageable flood of findings before the response workflow is mature enough to handle them. A staged rollout produces better outcomes and faster organizational buy-in.
Start with a small set of internet-facing, high-criticality services where the security payoff is largest and where engineering teams are most likely to feel the benefit directly, rather than beginning with internal tooling that carries lower real-world risk. Use this initial cohort to work out the operational kinks — ticket routing rules, ownership mapping accuracy, false-positive tuning — before expanding coverage. Publish a simple internal dashboard showing SBOM coverage percentage across the service catalog, since visibility into what is and is not yet covered creates organic pressure for teams to onboard rather than requiring a mandate enforced top-down. Pair the technical rollout with a lightweight policy: new services must ship with SBOM generation wired in from day one, while existing services get a defined onboarding timeline rather than an indefinite grace period that never gets prioritized against feature work.
Expect resistance rooted in noise, not principle — most engineering teams do not object to SBOM implementation itself, they object to a flood of low-value tickets for vulnerabilities that turn out to be unreachable or already mitigated. Investing in the triage and reachability layer described above before scaling rollout organization-wide is what prevents that resistance from calcifying into teams simply ignoring the tickets.
Handling the Cases Where No Patch Exists
Not every SBOM-flagged vulnerability has an available fix the moment it’s disclosed. This is where the VEX (Vulnerability Exploitability eXchange) format earns its place alongside the SBOM itself. VEX lets a software producer or consuming team state explicitly whether a known vulnerability in a component is actually exploitable in their specific context — “affected,” “not affected,” “fixed,” or “under investigation” — which prevents a vulnerability management queue from drowning in matches for CVEs that technically apply but are not actually reachable or exploitable in your deployment. Pair every unpatched, genuinely exploitable finding with a documented compensating control (network segmentation, a web application firewall rule, disabling the affected feature) and a re-review date, rather than letting it sit in a backlog with no interim mitigation and no follow-up plan.
Increasingly, larger software suppliers publish their own VEX statements alongside security advisories, and mature vulnerability response programs consume those upstream statements automatically rather than re-deriving exploitability judgments from scratch for every downstream consumer. Building the capability to both consume and, where you distribute software to others, produce VEX statements closes the loop on an ecosystem-wide problem: without VEX, every organization downstream of a vulnerable component independently re-investigates the same exploitability question, multiplying wasted effort across the industry for every significant CVE disclosure.
Common mistake
Teams frequently stand up SBOM generation, tick the compliance box, and stop there — assuming the presence of an SBOM itself constitutes vulnerability management. Without continuous monitoring, prioritization, and a triage workflow feeding real tickets to real owners, an SBOM is a static document that answers no questions the moment a new CVE is published. Generation is the easy 20 percent of the work; response is the hard 80 percent that actually reduces risk.
What worked
Routing SBOM-matched vulnerabilities through a scoring pipeline that combined CVSS, EPSS, and CISA KEV status before ticket creation cut the visible backlog by more than half without reducing actual risk coverage, because most raw CVE matches were never realistically going to be exploited and did not need the same urgency as the small number that were.
Frequently Overlooked SBOM Implementation Details
- SBOM driftAn SBOM generated at build time can go stale if a container is patched in place at runtime; regenerate on every artifact change, not on a calendar schedule.
- Third-party and vendor SBOMsRequesting an SBOM from a vendor is only useful if you actually ingest and monitor it; many procurement programs collect vendor SBOMs and never open them again.
- Build reproducibilityNon-hermetic builds can silently produce different dependency sets on different days, meaning your SBOM might not accurately reflect what actually shipped.
- Container base image churnBase images rebuild frequently upstream; a component absent last week can reappear silently in this week’s base layer.
- Ownership mappingSBOM-to-ticket automation is worthless if the service-to-team ownership mapping it depends on is out of date.
Glossary
- SBOM (Software Bill of Materials)
- A structured, machine-readable inventory of every component, library, and dependency that makes up a piece of software.
- CycloneDX
- An OWASP-maintained SBOM standard with strong native support for vulnerability and exploitability data, commonly used for security-focused SBOM programs.
- SPDX
- A Linux Foundation-maintained, ISO/IEC 5962-standardized SBOM format with strong licensing and legal metadata support.
- VEX (Vulnerability Exploitability eXchange)
- A companion document format that states whether a known vulnerability in a component is actually exploitable in a specific product’s context.
- EPSS (Exploit Prediction Scoring System)
- A scoring model that estimates the probability a given vulnerability will be exploited in the wild, used alongside CVSS for prioritization.
- Reachability analysis
- A technique that determines whether a vulnerable code path within a dependency is actually invoked by the application, reducing false-urgency on unreachable findings.
Key Takeaways
- SBOM generation has become a commodity; the real differentiator is what happens after generation — ingestion, monitoring, and triage.
- Generate SBOMs at build time using tools like Syft, in CycloneDX or SPDX format, per deployable artifact rather than per repository.
- Wire SBOM generation directly into CI/CD so no artifact ships without a corresponding, versioned SBOM.
- Continuous monitoring platforms like OWASP Dependency-Track turn static SBOM documents into a live, queryable risk view.
- Prioritize vulnerability matches using CVSS, EPSS, CISA KEV status, and reachability analysis rather than treating every match as equally urgent.
- VEX statements prevent unpatched-but-not-actually-exploitable findings from drowning a triage queue that should focus on real risk.
- An SBOM without a response workflow is a compliance artifact, not a security control — response is the harder, more valuable half of the work.
FAQs
What is the difference between CycloneDX and SPDX?
CycloneDX, maintained by OWASP, has stronger native support for vulnerability and exploitability data, making it common for security-focused programs, while SPDX, standardized as ISO/IEC 5962 by the Linux Foundation, has richer licensing and legal metadata, making it common where license compliance is a primary driver.
What tool is commonly used to generate SBOMs from container images?
Syft is a widely used open-source tool that generates SBOMs directly from container images, filesystems, and archives in CycloneDX or SPDX format, and is frequently run as a CI/CD pipeline stage immediately after the build step so every artifact ships with an accurate, current inventory.
Why isn’t generating an SBOM enough for vulnerability response?
A generated SBOM is a static snapshot; without continuous monitoring against live CVE feeds and a triage workflow that routes prioritized findings to service owners, it cannot answer which production systems are affected by a newly disclosed vulnerability, which is the actual goal of vulnerability response.
What is VEX and why does it matter alongside an SBOM?
VEX (Vulnerability Exploitability eXchange) is a format that states whether a known vulnerability in a component is actually exploitable in a specific product’s context, preventing vulnerability management queues from being overwhelmed by technically-present but practically-unreachable findings.
How should organizations prioritize vulnerabilities found through SBOM matching?
Combine CVSS severity with EPSS exploitation probability and CISA’s Known Exploited Vulnerabilities catalog status, and where possible apply reachability analysis to confirm the vulnerable code path is actually invoked, rather than treating every CVE match with equal urgency.
What is OWASP Dependency-Track used for?
Dependency-Track is an open-source platform that ingests CycloneDX SBOMs and continuously cross-references their components against vulnerability databases like the NVD, GitHub Advisory Database, and OSV, maintaining a live, queryable risk view for every monitored project rather than a one-time scan result.
Should SBOMs be generated once per release or on every build?
SBOMs should be generated on every build and tied to the exact artifact version they describe, since dependency resolution can change between builds even without a code change, and a stale SBOM will misrepresent what is actually running in production.
How should teams handle a vulnerability with no available patch?
Document a compensating control such as network segmentation or a web application firewall rule, record the decision with a VEX statement or equivalent, and set a re-review date, rather than leaving the finding open with no interim mitigation and no plan to revisit it once a fix ships.
For related supply chain security guidance, see our overview of software supply chain attacks, our practical breakdown of dependency confusion and typosquatting defense, our guide to firmware and hardware supply chain integrity, and our CI/CD pipeline security guide. Readers evaluating open-source risk more broadly may also find our open-source cybersecurity risks and rewards playbook useful alongside our shift-left security guide.
- Xygeni, “Top 6 SBOM Tools in 2026” – xygeni.io
- OPSWAT, “SBOM Guide 2026 – How to Turn Compliance into a Security Asset” – opswat.com
- OX Security, “Top 5 SBOM Tools for Securing the Software Supply Chain” – ox.security
- Sbomify, “The Role of SBOMs in Cybersecurity: From Visibility to Vulnerability Response” – sbomify.com
- OWASP Foundation, CycloneDX specification documentation – cyclonedx.org
- Linux Foundation, SPDX specification documentation – spdx.dev
- CISA, Known Exploited Vulnerabilities Catalog – cisa.gov
