Skip to content

Release attestations cannot be verified with standard Sigstore tooling (gh attestation verify, sigstore-python) #3

Description

Summary

The .sigstore.json attestation bundles attached to releases (e.g. v1.15.0, artifact sfw-linux-x86_64) cannot be successfully verified using either the GitHub CLI (gh attestation verify) or the reference sigstore-python client, due to two separate issues. This makes it effectively impossible for an end user to verify the authenticity of downloaded binaries using standard tooling, which somewhat defeats the purpose of shipping attestations at all.

Environment

  • gh version: 2.49.0+ (attestation verify supported)
  • sigstore-python version: 4.5.0
  • Artifact: sfw-linux-x86_64 from SocketDev/firewall-release v1.15.0
  • Attestation bundle: SocketDev-firewall-release-attestation-37390311.sigstore.json

Issue 1 — gh attestation verify cannot construct a matching policy

The attestation's signing certificate has a Subject Alternative Name of https://dotcom.releases.github.com — this indicates it was signed via GitHub's internal release-signing infrastructure rather than a standard GitHub Actions OIDC workflow identity (which would look like https://github.com/OWNER/REPO/.github/workflows/...).

gh attestation verify requires --owner or --repo to construct its verification policy.

There does not appear to be a gh attestation verify flag that allows specifying a custom --cert-identity independent of --owner/--repo — attempting to omit both returns:

This effectively makes gh attestation verify unusable for this bundle, regardless of how the identity flags are constructed.


Issue 2 — Bundle omits tlogEntries, which sigstore-python requires despite the spec not mandating it

The bundle contains only an RFC3161 timestamp (rfc3161Timestamps) and no Rekor transparency log entry (tlogEntries). Per the Sigstore bundle spec, transparency log entries are not required — RFC3161 timestamp-only bundles are valid.

However, sigstore-python 4.5.0 fails to parse the bundle at all:

```
sigstore.models.InvalidBundle: failed to load bundle: 1 validation error for Bundle
verificationMaterial.tlogEntries
Field required [type=missing, input_value={'timestampVerificationDa...AllbdnorYRTm9mxkZaQ=='}}, input_type=dict]
```

This appears to be a sigstore-python bug/limitation — the Pydantic model marks tlogEntries as a required field even though the spec treats it as optional when RFC3161 timestamps are present.


Impact

As it stands, there is no supported, documented way for a user to verify these release attestations using standard Sigstore tooling. Given that the entire point of shipping attestations is to let users establish trust in the binary they're running, this is a meaningful gap — especially notable for a security-focused product.

Happy to provide the full bundle JSON or additional logs if useful.

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