Skip to content

fix: prevent path duplication in attestation URL for registries with …#452

Merged
wraithgar merged 1 commit intonpm:mainfrom
ajayk:curtom-registry-attestaion-path
Feb 24, 2026
Merged

fix: prevent path duplication in attestation URL for registries with …#452
wraithgar merged 1 commit intonpm:mainfrom
ajayk:curtom-registry-attestaion-path

Conversation

@ajayk
Copy link
Contributor

@ajayk ajayk commented Feb 23, 2026

fix: prevent path duplication in attestation URL for registries with path components

When a custom registry URL includes a path (e.g. https://example.com/javascript),
the attestation URL was incorrectly constructed by concatenating the full registry
URL with the full pathname from the attestation URL, causing the path to be
duplicated (e.g. /javascript/javascript/-/npm/v1/attestations/...).

Use the URL constructor to correctly resolve the pathname against the registry
origin, matching the existing pattern in lib/remote.js.

References

Fixes #450

…path components

  When a custom registry URL includes a path (e.g. https://example.com/javascript),
  the attestation URL was incorrectly constructed by concatenating the full registry
  URL with the full pathname from the attestation URL, causing the path to be
  duplicated (e.g. /javascript/javascript/-/npm/v1/attestations/...).

  Use the URL constructor to correctly resolve the pathname against the registry
  origin, matching the existing pattern in lib/remote.js.
@wraithgar wraithgar merged commit ab37bc1 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.

Custom registry with path component causes path duplication in attestation URL

2 participants