Skip to content

Add attestation metadata analysis - #11

Open
andrew wants to merge 3 commits into
mainfrom
attestation-analysis
Open

Add attestation metadata analysis#11
andrew wants to merge 3 commits into
mainfrom
attestation-analysis

Conversation

@andrew

@andrew andrew commented Nov 12, 2025

Copy link
Copy Markdown
Collaborator

Analysis of attestation and provenance support across npm, PyPI, Maven Central, RubyGems, Homebrew, and other package ecosystems.

@steiza steiza left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is great!

I only had time to review 4. Data Format Analysis in detail, but I thought I'd leave some minor feedback / context.


- **Data type**: JSON attestation bundles
- **Standard**: in-toto attestation format (https://in-toto.io/Statement/v0.1)
- **Provenance level**: SLSA v0.2 provenance predicates

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor: it might be good to list here the supported predicates, like we do for PyPI below. The attestation API endpoint listed below returns two Sigstore bundles with different predicate types:

  • https://slsa.dev/provenance/v1 (probably for more recent publishes - earlier ones might have been SLSA v0.2)
  • https://github.com/npm/attestation/tree/main/specs/publish/v0.1 which is similar in content to the PyPI Publish attestations, but different in stated purpose (this attestation is present on any npm publish that used provenance, which included several years before npm supported trusted publishing, so unlike PyPI it does not indicate trusted publishing was used).

The npm publish attestation is intended to be a public record independent of npmjs.com (since it appears in Sigstore's public good Rekor) that lists out exactly what a given package at a given version should contain. This makes it so that by compromising npmjs.com you can't modify what a previous releases contained, because you'd also at least need a way to forge a Rekor record with an inclusion proof from when the package was published. I hesitate to call this "immutability" by itself, but it does provide a much stronger integrity check of the package contents.

- **Standard**: in-toto Attestation Framework
- **Supported predicates**:
- SLSA Provenance (v1.0 specification) - for build provenance claims
- PyPI Publish attestations (v1) - confirms publishing via Trusted Publisher (predicate type: `https://docs.pypi.org/attestations/publish/v1`)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not mentioned in PyPI's docs, but like I mentioned above for the npm publish attestation, one of the really valuable things this attestation does (in my opinion) is list out exactly what a specific package at a specific version contains, providing integrity checks that live outside of PyPI, which makes it much more tamper-resistant.

- **Data type**: Sigstore bundles (`.sigstore.json` files)
- **Standard**: Sigstore bundle format
- **Provenance level**: Sigstore signatures supplement PGP signatures (both currently supported)
- **Signature format**: Sigstore signatures using Fulcio CA and Rekor transparency log

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a really interesting one, because the Fulcio certificate contains in its OIDs enough information to construct a minimal SLSA provenance, but (as you note) the Sigstore bundle just contains a signature, not an in-toto statement with a predicate type like https://slsa.dev/provenance/v1.

- `sigstore-ruby` gem (pure-Ruby implementation of Sigstore client spec)
- Command: `gem sigstore_cosign_verify_bundle` with certificate identity and OIDC issuer validation
- Third-party verification: DataDog's `go-attestations-verifier` library
- **Adoption tracking**: "Are We Attested Yet?" tracker at https://segiddins.github.io/are-we-attested-yet/

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Python also has adoption tracking - https://trailofbits.github.io/are-we-pep740-yet/ - that's what inspired this tracker!

@andrew
andrew requested a review from sdavtaker December 17, 2025 12:35

### Java Ecosystem — Maven Central

**Attestation Information Available**: Yes, via Sigstore provenance (shipped August 2024)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Currently, there is no support for attestation, only Sigstore signatures are supported.

In-toto attestations could theoretically be published as additional artifacts (e.g. like in the Build your own SLSA 3+ provenance builder on GitHub Actions), but I didn't find any evidence of this method being actually used.

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.

3 participants