Repository navigation
Check weekly that release runs, files, Rekor entries and images match - #159
Merged
Merged
Conversation
A new weekly workflow, release-integrity.yml, compares the runs of release.yml and container-image.yml with the published releases in both directions, checks every release file against SHA256SUMS, looks up every signed file in Rekor by its SHA-256 and checks that its certificate names release.yml at the release's tag, commit and run, and verifies each container image signature with cosign. A mismatch, or anything it cannot read, fails the run and opens or updates an issue labelled release-integrity; a pass closes it. docs/release-signing.md describes the check, what it cannot see and what to do when it alerts, and puts the Sigstore and SLSA item back in the list of who may change the signing identities. CONTRIBUTING and the risk assessment list the check. Refs #152 Signed-off-by: d0ubl3g <48954024+d0ubl3g@users.noreply.github.com>
Rekor accepts any certificate in a hashedrekord entry, so an entry with a certificate that claims the release identity could make a file look signed, or raise a false mismatch. The integrity check now counts an entry only if Rekor's signed entry timestamp verifies with Rekor's key and its certificate chains to Sigstore's certificate authority at the time it was logged, both from the trust root that cosign initialize fetches through TUF. Tests use a public fixture of that trust root and of the v0.4.1 entry. Refs #152 Signed-off-by: d0ubl3g <48954024+d0ubl3g@users.noreply.github.com>
This was referenced Oct 12, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #152, which closes when this reaches
main. It implements the criteria as changed on 2026-10-12. Monitoring the log for every entry made with the identity is #158.What it checks
.github/scripts/release-integrity.pyuses only the Python standard library and reads only public data and the run history. It checks, in both directions:release.yml, and every run ofcontainer-image.yml, must be for a published release at its tag's commit. Manualrelease.ymlruns are dry runs and are skipped.release.ymlrun at that commit, and from 0.4.0 a successful image run.SHA256SUMSline. Besides the listed files, only bundles and provenance may be attached..sigstore.jsonbundle is looked up in Rekor by its SHA-256, and the Fulcio certificate is parsed with a small DER reader.release.yml@refs/tags/<tag>, the GitHub Actions issuer, the tag's commit (OID …1.3) and a successful run of that tag (OID …1.21).install.shin 0.3.0 and 0.3.1, is signed by both, and that is accepted.cosign verifyruns on its digest againstcontainer-image.yml@refs/tags/<tag>with triggerrelease.Anything that cannot be read fails, never passes.
ACCEPTED_RUNSholds known exceptions with reasons, and is empty.The workflow
.github/workflows/release-integrity.ymlruns weekly, on demand, and on pull requests that change it.contents: read,actions: readandissues: write. Issues are not touched on a pull request.cosign-installer.release-integrity, and a pass closes it. It also reports a gap since the previous run, asrepo-freshnessdoes.Docs
docs/release-signing.md:CONTRIBUTING.md(security testing table) anddocs/risk-assessment.md(T9) list the check.Checks run
release-integrity-test.py: 12 tests pass. The certificate fixture is the public Rekor entry of 0.4.1'sSHA256SUMS.release.ymlruns and 2 image runs;