Should release artifacts have an independent signing or attestation identity? #1032
Replies: 1 comment
|
Thanks for writing this up. We went through the same decision in another project, so here is what we chose and why, in case it is useful. It is one data point, not a recommendation to copy. What we did. In Data Boar we kept per-asset digests and added native GitHub build provenance on tagged releases: The principle behind it is the one this discussion names: a verifier must not draw its trust from the artifact it verifies. We wrote that down as ADR 0088. The sibling On your questions, from that experience:
For context on how we work: that project runs CodeQL, Semgrep, gitleaks, zizmor and OpenSSF Scorecard in CI with SHA-pinned actions (ADR 0005), and the same checks run locally before anything is pushed. Happy to help prototype the advisory step if the team decides to go this way. |
Uh oh!
There was an error while loading. Please reload this page.
Problem to decide
Zero's release pipeline produces per-asset SHA-256 files and the updater verifies the expected filename and digest before extraction. These are strong corruption and mismatch controls. Because the archive and its
.sha256sibling are published through the same GitHub release authority, replacement of both by an actor controlling that release channel still yields a self-consistent pair.This is not a claim that current checksum verification is broken or that a release has been compromised. It is a request to decide whether Zero's threat model should include an independent artifact-authenticity identity.
Audit context: finding
SEC-06atmainrevision1b5db1765672820caac1684b168c9898b5ba3593.Relevant boundaries:
internal/update/apply.godownloads archive and checksum and verifies before extraction.internal/release/release.gocreates and verifies the digest files..github/workflows/release-artifacts.ymlpublishes GitHub assets and uses npm OIDC/provenance behind a reviewed environment.Proposed invariant
Keep SHA-256 sibling assets for corruption detection, and—if maintainers want stronger release-channel compromise resistance—verify an independently identifiable signature or attestation before extraction/install.
The verifier should pin an expected repository/workflow or signing identity rather than accepting any signature bundled beside the archive.
Design questions
Acceptance criteria for any eventual implementation
Full audit proposal: https://github.com/PierrunoYT/zero/blob/audit/codebase-audit-2026-09-08/docs/audit/SECURITY_AUDIT.md#sec-06--sibling-checksums-do-not-independently-authenticate-releases
All reactions