
Do You Need an SBOM? Requirements, Tools, and Practical Tips
Emily Bonnie
Senior Content Marketing Manager
Federal software supply-chain initiatives have made software bill of materials (SBOM) requests more common across the defense supply chain. Your prime contractor may require them, and government agencies or program offices may request them during security reviews, compliance assessments, or as part of contract flowdowns. But many defense contractors are unsure about whether they really need one, what needs to be included, and what tools or format to use.
This guide explains how to determine what you need to put in an SBOM, choose an implementation approach that fits your organization, and avoid common mistakes in the process.
What is a software bill of materials (SBOM)?
Think of an SBOM as an inventory of the identified components that make up your software. It is a machine-readable record of those components, their versions, where they came from, and how they relate to one another.
For example, imagine that your company delivers version 3.4 of a containerized mapping application. Its SBOM might include records like these:
| Component | Version | Supplier | Identifier | Relationship |
|---|---|---|---|---|
| Mapping application | 3.4.0 | Your company | Internal product identifier | Primary component |
| Logging library | 2.23.1 | Apache Software Foundation | Package URL (PURL) | Dependency of application |
| Encryption library | 3.0.15 | OpenSSL Project | PURL and file hash | Linked library |
| Container base image | 24.04 | Canonical | Image name and digest | Base image |
The actual SBOM would contain this information in a structured format such as SPDX or CycloneDX rather than as a simple table. It could also contain dozens, hundreds, or thousands of component records, depending on the product.

Your security tools then use SBOMs to match components against CVE databases and check for known vulnerabilities. While it isn’t required that an SBOM contain vulnerability findings, modern SBOM formats can carry vulnerability information if you need them to, such as CycloneDX.
| Tool or practice | Purpose | What you get |
|---|---|---|
| SBOM | Identifies declared or discovered components and relationships | SPDX or CycloneDX file listing identified components and relationships |
| SCA | Finds components and identifies potential vulnerabilities | Scan results and reports of what's risky |
| VEX | Communicates whether your product is actually affected by a vulnerability | Machine-readable status for each CVE |
Source SBOMs vs. build and artifact SBOMs
You can generate an SBOM from your source code or from your built artifact, but they capture different information.
A source SBOM shows what's in your repository. An artifact SBOM shows what's in your compiled binary, container image, or package — what your customer actually receives. Your build process might exclude code paths, strip dependencies, or generate new components. The final artifact might also include operating-system packages, build-system components, or transitive dependencies that don't appear in source alone.
Most of the time, customers want to know what's in the delivered product, not what you wrote. But the most complete approach combines both. Build-time analysis captures declared dependencies and manifest information. Final-artifact analysis shows what actually got compiled in, including hidden or generated components. Scanning just the final product can miss build context and dependency metadata, and scanning just source can miss what the build process did.
VEX (Vulnerability Exploitability eXchange)Â
When a CVE is published, it's easy to assume every component match is a critical vulnerability. VEX lets you understand and communicate the nuance.
You can tell your customers: "This vulnerable component is present in our software, but the vulnerable code path is not reachable in our product based on how we use it," or "Our product is affected, and here is our mitigation or remediation status."Â
For example, say your library contains a vulnerability in a PDF parsing function. You include the library, but you never call that function because your software doesn't process PDFs. With VEX, you can document that the vulnerability doesn't affect your product, even though it's technically present.Â
VEX is especially useful in mature supply chain security programs because it reduces false alarm fatigue and helps primes and government customers understand actual risk vs. component matches. Without VEX, every CVE match looks like a potential problem. With VEX, you and your customers get clarity around actual risk exposure.
When do SBOM requirements apply under a defense contract?
Neither DFARS 252.204-7012 nor CMMC formally requires you to deliver an SBOM.Â
DFARS 252.204-7012 requires applicable contractors to implement NIST 800-171 security requirements, and CMMC Level 2 assesses implementation of those requirements. SBOMs can support related vulnerability management and software integrity practices, but CMMC does not universally require an SBOM.
An SBOM becomes a contractual deliverable in three main ways:
- Your prime contractor puts it in the contract. Maybe it's in the statement of work or in the contract data requirements list (CDRL). Maybe it's included in a technical specification. If the solicitation or contract requires it, you need to deliver it.
- Your prime flows it down to you in your subcontract. They pass it along from the government contract or impose it themselves. Read your subcontract carefully for an SBOM deliverable. If it doesn't appear, you may not have a contractual obligation, but double-check any incorporated documents or contract modifications.
- A customer asks for one directly. During a compliance assessment, a security audit, or a vendor review, someone asks: "Can we get your SBOM?" Even if it's not contractually binding, responding professionally matters. A clear explanation of what you maintain is better than, "We don't have one."
Even when delivery isn't required, maintaining an SBOM can help you manage supply chain risk, respond faster to vulnerabilities, and answer customer questions about what's in your software. The challenge contractors often face is often around defining what's in scope, creating an accurate SBOM for each release, protecting sensitive information, and connecting that data to your vulnerability management process.
What should a defense contractor SBOM include?
The exact requirements come from your contract or customer. At a minimum, however, a useful SBOM generally contains the following types of information:
- SBOM metadata: The file should identify the organization or individual that created the SBOM, when it was created, the tool used to generate it, and the context in which it was generated. For example, from source code, during a build, or by scanning a final artifact.
- The primary component: The SBOM should clearly identify the product, application, firmware image, container, or other software artifact that the document describes. Include its name, version, supplier or producer, and applicable identifiers.
- Component records: Each identified component should have a separate record containing its name, version, and supplier or producer when known. This inventory may include open-source packages, commercial libraries, operating-system packages, container base images, statically linked libraries, firmware components, and other software included in the delivered product.
- Unique software identifiers: Where available, include identifiers that allow tools to distinguish one package from another. Common examples include Package URLs (PURLs), Common Platform Enumerations (CPEs), Software Heritage identifiers, repository locations, container digests, and identifiers defined by the applicable SBOM format.
- Cryptographic hashes: A hash can help identify and verify the exact component or artifact represented in the SBOM. The record should identify both the hash value and the algorithm used to produce it, such as SHA-256.
- License information: Include the declared or concluded license for each component when known. Standard SPDX license identifiers improve consistency and make automated license analysis easier.
- Dependency relationships: The SBOM should explain how components relate to one another. For example, it may indicate that the primary product contains a library, that one package depends on another, or that a container uses a particular base image.
- Scope, coverage, and known unknowns: If the generator could not identify a component, supplier, version, relationship, or other required field, record that limitation rather than simply omitting it. A customer should be able to tell what the SBOM covers and where any gaps may remain.
Additional fields may be required for a particular program, including copyright information, file-level details, build information, pedigree, provenance, security advisories, or VEX data. When in doubt, follow the applicable contract, data-item description, technical specification, or customer instructions.
How to generate an SBOM
Generating an SBOM involves more than running a scanner and saving the output. The goal is to produce a valid, sufficiently complete record that corresponds to a specific released artifact.
1. Identify the product and release
Start with the exact software artifact the SBOM will describe. Record the product name, version, build or release identifier, platform, and any other information needed to distinguish it from other releases.
Do not use one generic SBOM for multiple product versions if their components differ.
2. Define the generation scope
Decide what the SBOM must cover. Depending on the product and contract, that may include:
- Direct and transitive dependencies
- Open-source and commercial components
- Vendored or copied source code
- Statically linked libraries
- Build-generated components
- Container base images and operating-system packages
- Firmware
- Embedded runtimes
- Installation packages or bundled tools
The scope should match what is actually delivered and the level of detail the customer requires.
3. Select the required format and version
Determine whether the customer requires SPDX or CycloneDX, which specification version applies, and which serialization format to use, such as JSON or XML. Confirm any required schema-validation rules, minimum fields, naming conventions, or file-naming requirements.
Your customer will usually tell you what they prefer, but if they don't, propose an approach and confirm acceptance before building the delivery process around it.
4. Choose a generator that fits the technology
Select a tool that can analyze your languages, package managers, build system, containers, operating systems, and final delivery format. Syft and cdxgen are examples, but no single tool is ideal for every environment.
Verify what the tool actually examines. Some generators rely primarily on manifest or lock files. Others inspect source trees, build output, binary files, installed packages, or container layers. This affects what they can detect.
5. Generate the SBOM as close to the build as practical
For better traceability, generate the SBOM during the controlled release build or immediately after the final artifact is produced. Associate it with the same product version, build identifier, source revision, and artifact digest.
Scanning only files such as package.json, pom.xml, or requirements.txt may miss resolved versions, transitive dependencies, operating-system packages, and components introduced during packaging. When practical, combine build information with a scan of the completed artifact or container image.
6. Incorporate upstream information
If suppliers provide SBOMs for commercial or proprietary components, preserve and incorporate that information where the chosen format and customer requirements allow it. Automatically generated results may not identify proprietary components accurately, so engineering, procurement, licensing, and supplier information may be needed to fill gaps.
If a component’s identity or version can’t be confirmed, don’t just guess. Mark the information as unknown and document the limitation.
7. Normalize and enrich component records
Review component names, versions, suppliers, identifiers, licenses, hashes, and dependency relationships. Add reliable identifiers such as PURLs or container digests where the generator did not provide them.
Normalization matters because inconsistent package names and incomplete identifiers can produce false vulnerability matches or prevent legitimate matches.
8. Validate the file quality
Validate the SBOM against the applicable SPDX or CycloneDX schema. Then review the content itself:
- Does it identify the correct product and version?
- Are required fields populated?
- Are direct and transitive dependencies represented?
- Are component relationships present?
- Does it include the expected container or operating-system packages?
- Are there obvious false positives or duplicate components?
- Are unknown or unresolved fields identified?
- Does the artifact hash match the software being delivered?
Schema validation confirms that the file is structurally valid, but it doesn’t prove that the inventory is complete or accurate.
9. Perform vulnerability and license analysis separately
Submit the completed SBOM to your approved SCA or vulnerability-management tooling. Investigate potential matches, document remediation decisions, and create VEX information when appropriate.
Keep the component inventory separate from the vulnerability analysis. A newly disclosed CVE doesn’t change the composition of an existing release, but it may change your assessment of that release.
10. Retain and deliver the approved SBOM
Store the validated SBOM with the corresponding release artifacts. Include it in the customer delivery only when required or authorized, using the prescribed delivery channel, access controls, markings, and file name.
Generate a new SBOM when the released components or patches change. Continue reassessing retained SBOMs for supported product versions as new vulnerabilities are disclosed.
How to integrate SBOM generation into your release process
Not every defense contractor has the same infrastructure or tooling maturity. The approach that works for you depends on how your software development and release process is structured.Â
Here are three common scenarios and how to implement SBOM generation in each.
You don't have a formal build pipeline
If you're not running automated builds:
- Get a lightweight generator like Syft or cdxgen and scan the built artifact, not just the manifest.
- Generate before release. Point it at your build output in the format your customer wants.
- Keep it with the release. Store it in a controlled location. Only include it in delivery if your contract requires it or your customer has authorized it.
- Regenerate for each release. Version 2.1 gets a new SBOM for 2.1. Keep history.
You have release builds but limited infrastructure
If you're running releases but don't have mature scanning:
- Add generation to the release build. Integrate Syft, cdxgen, or similar into your release process. Generate in your required format.
- Generate on release builds, not every commit. You don't need an SBOM for every development check-in. Generate them when you cut a release.
- Scan for vulnerabilities and document your decisions. Use something like OWASP Dependency-Check or your vendor's scanning tool. Flag what you find and document what you accept and what you're fixing.
- Store and deliver as required. Keep it with the release and deliver it when the contract requires it.
You have mature CI/CD
If you've got established pipelines and security practices:
- Generate SBOMs with policy gates. Fail or warn the build if high-severity vulnerabilities show up, based on your tolerance.
- Provide VEX data. Explain which vulnerabilities affect you and which don't.
- Monitor continuously. Watch for new CVEs against your dependencies.
- Keep an audit trail. Track who generated it, when, what tool, what gates were applied, what exceptions were approved.
How SBOM and CVE matching supports vulnerability management
When a vulnerability drops, your scanning tool compares it against your SBOM and flags matches. But a match doesn't mean the vulnerability is exploitable in your product.
For example, if your SBOM shows you use Apache Log4j 2.14.2 and a CVE affects versions 2.0 through 2.16.1, your know your product may contain the vulnerable code. You still need to determine:
- Does your code actually use the vulnerable function?
- Can an attacker reach it?
- Does your system configuration reduce the risk?
- Does the vendor have a patch?
A high CVSS score tells you general severity, but it doesn't tell you your risk. You need to know: Is this already being exploited? How exposed are you? How critical is this system? What does your contract say about response timelines?
Component names and versions can also get mapped incorrectly. SCA tools rely on community-maintained databases, which are usually accurate but sometimes not. If a tool flags something you don't recognize, verify it's actually in your code.
Transitive dependencies can be harder to remediate, but you still have options. Library A depends on Library B (which you don't use directly). Library B has a vulnerability. You're not stuck waiting for Library A to update. You can:
- Check if Library A already patched it. Upgrade if so.
- Pin or override Library B's version to a patched one in your build.
- Swap Library A for something else.
- Isolate the affected functionality so it's not exposed.
- Document a compensating control, like network segmentation or access restrictions.
If a vulnerability is found, assess your dependencies thoughtfully and don't wait for the original library maintainers to fix everything.
SBOM best practices for delivery and maintenance
Generating the file is only one part of the process. These practices help ensure that the SBOM is useful, defensible, and handled correctly.
- Trace the requirement to its source: Determine whether the request comes from a solicitation, contract, statement of work, contract data requirements list (CDRL), subcontract, incorporated technical document, contract modification, or voluntary customer request.
- Confirm the required scope and depth: Agree on the products, versions, platforms, component depth, required fields, file format, specification version, serialization, validation rules, and update frequency before generating the deliverable.
- Separate the SBOM from related analyses: Confirm whether the customer also expects a vulnerability report, license analysis, VEX document, security advisory, or other deliverable. These may accompany an SBOM, but they are not automatically part of one.
- Control delivery and distribution: Confirm the approved delivery method, recipients, access controls, handling instructions, and any required markings. An SBOM is not automatically classified, CUI, or contractor-sensitive because it supports a defense contract, but its content and contractual context may require protection.
- Assign an owner: Give a specific person or role responsibility for generation, quality review, delivery, retention, vulnerability reassessment, and customer coordination.
- Maintain release-specific records: Retain the SBOM with the exact release it describes. Also preserve relevant scan results, validation results, exceptions, approvals, vulnerability assessments, and VEX or advisory records.
- Reassess supported releases: Compare retained SBOMs with newly disclosed vulnerability information. Generate a new SBOM when the software composition changes; update the vulnerability assessment or VEX information when the composition remains the same but security information changes.
- Review the process periodically: Tools and build environments change. Periodically confirm that the generator still detects the expected components, produces the required fields, and remains integrated with the authoritative release process.
Common SBOM mistakes to avoid
SBOM generation and delivery sound straightforward, but contractors often run into a few common problems. Most of these stem from either technical misunderstandings about what SBOMs capture, or from unclear communication about what's required. Here's what to watch out for.
Delivering an outdated SBOM for a current release: An SBOM generated for an earlier release does not describe your current release if the software composition has changed. Retain it as the historical record for that earlier version, and generate a new SBOM for the new release. For software you support long-term, continuously or periodically reassess retained SBOMs against new vulnerability information.
Scanning only manifest files: Manifest files alone may omit exact resolved versions, transitive dependencies, build-generated components, and operating-system packages. Scan the built artifact or resolved dependency tree.
Hiding vulnerable components: Don't remove or misrepresent components to hide risk. If your software has a vulnerable dependency, document it honestly. Follow the contract requirements and coordinate sensitive information with the right people.
Trusting your vendor to verify: You remain responsible for the accuracy of an SBOM you deliver. If an MSP or vendor generated it, verify it. Be ready to defend it.
Sending an unsolicited SBOM: Don't include it without authorization. Confirm what's required, how it should be marked, and where it goes.
Assuming all formats and tools are interchangeable: If your contract specifies a format, use a tool that produces it. Different customers have different requirements. Ask instead of guessing.
Get the defense contractor SBOM checklist
When someone asks you for an SBOM, the first step is clarifying what they need. We've created a downloadable checklist that walks you through exactly what to ask, when to generate, and how to maintain accuracy over time.
The checklist covers three phases: what to do before you generate to clarify requirements, how to execute generation correctly, and how to maintain the SBOM after delivery. It's designed to be a practical resource you can hand to your team or reference when a customer submits a new request.Â

Defense Contractor SBOM Checklist
Get a step-by-step process for getting clarity about SBOM requirements, executing generation correctly, and addressing vulnerabilities when they emerge.
FAQs
Is an SBOM a federal requirement?
Not universally. Federal software supply-chain policies have encouraged SBOM adoption, but defense contractors should determine their deliverable obligations from the applicable solicitation, contract, subcontract, statement of work, CDRL, and incorporated documents.
Is an SBOM required for CMMC compliance?
An SBOM can support related security practices, but CMMC does not itself create a universal SBOM delivery requirement. Check the applicable contract and incorporated documents.
Do I need an agency sponsor for FedRAMP 20x Class C?
No. Class C is available through the 20x Program path, where you work directly with FedRAMP and list on the marketplace.
Does DFARS 252.204-7012 require an SBOM?
Not universally. DFARS requires you to implement NIST SP 800-171 security requirements. It doesn't independently require every contractor to deliver an SBOM.
What are the most common SBOM formats?
SPDX and CycloneDX are the standards. Many tools support one or both. Follow the version your customer specifies; if none is specified, propose one and confirm acceptance.
How often should an SBOM be updated?
Generate one for each released version. Reassess existing SBOMs when new vulnerabilities are disclosed. Regenerate them when you actually change components or patches.
Does an SBOM include vulnerabilities?
Not inherently. An SBOM is a component inventory. Your scanning tools correlate those components with known vulnerabilities. VEX communicates whether your product is actually affected.

Emily Bonnie
Senior Content Marketing Manager
Emily Bonnie is a seasoned digital marketing strategist with over ten years of experience creating content that attracts, engages, and converts for leading SaaS companies. At Secureframe, she helps demystify complex governance, risk, and compliance (GRC) topics, turning technical frameworks and regulations into accessible, actionable guidance. Her work aims to empower organizations of all sizes to strengthen their security posture, streamline compliance, and build lasting trust with customers.