Skip to content

chore: pin the Gateway trust policy to v0.1.61 - #7

Merged
Marketen merged 1 commit into
mainfrom
chore/pin-gateway-v0.1.61
Sep 3, 2026
Merged

chore: pin the Gateway trust policy to v0.1.61#7
Marketen merged 1 commit into
mainfrom
chore/pin-gateway-v0.1.61

Conversation

@Marketen

@Marketen Marketen commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Repoints nexus-gateway-policy.json at Gateway v0.1.61 (893f4c9f), replacing the two previously pinned releases.

Why both old entries had to go

pinned revision problem
7207defa… (v0.1.58) commit no longer exists in the public repository
bda15a35… (v0.1.57) same, and predates the reproducible-build fix

deploy/nitro/verify-build.sh does git cat-file -e <revision> and then git archive <revision>, so a verifier could not check out either one. Both also predate dappnode-nexus-gateway#1, which fixed enclave builds being unreproducible — their measurements could not have been reproduced even with the source in hand.

Why only one release is listed

policy.go normally expects the outgoing and incoming releases to both be listed so clients do not fail closed during a rollout. That is not possible here: the outgoing release is not verifiable, and listing an uncheckable source_revision would hand verifiers a revision that fails by construction.

Clients therefore fail closed against any Gateway other than v0.1.61. That is the correct outcome while older measurements cannot be checked against source. v0.1.61 is already deployed to production, so there is no gap.

Verification

check result
Values taken programmatically from the cosign-signed manifest no transcription
cosign verify-blob against the release workflow identity Verified OK
Independent rebuild — verify-build.sh on published v0.1.61 PASS, all 3 PCRs
Strict LoadPolicy validation accepted
go build ./... and go test ./... pass
TestLiveAttestation vs nexus-api-tee.dappnode.com PASS
TestLiveGatewayCompletion vs production PASS

Live production attestation reports source_revision: 893f4c9f306707b83f3b41782f25eb05adbc4f30, matching this policy.

pcr0  61e070dd4c7e2956affe2684413ccaa5dac8a6fb0f55ca144d9671ce578e72464e30eaf09226a3073f0a3d03a2f809c1
pcr1  4b4d5b3661b3efc12920900c80e126e4ce783c522de6c02a2a5bf7af3a2b9327b86776f188e4be1c1c404a129dbda493
pcr2  93dabb78d8939fe34f913421bfe2423f2cff29f30504a01c9ce9b1ee5eb3334188f43b87e569daf61370d4b0a317ba69

🤖 Generated with Claude Code

The two pinned releases were built from commits that no longer exist in
the public repository, so a verifier following deploy/nitro/verify-build.sh
could not check out either revision. Both also predate the fix for
unreproducible enclave builds, so their measurements could not be
reproduced even with the source in hand.

Pin v0.1.61 instead. It is the first release whose published measurements
have been independently reproduced from public source: verify-build.sh
reports PASS for 893f4c9f, and the signed manifest verifies against the
release workflow's Sigstore identity.

Only one release is listed. The usual rollout window, where the outgoing
and incoming releases are both accepted, is not available here because the
outgoing release is not verifiable. Clients therefore fail closed against
any Gateway other than v0.1.61, which is the correct outcome while the
older measurements cannot be checked against source.

Verified against production: TestLiveAttestation and
TestLiveGatewayCompletion both pass against nexus-api-tee.dappnode.com
running v0.1.61.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Marketen
Marketen merged commit e280072 into main Sep 3, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant