Skip to content

fix: skip registry key check for keyless (Sigstore/Fulcio) attestations#454

Merged
wraithgar merged 1 commit intonpm:mainfrom
ajayk:keyless-attesation
Feb 24, 2026
Merged

fix: skip registry key check for keyless (Sigstore/Fulcio) attestations#454
wraithgar merged 1 commit intonpm:mainfrom
ajayk:keyless-attesation

Conversation

@ajayk
Copy link
Contributor

@ajayk ajayk commented Feb 24, 2026

fix: skip registry key check for keyless (Sigstore/Fulcio) attestations

Attestations signed with keyless Sigstore/Fulcio have no keyid and
embed the signing certificate directly in the bundle. The existing
guard unconditionally required matching registry keys, causing
EMISSINGSIGNATUREKEY for registries that only use keyless signing.

Only throw when there are keyed attestations that can't be matched.

References

@ajayk ajayk requested a review from a team as a code owner February 24, 2026 00:42
  Attestations signed with keyless Sigstore/Fulcio have no keyid and
  embed the signing certificate directly in the bundle. The existing
  guard unconditionally required matching registry keys, causing
  EMISSINGSIGNATUREKEY for registries that only use keyless signing.

  Only throw when there are keyed attestations that can't be matched.
@ajayk ajayk force-pushed the keyless-attesation branch from d5a8720 to 0501948 Compare February 24, 2026 16:40
Copy link
Contributor

@bdehamer bdehamer left a comment

Choose a reason for hiding this comment

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

This seems reasonable. No need to throw an error about missing keys if there are no attestations which require keys for verification.

bdehamer

This comment was marked as duplicate.

@wraithgar wraithgar merged commit 8b8ea3b into npm:main Feb 24, 2026
13 checks passed
@github-actions github-actions bot mentioned this pull request Feb 24, 2026
wraithgar pushed a commit that referenced this pull request Feb 24, 2026
🤖 I have created a release *beep* *boop*
---


## [21.4.0](v21.3.1...v21.4.0)
(2026-02-24)
### Features
*
[`6912f24`](6912f24)
[#451](#451) add allowRegistry option
(#451) (@wraithgar)
### Bug Fixes
*
[`ab37bc1`](ab37bc1)
[#452](#452) prevent path duplication
in attestation URL for registries with … (#452) (@ajayk)
*
[`ab37bc1`](ab37bc1)
[#452](#452) prevent path duplication
in attestation URL for registries with (@ajayk)
*
[`8b8ea3b`](8b8ea3b)
[#454](#454) skip registry key check
for keyless (Sigstore/Fulcio) attestations (#454) (@ajayk)
*
[`8b8ea3b`](8b8ea3b)
[#454](#454) skip registry key check
for keyless (Sigstore/Fulcio) attestations (@ajayk)
### Chores
*
[`0dfd1cd`](0dfd1cd)
[#456](#456) remove git config from
tests (#456) (@wraithgar)

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
wraithgar pushed a commit to npm/cli that referenced this pull request Feb 24, 2026
npm audit signatures fails when a registry only uses keyless
(Sigstore/Fulcio) attestations and doesn't provide registry signing
keys. The[ auditedWithKeysCount guard in verify-signatures.js
](https://github.com/npm/cli/blob/latest/lib/utils/verify-signatures.js#L48)
treats any registry without keys as unsupported, even though keyless
attestations don't need registry keys at all -- the signing certificate
is embedded directly in the bundle and verified through Sigstore's TUF
root of trust.
 
This updates the check to also accept verified keyless attestations as a
valid audit result, so registries that exclusively use Fulcio-based
signing (like Chainguard) work correctly with npm audit signatures.

  Before this change:
npm error found no dependencies to audit that were installed from a
supported registry

  After:
  audited 1 package in 1s

  1 package has a verified attestation

This change works together with the corresponding pacote fixes
([pacote/pull/454](npm/pacote#454))
([pacote/pull/452](npm/pacote#452))
which allows keyless attestation bundles to pass the registry key
matching check.
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