CVE-2025-24976
Distribution's token authentication allows to inject an untrusted signing key in a JWT
Impact
### Impact Systems running registry version > `3.0.0-beta.1` with token authentication enabled. ### Patches Update to at least `v3.0.0-rc.3` ### Workarounds There is no way to work around this issue without patching if your system requires token authentication. ### References The issue lies in how the JWK verification is performed. When a JWT contains a JWK header without a certificate chain, the code only checks if the KeyID (`kid`) matches one of the trusted keys, but doesn't verify that the actual key material matches. Here's the problematic flow: 1. An attacker generates their own key pair 2. They create a JWT and include their public key in the JWK header 3. They set the `kid` in the JWK to match one of the trusted keys' IDs (which they could potentially discover) 4. They sign the JWT with their private key 5. The registry only checks if the `kid` exists in the trusted keys map but then uses the attacker's public key from the JWK to verify the signature
Affected packages
| Ecosystem | Package | Affected | Fixed in |
|---|---|---|---|
| go | github.com/distribution/distribution/v3 | > 3.0.0-beta.1, < 3.0.0-rc.3 | 3.0.0-rc.3 |
Weakness classification
References
- NVD record
- CVE.org record
- GitHub advisory
- https://github.com/distribution/distribution/commit/f4a500caf68169dccb0b54cb90523e68ee1ac2be
- https://github.com/distribution/distribution/security/advisories/GHSA-phw4-mc57-4hwc
- https://github.com/advisories/GHSA-phw4-mc57-4hwc
- https://nvd.nist.gov/vuln/detail/CVE-2025-24976