skip to content

Your organization is debating whether to require SLSA build-provenance attestations, cryptographically verified via sigstore/cosign, for every third-party dependency before it's allowed into any CI pipeline. What does verifying provenance actually protect against that an SBOM alone doesn't, and what's a legitimate reason to not make it mandatory everywhere immediately?

level: principalimportance: nice to knowfreq 25%

answer

  1. provenance ≠ SBOM: chain-of-custody vs static inventory
  2. SLSA levels, hermetic/reproducible builds
  3. sigstore/cosign: short-lived OIDC-bound certs, no long-lived keys
  4. SolarWinds = build-pipeline injection, not source compromise
  5. adoption gap → phase rollout by risk, don't gate everything at once

basics

~20 s

Provenance is proof of exactly how and where a piece of software was built — which source commit, which build system, run by whom — cryptographically signed so it can't be faked. It catches attacks where the published artifact doesn't actually match its claimed source, which a simple inventory list can't detect. Requiring it everywhere at once can be impractical because most packages don't provide it yet.

solid answer

~60 s

An SBOM tells you what components are in a build; it doesn't prove the published artifact was actually built from the source code it claims to be, by a build system that wasn't tampered with. Provenance attestation closes that gap: frameworks like SLSA (Supply-chain Levels for Software Artifacts) define graded requirements — from basic build-process documentation up to hermetic, reproducible builds on tamper-resistant infrastructure — and tools like sigstore/cosign let a build system cryptographically sign a statement of exactly which source, commit, and build steps produced a given artifact, verifiable without the consumer managing private keys themselves (sigstore uses short-lived, OIDC-identity-bound certificates rather than long-lived keys). This defends against attacks where the artifact itself is swapped or tampered with post-build, or built from unauthorized source, which an SBOM's static inventory can't detect since it just describes claimed contents. A principal engineer might push back on immediate org-wide mandates because most of the open-source ecosystem doesn't yet publish SLSA-level provenance, so a hard requirement would block legitimate, safe dependencies wholesale; a phased rollout starting with the highest-risk/highest-privilege dependencies is usually the pragmatic path.

go deeper

for a junior

Not generally expected to know this topic in depth; at most recognizes that 'provenance' means proof of where software came from, distinct from just listing its contents.

for a middle

Can articulate that provenance is about verifying the build/publish chain, not just inventorying what's inside, though may not know SLSA levels or sigstore mechanics specifically.

for a senior

Understands SLSA levels conceptually and sigstore's role in verifiable signing, and can explain why a compromised build pipeline (not just compromised source) is a distinct threat provenance addresses.

for a principal

Makes and defends the organizational adoption trade-off — phased rollout by risk tier, exception process, and the recognition that their own org's build systems need to produce trustworthy provenance too, not just consume it from vendors.

## Provenance against inventory Provenance, in the supply-chain security sense, is a verifiable record of exactly how a specific software artifact came to exist: which source repository and commit it was built from, which build system executed the build, what build steps ran, and ideally that the build environment itself was isolated and reproducible. This is a categorically different guarantee from an SBOM — they answer different questions. | Guarantee | The question it answers | |---|---| | **SBOM** | 'What components does this artifact claim to contain' — it's a static inventory, generated either from the artifact itself or from build metadata, and it's only as trustworthy as the process that generated it. | | **Provenance** | A harder one: 'is the artifact I'm about to install actually what it claims to be, built the way it claims to have been built, by a process I can verify wasn't tampered with.' | An SBOM can be entirely accurate and still describe an artifact that was swapped after the fact, built from unauthorized source, or produced by a compromised build pipeline that injected something the SBOM generator never saw. ## Grading and signing the claim The dominant framework for grading provenance maturity is **SLSA** (Supply-chain Levels for Software Artifacts, originally a Google-incubated framework now under the OpenSSF), which defines a set of increasingly strict levels: - simply documenting the build process - up through provenance being generated automatically by a trusted build platform - up to the highest levels requiring hermetic (no unexpected network access or inputs during build) and reproducible builds where independent parties can rebuild the artifact and confirm the result The mechanism that makes a provenance claim actually trustworthy rather than just another unverifiable metadata file is **cryptographic signing**: sigstore (an OpenSSF project, with `cosign` as its primary CLI tool) lets a build system sign a provenance statement (following the in-toto attestation format) using short-lived certificates bound to a verified identity — typically the CI system's OIDC identity (e.g., 'this was signed by GitHub Actions running workflow X in repo Y') — rather than requiring every publisher to generate and safeguard a long-lived private key, which was historically a major adoption barrier for artifact signing. A consumer can then verify, before installing a dependency, that its provenance statement is signed by an identity they trust and that the statement matches the artifact's hash exactly. ## What it actually defends against The value of this defends specifically against attacks that operate after or around the legitimate build process rather than within the source code itself: - **a compromised CI pipeline** that injects malicious steps without touching the source repository — the class of attack behind the 2020 SolarWinds compromise, where the build system itself, not the public source, was the injection point - **an artifact published to a registry that doesn't actually correspond to the source it claims to** — registry-side tampering, or a compromised publish credential pushing a different binary than what was reviewed - **a build that silently pulled in unexpected, unpinned inputs** during compilation None of these show up in code review of the source repository or in a plain SBOM, because both examine claimed contents or claimed source — provenance is what lets a consumer verify the chain of custody between source and published artifact. ## The coverage trade-off The realistic trade-off, and the reason a principal engineer might reasonably resist making this mandatory everywhere immediately, is **coverage**. As of the mid-2020s, only a minority of the open-source ecosystem publishes SLSA-level provenance or sigstore-verifiable attestations — major ecosystems and high-profile projects have adopted it (npm has integrated sigstore-based provenance for package publishing since 2023, and PyPI has piloted similar work), but the long tail of smaller, still widely-used packages generally hasn't. A hard organization-wide gate requiring verified provenance for every dependency, enforced immediately, would in practice block a large fraction of legitimate, low-risk dependencies that simply haven't adopted the tooling yet — not because they're unsafe, but because the ecosystem's adoption curve hasn't caught up to the standard. That creates real velocity cost and generates constant exception requests, which tends to erode the policy's credibility (teams route around a control that blocks their work too often) faster than it improves security. ## The phased, risk-weighted rollout The pragmatic response a principal engineer typically pushes toward is a phased, risk-weighted rollout rather than a blanket mandate: 1. **Require verified provenance first for the highest-privilege, highest-blast-radius dependencies** — build tools, CI actions themselves, packages with install-time script execution, anything touching credentials or the deploy pipeline. 2. **Allowing an exception path with compensating controls** (manual review, pinning by hash, SCA monitoring) for the long tail of lower-risk dependencies that don't yet support it. This also requires investing in verification infrastructure and defining what 'trusted identity' means for the org's own CI, which itself needs to publish trustworthy provenance for internally-built artifacts, not just consume it for third-party ones — a nontrivial, ongoing program rather than a one-time policy change, which is itself part of why immediate, universal enforcement is rarely the right first move.

  • Why does sigstore's use of short-lived, OIDC-bound certificates matter compared to traditional long-lived signing keys?
    Long-lived private keys are a durable secret that has to be generated, distributed, rotated, and protected forever, and a single leak compromises every artifact ever signed with it. Short-lived certificates tied to a verified CI identity (like 'this specific GitHub Actions workflow run') exist only for the duration of that signing event, drastically shrinking the window and blast radius of a key compromise, and removing the operational burden of key management from individual maintainers.
  • What kind of attack does provenance verification catch that a thorough source-code review would miss?
    An attack that happens between the reviewed source and the published artifact — for example, a compromised build pipeline injecting a malicious step, or a registry publish that doesn't actually correspond to the reviewed commit. Source review only examines what's in the repository; it has no visibility into whether the artifact a consumer actually downloads was produced faithfully from that exact source.
  • If most dependencies don't yet support SLSA provenance, is there any value in verifying it for the ones that do?
    Yes — verifying provenance where it's available still closes a real gap for those specific dependencies, and prioritizing the highest-risk, highest-privilege ones (build tools, CI actions, credential-touching packages) captures most of the risk reduction without waiting for full ecosystem adoption. Partial coverage weighted toward the biggest blast-radius dependencies is more valuable than an all-or-nothing policy that either blocks everything or is abandoned.

An SBOM is like a shipping manifest listing what's supposedly in the container; provenance is the tamper-evident seal plus a verified chain-of-custody log proving the container was packed at the claimed factory, by the claimed process, and never opened in transit — the manifest can be perfectly accurate and the seal still be the only thing that catches a swap.

saying these in an interview costs you the question

  • conflates provenance with SBOM as the same thing
  • can't explain what SLSA levels actually grade (build process integrity, not vulnerability count)
  • assumes mandating it everywhere immediately has no real cost
  • doesn't know sigstore avoids long-lived key management
  • can't name a concrete attack (e.g., build-pipeline compromise) that provenance specifically catches versus source review

context