Software Bill of Materials (SBOM)
Inventorying what your software contains.
Software Bill of Materials (SBOM) is a free Cyber Security Academy lesson on CoddyKit — lesson 2 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Cyber Security Academy learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
What an SBOM Is
A Software Bill of Materials (SBOM) is a formal, machine-readable inventory of every component inside a piece of software: libraries, their versions, licenses, and supplier information.
Just as a food label lists ingredients, an SBOM lets you answer in seconds: does this product contain the vulnerable version of X? Without one, that question can take days of manual archaeology.
Why SBOMs Matter Now
When a critical vulnerability lands, the first operational question is exposure: which of our products ship the affected component?
During the Log4Shell incident, organizations with SBOMs queried their inventory and triaged in hours. Those without spent weeks grepping build directories. Regulators and major buyers increasingly require SBOMs as a procurement condition.
- Rapid vulnerability impact analysis
- License compliance and obligation tracking
- Supply chain transparency for customers and auditors
Standard SBOM Formats
Two open standards dominate. Tooling can usually convert between them.
- SPDX — a Linux Foundation standard, strong on licensing, widely accepted by regulators
- CycloneDX — an OWASP standard, security-focused, supports vulnerability and dependency relationship data
Avoid inventing your own format; consumers and scanners expect these.
What Goes in an Entry
Each component entry should carry enough identity to be matched against vulnerability feeds. The key fields:
- name and version — exact, not a range
- PURL (package URL) — a universal identifier like
pkg:npm/lodash@4.17.21 - hash — to verify integrity
- license — SPDX license identifier
- supplier — who produced it
# A PURL uniquely identifies a component across ecosystems
pkg:npm/lodash@4.17.21
pkg:pypi/requests@2.31.0
pkg:golang/github.com/gin-gonic/gin@v1.9.1Generating an SBOM
Generate SBOMs automatically from source or from a built artifact. Syft is a common cross-ecosystem generator that outputs both standards.
# from a project directory (CycloneDX JSON)
syft dir:. -o cyclonedx-json=sbom.cdx.json
# from a container image (SPDX JSON)
syft my-app:1.4.0 -o spdx-json=sbom.spdx.json
# CycloneDX has native generators per ecosystem too
cyclonedx-npm --output-file sbom.jsonSource vs Build vs Runtime SBOMs
An SBOM generated at different stages captures different truths.
- Source SBOM — what the manifest declares; may miss bundled or vendored code
- Build SBOM — what the build actually pulled in; most accurate for release
- Runtime / deployed SBOM — what is actually present in the running image, including OS packages
For supply chain assurance, generate at build time from the real artifact, and scan the final container for OS-level packages too.
Scanning an SBOM for Vulnerabilities
An SBOM becomes powerful when fed to a matcher that maps components to known CVEs. This decouples generation from analysis: scan an old SBOM the day a new CVE drops.
# match an SBOM against vulnerability databases
grype sbom:sbom.cdx.json
# OSV scanner consumes SBOMs directly
osv-scanner --sbom=sbom.spdx.json
# fail CI above a severity threshold
grype sbom:sbom.cdx.json --fail-on highVEX: Saying What Is Exploitable
An SBOM may show a vulnerable component that is not actually exploitable in your product (the vulnerable function is never called). A VEX (Vulnerability Exploitability eXchange) document records that assessment.
VEX cuts noise: instead of every customer panicking over a listed CVE, you publish a statement of not_affected with justification, or affected with remediation. It turns a raw inventory into actionable triage.
Distributing and Signing SBOMs
An SBOM is only trustworthy if it is authentic and tied to the exact artifact it describes. Sign it and attach it as an attestation rather than a loose file.
# attach a signed SBOM attestation to an image with cosign
cosign attest --predicate sbom.cdx.json \
--type cyclonedx \
my-registry/my-app:1.4.0
# verify the attached SBOM attestation
cosign verify-attestation --type cyclonedx my-registry/my-app:1.4.0Automating SBOMs in CI
Manual SBOMs drift instantly. Wire generation into the pipeline so every release produces and stores one as a build artifact, ideally signed and scanned in the same job.
- Generate from the built artifact, not just the repo
- Store SBOMs in a queryable registry keyed by version
- Re-scan stored SBOMs on a schedule against fresh CVE feeds
- Gate releases on the vulnerability scan result
Common SBOM Pitfalls
SBOMs fail quietly when treated as a checkbox.
- Stale — generated once and never regenerated
- Incomplete — misses OS packages, statically linked or vendored code
- Unverified — no hash linking it to the deployed artifact
- Unused — produced but never scanned or queried
An accurate, regenerated, signed, and continuously scanned SBOM is the goal, not a one-off JSON file.
Quick Check: SBOM Purpose
Apply what you learned to an incident scenario.
Recap: SBOM
You can now inventory what your software contains and act on it.
- An SBOM is a machine-readable list of every component, in SPDX or CycloneDX format
- Identify components by PURL, version, hash, and license
- Generate at build time, then feed to a matcher (grype, osv-scanner) for CVEs
- Use VEX to declare real exploitability and cut false alarms
- Sign and automate in CI; re-scan stored SBOMs against new feeds
Next: proving where artifacts came from with signing.
Frequently asked questions
Is the “Software Bill of Materials (SBOM)” lesson free?
Yes — the full text of “Software Bill of Materials (SBOM)” is free to read here on the web, and the Cyber Security Academy course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Cyber Security Academy course, upgrade to CoddyKit PRO.
What will I learn in “Software Bill of Materials (SBOM)”?
Inventorying what your software contains. You practise Cyber Security Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Cyber Security Academy?
No prior experience is required. Cyber Security Academy on CoddyKit is structured for beginners through advanced learners; this is — lesson 2 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Software Bill of Materials (SBOM)” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Cyber Security Academy lesson?
Yes. Every Cyber Security Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Supply Chain Threats
- Software Bill of Materials (SBOM)
- Dependency and Artifact Signing
- Securing CI/CD Pipelines