Quick summary: SBOM (Software Bill of Materials) is a machine-readable inventory of every component in a piece of software. SLSA (Supply-chain Levels for Software Artifacts) is a graduated framework for proving that the software was built and delivered without tampering. By 2026 both are no longer optional for organizations selling software to government customers, large enterprises, or operating in the EU under the Cyber Resilience Act. This guide walks through what SBOM and SLSA actually require, the tooling stack that delivers them (Syft, Grype, Trivy, cosign, in-toto, Sigstore), what auditors actually look at, and the realistic adoption sequence for an engineering team starting from zero.
Why This Matters Now
Three regulatory pressures have made supply-chain security mandatory rather than aspirational in 2026:
- EU Cyber Resilience Act (CRA) โ enforcement began in late 2025 for "products with digital elements." All software shipped to EU customers must include an SBOM accessible to the customer and to authorities. Penalties for non-compliance can reach 2.5% of global annual turnover.
- US Executive Order 14028 + OMB M-22-18 โ federal agencies require SBOMs and SLSA self-attestations from software suppliers. The trickle-down effect through government contractors and prime contractors has made this de facto standard for any vendor selling to US public sector.
- Customer procurement โ Fortune 500 procurement teams now routinely include SBOM delivery and SLSA Level 2+ attestation as contract requirements. "We do not produce SBOMs" is no longer an acceptable answer in enterprise sales.
Beyond compliance, the underlying engineering motivation is real: the supply-chain attacks of 2020-2024 (SolarWinds, Codecov, ua-parser-js, Log4Shell, xz-utils) all exploited weaknesses in software-supply-chain visibility. Organizations that genuinely operate SBOM and provenance tooling detect compromised dependencies in hours rather than weeks.
SBOM Fundamentals
An SBOM is a list of components in a piece of software, with metadata about each: name, version, supplier, license, and increasingly the cryptographic hash of the component's contents.
The two formats that matter in 2026
- SPDX (Linux Foundation, ISO/IEC 5962:2021) โ the more comprehensive format. Verbose JSON or YAML. The format most enterprise tooling defaults to.
- CycloneDX (OWASP) โ leaner, more developer-friendly, JSON or XML. Strong tooling support. Widely used in cloud-native ecosystems.
Both are accepted by US federal agencies and EU CRA tooling. Pick one and standardize; converting between them is mechanical but pointless friction.
What an SBOM actually contains (CycloneDX example)
{
"bomFormat": "CycloneDX",
"specVersion": "1.6",
"version": 1,
"metadata": {
"timestamp": "2026-05-21T10:00:00Z",
"tools": [{"vendor": "anchore", "name": "syft", "version": "1.18.0"}],
"component": {
"type": "container",
"name": "myapp",
"version": "1.4.7"
}
},
"components": [
{
"type": "library",
"name": "openssl",
"version": "3.2.1-r2",
"purl": "pkg:apk/alpine/openssl@3.2.1-r2",
"hashes": [{"alg": "SHA-256", "content": "abc123..."}],
"licenses": [{"license": {"id": "Apache-2.0"}}]
}
// ... typically dozens to hundreds more components
]
}
The purl (Package URL) field is the single most useful field โ a standardized identifier that lets vulnerability scanners look up CVEs without ambiguity. If your SBOM tooling does not produce purls, switch tooling.
SBOM Tooling That Actually Works
Syft (Anchore) โ the de facto SBOM generator
Syft scans container images, filesystems, and source repositories and produces SBOMs in SPDX or CycloneDX format. Single binary, zero configuration for the common case.
# Generate SBOM for a container image
syft myregistry.io/myapp:1.4.7 -o cyclonedx-json > sbom.json
# Generate SBOM for a directory
syft dir:./src -o spdx-json > sbom.spdx.json
# Generate SBOM for a running filesystem (production server)
syft / -o cyclonedx-json > running-server-sbom.json
Syft handles the major package ecosystems (apt, apk, rpm, npm, pip, gem, cargo, go modules, composer, nuget, maven). For 95% of Linux server workloads, syft is the right answer.
Trivy (Aqua) โ the all-in-one alternative
Trivy generates SBOMs and scans them for vulnerabilities in one tool. Simpler if you do not have a separate vulnerability scanning workflow.
trivy image --format cyclonedx --output sbom.json myregistry.io/myapp:1.4.7
trivy sbom sbom.json # scan the SBOM for vulnerabilities
Grype (Anchore) โ the SBOM-aware vulnerability scanner
Grype consumes SBOMs and reports CVEs. Pairs naturally with syft.
grype sbom:sbom.json -o table
The minimum CI integration
For a typical containerized service, the minimum SBOM CI integration is three steps added to your existing build pipeline:
# 1. Generate SBOM during/after image build
syft $IMAGE -o cyclonedx-json > sbom-$VERSION.json
# 2. Scan it for known vulnerabilities (gate the pipeline if critical found)
grype sbom:sbom-$VERSION.json --fail-on critical
# 3. Publish SBOM as an OCI artifact attached to the image
cosign attach sbom --sbom sbom-$VERSION.json $IMAGE
That is it. Three commands per build. The generated SBOM lives alongside the image in your registry, retrievable by anyone who pulls the image.
SLSA Levels Explained Honestly
SLSA defines four levels of supply-chain integrity guarantees. Higher levels require more rigorous controls.
SLSA Level 1: documented build process
The build is fully scripted (no manual steps). Provenance metadata is generated for every artifact. Trivial to achieve in any modern CI/CD setup โ if you build with GitHub Actions, GitLab CI, or similar, you are already there.
SLSA Level 2: hosted build, signed provenance
Builds run on a hosted CI service (not on developer laptops). Provenance is generated by the build service and cryptographically signed. This is where most engineering organizations should target in 2026 โ achievable with reasonable effort and meets the bar for most enterprise procurement.
SLSA Level 3: hardened build, isolated builds
Build environments are isolated (each build in its own clean environment). The build service is hardened (limited admin access, audit logs, signed releases). Provenance is non-falsifiable. This is the level US federal civilian agencies typically expect.
SLSA Level 4: reproducible builds, two-party review
Bit-for-bit reproducible builds. All changes require two-person review. Hermetic builds (no network access during build). This is aspirational for most organizations; achieving it requires significant build-system investment.
Implementing SLSA Level 2 in Practice
For a GitHub Actions-based pipeline, SLSA Level 2 looks like this:
# .github/workflows/build.yml
jobs:
build:
permissions:
id-token: write # Required for OIDC token to Sigstore
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- name: Build container
run: |
docker build -t $IMAGE .
docker push $IMAGE
- name: Generate SBOM
run: |
syft $IMAGE -o cyclonedx-json > sbom.json
- name: Sign image with cosign (keyless via Sigstore)
run: |
cosign sign $IMAGE
- name: Attach SBOM as signed attestation
run: |
cosign attest --predicate sbom.json \
--type cyclonedx $IMAGE
- name: Generate SLSA provenance
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v2.0.0
Components:
- cosign sign โ image is cryptographically signed using a short-lived certificate from Sigstore (Fulcio). The signature is published to a transparency log (Rekor).
- cosign attest โ SBOM is attached to the image as a signed in-toto attestation.
- SLSA generator โ produces a SLSA Level 3 provenance attestation describing exactly how the image was built (commit SHA, builder, parameters).
Verification on the consumer side:
# Verify image was signed by your build pipeline
cosign verify $IMAGE \
--certificate-identity-regexp 'https://github.com/myorg/myrepo/.github/workflows/build.yml.*' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
# Verify SLSA provenance
cosign verify-attestation $IMAGE --type slsaprovenance
This is genuinely useful: a downstream consumer can verify cryptographically that an image came from your build pipeline at a specific commit, with no possibility of in-the-middle tampering.
What Auditors Actually Look For
Having sat through both EU CRA assessments and US federal procurement reviews, the recurring auditor checklist:
- Show me an SBOM for a recent release. Format does not matter much; presence and accuracy do.
- Show me how it is generated. Manual processes get flagged; automated pipelines pass.
- Show me how you scan SBOMs for vulnerabilities. They want to see continuous scanning, not point-in-time.
- Show me your incident response when a vulnerability is found in a dependency. They want a documented process and recent evidence of executing it (e.g., "here is how we patched the September 2025 OpenSSL CVE within 48 hours").
- Show me how you verify dependencies before adopting them. Dependency-update workflows that run before merge get approval; "we just
npm installwhatever is latest" gets flagged. - For SLSA Level 2+: show me a signed image and walk me through verifying the signature. Live demonstration is common; canned answers get probed.
The good news: if you have implemented the tooling described in this article, all six questions are answerable in 30 minutes total.
The Common Failure Patterns
1. SBOMs that are out of date
The SBOM was generated once during a major release and not regenerated for patch releases. The fix is automation: regenerate on every build, not on a schedule.
2. SBOMs that miss vendored dependencies
If your application vendors dependencies (e.g., copying a library into your repo and modifying it), the SBOM tooling may not detect them. Either avoid vendoring or use SBOM tools that scan for embedded code (which is hard).
3. Signing keys stored on developer machines
SLSA Level 2 explicitly requires the build service to sign โ not developers. Sigstore's keyless signing eliminates this entirely (signatures are tied to OIDC identities, no long-lived keys).
4. Provenance that does not match the actual build
If your build process has a manual "edit this file before pushing" step, the provenance attestation won't match what was actually built. Eliminate manual steps from the build path.
5. Treating SBOM as a one-way deliverable
Generating SBOMs without doing anything with them misses the operational value. Scan your own SBOMs continuously; alert when new CVEs apply to dependencies you ship.
The Realistic Adoption Timeline
For an engineering organization starting from zero, the realistic timeline:
- Month 1: integrate SBOM generation into CI for highest-impact services. Stand up a SBOM repository (just an S3 bucket with versioned uploads is fine to start). Run vulnerability scans against generated SBOMs and triage findings.
- Month 2-3: add cosign image signing for all production-bound builds. Train teams on Sigstore concepts. Document the process.
- Month 4: add SLSA provenance generation. Verify provenance in your deployment pipeline (refuse to deploy images without valid provenance).
- Month 5-6: roll the same tooling out to remaining services. Add customer-facing SBOM delivery (typically a download endpoint or API).
- Month 7-12: harden โ move toward SLSA Level 3 for highest-criticality services, build supply-chain incident response runbooks, integrate vulnerability-feed ingestion with paging systems.
Most organizations should target SLSA Level 2 for most services and Level 3 for security-critical ones, by end of year one. Going beyond Level 3 is rare and rarely worth the additional friction.
Frequently Asked Questions
Do I need separate SBOMs for each environment?
One SBOM per build artifact (per container image, per binary). The same artifact deployed to dev, staging, and prod should have one SBOM that travels with it.
What about SBOMs for first-party code?
SBOMs include first-party code as components alongside third-party dependencies. The first-party entries typically include the git commit hash and the project name.
How do I handle dependencies of dependencies?
Modern SBOM tools include the full dependency tree by default. Each transitive dependency is its own component entry.
Is SBOM generation expensive?
For typical containers, syft takes 5-30 seconds. Adds negligible time to a CI pipeline. Not a performance concern.
What about open-source projects?
Major open-source projects (Kubernetes, PostgreSQL, nginx) all publish SBOMs alongside releases now. If a dependency you use does not publish an SBOM, you generate one yourself from the artifact you consume โ Syft handles this.
Does SLSA replace traditional security testing?
No. SLSA is about build-and-deliver integrity. You still need SAST, DAST, dependency scanning, penetration testing, etc. for the actual code-quality and runtime-security questions.
What about kernel modules and drivers?
The same principles apply. cosign-signed kernel modules are increasingly common; SBOM tooling for kernel components is less mature than for userspace but improving.
One Production Adoption Story
A 200-engineer SaaS company we know rolled out SBOM and SLSA Level 2 across their product portfolio over six months in late 2025. The triggering event was a Fortune 100 customer's procurement team requiring SLSA Level 2 attestation as a contract precondition. The team initially budgeted 6-8 engineering weeks; actual cost came in at roughly 12 engineering weeks plus another 6 weeks of process and documentation work. The biggest unexpected cost was teaching every team to interpret SBOM scan results and respond to vulnerability findings โ the tooling alone was the easy part. After the rollout: passed the customer's security review on first attempt, won the contract worth roughly $1.2M ARR, and avoided losing two other deals where security questionnaires had previously been blocking. Net assessment: rollout would have been worth doing on engineering merit alone, but the commercial benefit made it a clear ROI win.
Further Reading from the Dargslan Library
- Security & Hardening category โ supply-chain security, signing, and verification.
- DevOps & Cloud category โ CI/CD pipelines, build infrastructure, and release engineering.
- Free cheat sheet library โ printable references for syft, cosign, and SLSA verification commands.
- Dargslan eBook library โ comprehensive security and DevOps courses.
The Bottom Line
SBOM and SLSA are no longer optional in 2026 for any organization shipping software to enterprise or government customers. The tooling (syft, grype, cosign, Sigstore, SLSA generator) is mature, free, and integrates into existing CI/CD with a few hours of work. SLSA Level 2 is the right target for most organizations, achievable in months not years. The commercial benefit (winning enterprise deals) almost always exceeds the engineering investment. Start now if you have not already; by the time customer pressure forces the question, having the answer ready is dramatically less stressful than scrambling.