CVE-2025-65945Auth0 node-jws HS256 verification bypass via secret lookup
What broke
auth0/node-jws below 3.2.3 and 4.0.1 verified HS256 JWTs incorrectly when the secret was resolved through a user-controlled lookup. An attacker who can influence which secret is chosen can produce a token that verifies. Patched in 3.2.3 and 4.0.1 (December 2025). Public EPSS around disclosure sat near 0.93 percent, which is why some trackers call it medium. The class is still "signature bypass."
Why it matters
node-jws sits under a lot of Node OIDC and API-auth code, including stacks that started from Auth0 samples. A medium CVSS on a JWT library is how "we only accept signed tokens" quietly becomes "we accept the attacker's HMAC." Pair it with CVE-2025-9485 (WordPress OAuth SSO JWT forgery) and CVE-2026-48558 (SimpleHelp alg:none) and you have the 2025-2026 JWT lesson: verifiers still fail the first test.
What to do
- Upgrade node-jws to 4.0.1 or 3.2.3. Search transitive deps, not only direct ones.
- Never let the token pick the HMAC secret. Resolve the key from a server-side kid map, then verify.
- Prefer RS256/ES256 with a JWKS endpoint over HS256 shared secrets for anything that crosses a trust boundary.
- See the JWT decoder and the validate a JWT recipe for the checks a verifier must not skip.
After you patch
Token-layer flaws produce credentials that keep working after the patch, so remediation is about invalidating what was issued.
- Rotate the signing keys published at your JWKS endpoint, then confirm relying parties refetch on an unknown key id rather than caching indefinitely.
- Revoke refresh tokens and sessions. Access tokens expire on their own; refresh tokens are the ones that turn a short compromise into months of access.
- Audit client registrations and consent grants created during the window, particularly any client with broad scopes or a redirect URI you do not recognize.
- Verify validation on your side: pinned algorithms, issuer and audience checks, and no acceptance of
alg: none. See JWT and the validate a JWT recipe.
Sources
- NVD: CVE-2025-65945
- auth0/node-jws security advisory, December 2025
Related identity CVEs
Related on Start with Identity
- GlossaryAccess Token
A short-lived credential a client presents to a resource server to access protected data. Access tokens are typically opaque or JWT-formatted, with lifetimes me
- GlossaryClaims
Statements about a subject carried in a token, such as subject identifier, email, roles, or expiry. Relying parties make authorization decisions from claims, so
- CVEICS JWT auth bypass via hard-coded constants
An industrial-control product accepted JWTs built from hard-coded constants (CWE-547). Critical authentication bypass. CISA ICSA-25-175-07.
- GlossaryID Token
A JWT issued by an OpenID Connect provider that conveys authentication claims about the user. Unlike access tokens, ID tokens are intended for the client, not f
- CVESharePoint JWT alg:none, impersonate any user
SharePoint's ReadTokenCore skipped signature checks when the JWT header said alg:none. An unauthenticated attacker became any user, including farm admin. CVSS 9
- CVESharePoint JWT validation chain, forge a token and become any user
Four weaknesses across two SharePoint JWT token handlers chain into an unauthenticated authentication bypass. Rapid7 published a proof of concept in August 2026