Chapter 31Lesson 04~195 minutes

Software Supply-Chain Security, SBOMs, Signatures, Provenance, Trusted Agents, and Dependency Controls: Diagnostics, Failure Modes, Security, and Performance

Preserve the first failure, identify which claim failed, and repair the narrowest layer instead of rerunning until green.

DiagnosticsPolicyTamperingIdentityAdvisoriesPerformance

Learning objectives

  • Diagnose supply-chain failures by claim layer instead of by Jenkins build color.
  • Interpret tamper, signer-identity and provenance failures without hiding the original evidence.
  • Distinguish an SBOM generation success from vulnerability and policy results.
  • Recognize how plugin/tool advisories become part of builder trust.
  • Measure SBOM/signing overhead before tuning or removing controls.

1. Evidence-first diagnostic sequence

  1. Preserve job full name, build number/URL, queue ID, source SHA and the first failing log/evidence files.
  2. Confirm Jenkins core/Java/plugin baseline and current security advisories.
  3. Confirm Jenkinsfile and Shared Library revisions and build cause.
  4. Inspect queue reason, label eligibility, agent identity, Remoting/JVM and workspace.
  5. Confirm tool versions, pinned image/tool checksums and dependency lock state.
  6. Recompute the artifact digest and compare it with the signature/provenance subject.
  7. Inspect SBOM schema/generator output independently from vulnerability/policy results.
  8. Verify the expected signer/builder identity—not just cryptographic validity.
  9. Check repository/promotion state only after local artifact/evidence consistency is established.
  10. Apply the least destructive correction and rerun only the smallest safe scope.

2. Failure map

Symptom Likely layer Evidence to preserve first
SBOM exists but policy says vulnerable Scanner/advisory/policy, not SBOM generation SBOM digest, advisory DB timestamp/version, scanner result
Signature verifies with wrong signer Verification policy Bundle/cert/key fingerprint and exact verify flags
Signature fails after copy/edit Artifact integrity Original/tampered digests and verify stderr
Provenance names wrong digest Provenance generation or artifact selection Statement subject, artifact digest, build/source IDs
Release differs with same source SHA Floating deps/tools or nondeterministic build Lockfile, image/tool versions, resolved deps, environment
Signing job exposed to PR code Trust/scheduling/credentials Branch-source trust, agent label policy, credential scope

3. Intentionally broken example: verify “any valid signature”

The following policy is broken conceptually:

# BROKEN POLICY IDEA — do not use as a production gate
cosign verify-blob artifact.bin --bundle artifact.sigstore.json

A verifier that does not constrain the expected public key or keyless certificate identity/issuer can accept a signature that is valid cryptographically but irrelevant to your release policy. For key-based verification, point to the expected trusted public key and manage its fingerprint. For keyless verification, constrain both identity and issuer.

# Keyless policy shape — example identity only
cosign verify-blob artifact.bin \
  --bundle artifact.sigstore.json \
  --certificate-identity='release-bot@example.invalid' \
  --certificate-oidc-issuer='https://issuer.example.invalid'

The example domain is deliberately non-production. A real CI identity must match the provider’s documented identity semantics exactly.

4. Failure: “SBOM generated” interpreted as “safe”

Generation success proves that the tool emitted a document. Vulnerability analysis needs an advisory source and matcher; license policy needs license evidence and organizational rules; dependency approval may need provenance or repository admission controls. Preserve the original SBOM and its digest before running downstream analysis so you can prove which inventory the policy evaluated.

5. Failure: signed mutable name instead of immutable subject

Signing a release note that says image: app:prod is weaker than binding verification to the immutable image/artifact digest. Tags and filenames are routing conveniences; policy should resolve them to immutable identity and ensure the signature/provenance subject matches.

6. Failure: provenance generated on an untrusted agent

A JSON statement can say anything. If repository-controlled code on an untrusted agent can choose builder.id, source SHA or subject digest and then sign with release authority, the provenance is self-asserted. Separate build orchestration from trusted evidence generation, or use a build platform mechanism that can emit provenance outside the workload’s control.

7. Plugin/tool advisories are builder evidence

On 16 September 2026 Jenkins published an advisory affecting multiple plugins including OWASP Dependency-Check, Pipeline: Groovy Libraries and Script Security. This matters even if Chapter 31 does not require those plugins: a trusted builder’s controller/plugin baseline is part of its transitive trust. Record the plugin catalog used for release jobs and review advisories before declaring the builder trusted.

Likewise, Cosign 3.1.3 was released with a fix for a legacy-bundle verification bypass. Pinning a version without watching security releases is not enough; governance includes updating the pinned baseline after testing.

8. Performance: measure before weakening evidence

SBOM generation can be I/O-heavy on large workspaces/images. Signing is usually small compared with compilation, but transparency/identity services add network latency. Before adding executors or disabling evidence, measure stage duration, artifact size, SBOM size, cache behavior, repository transfer time and queue wait separately.

Metric Why it matters Safer tuning idea
SBOM scan duration Shows filesystem/package-analysis cost. Scan the intended artifact/image instead of an unnecessarily huge workspace.
Queue wait on trusted builder Shows scarce privileged capacity. Keep signing stages short; separate build from signing where safe.
Evidence size Affects archive/repository I/O and retention. Compress/retain by policy; do not delete the only provenance/SBOM copy.
External verify latency Shows network/identity/transparency dependency. Use bounded timeouts and preserve failure state; do not blind-retry side effects.

9. Repair checklist

  • Never regenerate evidence before preserving the failed evidence packet.
  • Do not sign a rebuilt artifact merely to “make verification pass.”
  • Do not disable identity constraints or --check-claims-style protections to make a gate green.
  • Do not expose signing keys to fork/PR builds.
  • Do not delete by “latest”; guard exact build, digest, repository coordinate and lab namespace.
Next

Checkpoint: prove both success and rejection

Lesson 5 packages the chapter into a reproducible lab that captures a complete evidence packet and demonstrates a tampered artifact is rejected.

Knowledge check

Answer before revealing the explanation.

1. A build has a valid SBOM but a vulnerability scanner finds a critical issue. Is the SBOM invalid?

2. Why is relaxing signer-identity constraints a dangerous “fix”?

3. A rerun produces a new digest from the same source SHA. What should you inspect first?

4. Why does a recent Script Security or Shared Library plugin advisory matter to supply-chain trust?

Official references and version notes

Use primary documentation because supply-chain formats, signing defaults and Jenkins security guidance evolve.

Keep the academy open

Support free, practical DevOps education.

Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0Send only Ethereum/ERC-20 compatible assets to this address.