Skip to content

gh attestation verify fails for v5.45.8 Windows release (both --repo and --owner policies) #1154

Description

@zer0-kn0wledge

Summary
gh attestation verify fails to validate the release attestation bundle
for the Windows x86_64 build of v5.45.8, using both --repo railwayapp/cli
and the looser --owner railwayapp policy. Verifying online (without
--bundle, letting gh query GitHub's attestation API directly) also fails
with a 404 — no attestation found for the artifact's digest.

Environment

  • gh version: gh version 2.92.0 (2026-04-28)
  • OS: Windows 11, PowerShell
  • Architecture: x86_64/AMD64

Artifact

  • File: railway-v5.45.8-x86_64-pc-windows-msvc.zip
  • Attestation bundle: railwayapp-cli-attestation-43872608.sigstore.json
    (downloaded from the same release page)
  • Digest: sha256:3983807554909567d4c24a39ab470119b55ed972161ecd245dfdaeab210ca053
  • Attestation predicate type (read from the bundle directly):
    https://in-toto.io/attestation/release/v0.2

Steps to reproduce

  1. Online verification (no local bundle):
    gh attestation verify railway-v5.45.8-x86_64-pc-windows-msvc.zip --repo railwayapp/cli

    Result: HTTP 404 Not Found — no attestations found via the GitHub API
    for this digest.

  2. Offline verification against the bundle shipped on the release page,
    scoped to the exact repo:
    gh attestation verify railway-v5.45.8-x86_64-pc-windows-msvc.zip --bundle railwayapp-cli-attestation-43872608.sigstore.json --repo railwayapp/cli --predicate-type "https://in-toto.io/attestation/release/v0.2"

    Result:
    Attempting verification against issuer "GitHub, Inc."
    Failed to verify against issuer "GitHub, Inc."
    ✗ Sigstore verification failed
    Error: verifying with issuer "GitHub, Inc."

  3. Same command, loosened to organization-level matching only:
    gh attestation verify railway-v5.45.8-x86_64-pc-windows-msvc.zip --bundle railwayapp-cli-attestation-43872608.sigstore.json --owner railwayapp --predicate-type "https://in-toto.io/attestation/release/v0.2"

    Same failure — fails even against the broad
    ^https://github.com/railwayapp/ SAN regex, not just the
    repo-specific one.

Expected behavior
Either the online API should have a record of this artifact's attestation,
or the offline bundle shipped alongside the release should verify
successfully against the railwayapp org/repo identity.

Question
Is the release signing pipeline (GoReleaser-based, given the predicate
type) issuing certificates through a Fulcio instance that isn't one of
the two gh attestation verify checks against (sigstore.dev public-good
and GitHub's own)? If so, is there a documented way to verify these
release artifacts that actually works — e.g. a specific --cert-oidc-issuer
value, or is cosign verify-blob with different flags the intended path
for these bundles?

I want to confirm this release is legitimate before running it, and
would appreciate guidance on the correct verification method for your
release artifacts specifically.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions