CVE-2025-65945
High · 7.5CVSS
7.5
EPSS
0.2%
Published
Dec 4, 2025
CISA due date
—
Cloudanix analysis
Some applications may mistakenly accept forged login or access tokens, allowing unauthorized users to act as if they were trusted.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Moderate
- Impact
- Data Tampering
- Component
- Library
- Class
- Authentication Bypass
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The flaw affects auth0/node-jws versions 3.2.2 and earlier, and 4.0.0, when applications verify HMAC-signed JSON Web Signatures with HS256 using jws.createVerify(). Under specific implementation patterns, if the application uses attacker-controlled values from the protected header or payload to choose or look up the HMAC secret, signature verification can be bypassed. The practical result is integrity failure: an attacker may be able to make an application accept a forged token or signed message as valid without possessing the legitimate signing secret. The CVSS impact is high for integrity, with network exploitation, low attack complexity, no privileges, and no user interaction required. The listed SUSE OpenEXR package entries appear inconsistent with the described Node.js JWS issue; treat vendor package advisories separately, but prioritize auth0/node-jws usage for this vulnerability.
Why it matters to the business
Applications that rely on vulnerable node-jws verification for authentication, authorization, session validation, API access, tenant routing, or privilege decisions may accept forged claims. This can lead to unauthorized account access, privilege escalation, fraudulent API activity, bypass of business rules, or unauthorized changes to data. The issue is not currently in CISA KEV, is not reported as ransomware-used, has low EPSS probability, and no public exploit maturity is listed, but the impact is significant wherever HS256 JWS verification protects sensitive actions. Because it was published 249 days ago, vulnerable dependencies should be treated as overdue remediation rather than a newly emerging risk.
How an attack unfolds
An attacker first identifies an application endpoint that accepts a JWS or JWT-like object and verifies it using auth0/node-jws. They then determine or infer that the application uses HS256 and calls jws.createVerify() while deriving the HMAC secret from data that the attacker controls in the token header or payload. The attacker crafts a token whose protected header and/or payload influence the secret lookup routine so that verification is performed against attacker-chosen or otherwise incorrect key material. They then submit the forged signed object to the application. If the vulnerable verification path is reached, the application may treat the attacker-controlled claims as authentic, enabling unauthorized access or actions consistent with the forged token contents.
How to fix it
Upgrade auth0/node-jws to a patched release: 3.2.3 or later on the 3.x line, or 4.0.1 or later on the 4.x line. For source builds, ensure the fix includes commit 4f6e73f24df42f07d632dec6431ade8eda8d11a6. Regenerate lockfiles and redeploy applications so the patched dependency is actually present in runtime containers, serverless bundles, and build artifacts. Review all uses of jws.createVerify() with HS256 and ensure HMAC secret selection is based only on trusted server-side configuration or pre-validated key identifiers, not untrusted protected header or payload values. Where feasible, restrict accepted algorithms explicitly and reject tokens with unexpected alg, kid, issuer, audience, or claim structures before performing sensitive authorization decisions. If SUSE package scanners report the listed OpenEXR entries, apply the vendor-fixed package version 2.1.0-6.26.1 for the affected SUSE 12 SP5 products, but validate whether that advisory mapping is relevant to this Node.js authentication issue.
How to confirm the fix worked
Confirm dependency remediation by inspecting package.json, package-lock.json, npm-shrinkwrap.json, yarn.lock, pnpm-lock.yaml, SBOMs, and deployed node_modules/jws/package.json to verify node-jws is not 3.2.2 or earlier and is not 4.0.0. Run npm ls jws, yarn why jws, or pnpm why jws to identify transitive inclusions and confirm all resolved versions are patched. Search application source for jws.createVerify() and review whether HS256 verification uses header or payload fields to choose HMAC secrets. Add regression tests that submit tokens with manipulated protected headers and payload claims used in key lookup logic and assert that they are rejected. Validate production exposure by checking that services accepting JWS/JWT inputs have been redeployed from patched builds rather than only updating source repositories.
Typical attack path
- Discover an endpoint or workflow that accepts JWS/JWT-style bearer tokens, signed requests, webhooks, session artifacts, or API assertions.
- Confirm or infer that HS256 HMAC verification is accepted by the application.
- Craft JWS inputs with attacker-controlled protected header or payload fields that may be used by the application during HMAC secret lookup.
- Sign or structure the token so that vulnerable node-jws verification accepts it under the manipulated lookup condition.
- Submit the forged token or signed message to the target endpoint.
- Use accepted forged claims to access protected functions, assume unauthorized roles, alter state, or bypass application-level authorization checks.
How to detect it
There are no unique network or host indicators that prove exploitation of this library flaw. Detection should focus on exposure review and behavioral evidence of forged-token use. Collect application authentication logs, API gateway logs, reverse proxy logs, identity-provider logs, audit trails for authorization decisions, and any structured token validation failure/success telemetry. Look for successful requests using HS256 tokens where header or payload fields such as kid, iss, aud, sub, tenant, client_id, or role values are unusual, newly observed, malformed, missing, or inconsistent with normal issuance patterns. Investigate successful authentications that lack a corresponding legitimate token issuance event, have impossible travel or impossible sequence behavior, use unexpected roles or scopes, or perform privileged actions shortly after anomalous token presentation. If tokens or token metadata are logged, compare accepted tokens against known issuer signing policies and expected server-side key mappings. In code and build telemetry, search for jws.createVerify() combined with HS256 and secret lookup routines that read from protected header or payload fields. Preserve relevant request headers, authorization metadata, application debug logs, and audit records before rotating secrets or changing verification logic, because remediation may remove evidence needed for timeline reconstruction.
What your security team should do
- Inventory all Node.js services and libraries that include auth0/node-jws directly or transitively, especially internet-facing authentication, API gateway, webhook, and session-validation paths.
- Patch to node-jws 3.2.3 or 4.0.1 or later, rebuild artifacts, redeploy, and verify the runtime version rather than relying only on dependency manifests.
- Prioritize applications using HS256 with jws.createVerify() and any custom HMAC secret lookup based on token header or payload data.
- Perform a focused code review of token verification logic to ensure untrusted token claims are not used to determine the verification secret before the signature is trusted.
- Add tests and runtime controls to reject unexpected algorithms, untrusted key identifiers, malformed protected headers, and tokens with inconsistent issuer/audience/subject claims.
- Review authentication and authorization logs for anomalous successful access involving unusual token headers, unexpected key identifiers, role changes, issuer/audience anomalies, or impossible user behavior.
- Because no KEV listing, ransomware association, or mature public exploit is currently reported and EPSS is low, schedule remediation based on exposure and business criticality, but treat any internet-facing auth path as high priority.
The record
auth0/node-jws is a JSON Web Signature implementation for Node.js. In versions 3.2.2 and earlier and version 4.0.0, auth0/node-jws has an improper signature verification vulnerability when using the HS256 algorithm under specific conditions. Applications are affected when they use the jws.createVerify() function for HMAC algorithms and use user-provided data from the JSON Web Signature protected header or payload in HMAC secret lookup routines, which can allow attackers to bypass signature verification. This issue has been patched in versions 3.2.3 and 4.0.1.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| npm | jws | 0 | 3.2.3 |
| npm | jws | 4.0.0 | No fix |
| npm | jws | 4.0.0 | 4.0.1 |
| Chainguard | dbgate | 0 | 6.8.0-r0 |
| Chainguard | dbgate-compat | 0 | 6.7.3-r0 |
| Chainguard | dbgate-fips | 0 | 6.8.0-r0 |
| Chainguard | dbgate-fips-compat | 0 | 6.7.3-r0 |
| Chainguard | jitsucom-jitsu | 0 | 2.11.0-r10 |
| Chainguard | jitsucom-jitsu-console | 0 | 2.11.0-r10 |
| Chainguard | jitsucom-jitsu-rotor | 0 | 2.11.0-r10 |
| Chainguard | kibana-8.17 | 0 | 8.17.10-r5 |
| Chainguard | kibana-8.17-bitnami | 0 | 8.17.10-r5 |
| Chainguard | kibana-8.17-iamguarded | 0 | 8.17.10-r5 |
| Chainguard | kibana-8.18 | 0 | 8.18.8-r4 |
| Chainguard | kibana-8.18-bitnami | 0 | 8.18.8-r4 |
| Chainguard | kibana-8.18-iamguarded | 0 | 8.18.8-r4 |
| Chainguard | kibana-8.19 | 0 | 8.19.8-r1 |
| Chainguard | kibana-8.19-bitnami | 0 | 8.19.8-r1 |
| Chainguard | kibana-8.19-iamguarded | 0 | 8.19.8-r1 |
| Chainguard | kibana-9.0 | 0 | 9.0.8-r4 |
| Chainguard | kibana-9.0-bitnami | 0 | 9.0.8-r4 |
| Chainguard | kibana-9.0-iamguarded | 0 | 9.0.8-r4 |
| Chainguard | kibana-9.1 | 0 | 9.1.8-r2 |
| Chainguard | kibana-9.1-bitnami | 0 | 9.1.8-r2 |
| Chainguard | kibana-9.1-iamguarded | 0 | 9.1.8-r2 |
| Chainguard | kibana-9.2 | 0 | 9.2.2-r2 |
| Chainguard | kibana-9.2-iamguarded | 0 | 9.2.2-r2 |
| Chainguard | kubeflow-centraldashboard | 0 | 1.10.0-r7 |
| Chainguard | kubeflow-pipelines | 0 | 2.15.0-r2 |
| Chainguard | kubeflow-pipelines-apiserver | 0 | 2.15.0-r2 |
| Chainguard | kubeflow-pipelines-cache-deployer | 0 | 2.15.0-r2 |
| Chainguard | kubeflow-pipelines-cache-deployer-compat | 0 | 2.15.0-r2 |
| Chainguard | kubeflow-pipelines-cache_server | 0 | 2.15.0-r2 |
| Chainguard | kubeflow-pipelines-frontend | 0 | 2.15.0-r2 |
| Chainguard | kubeflow-pipelines-metadata-envoy-config | 0 | 2.15.0-r2 |
| Chainguard | kubeflow-pipelines-metadata-writer | 0 | 2.15.0-r2 |
| Chainguard | kubeflow-pipelines-metadata-writer-compat | 0 | 2.15.0-r2 |
| Chainguard | kubeflow-pipelines-persistence_agent | 0 | 2.15.0-r2 |
| Chainguard | kubeflow-pipelines-scheduledworkflow | 0 | 2.15.0-r2 |
| Chainguard | kubeflow-pipelines-viewer-crd-controller | 0 | 2.15.0-r2 |
| Chainguard | langfuse-3 | 0 | 3.138.0-r0 |
| Chainguard | langfuse-3-compat | 0 | 3.138.0-r0 |
| Chainguard | langfuse-3-worker | 0 | 3.138.0-r0 |
| Chainguard | langfuse-fips-3 | 0 | 3.138.0-r0 |
| Chainguard | langfuse-fips-3-compat | 0 | 3.138.0-r0 |
| Chainguard | langfuse-fips-3-worker | 0 | 3.138.0-r0 |
| Chainguard | langfuse-web-3 | 0 | 3.138.0-r0 |
| Chainguard | langfuse-web-compat | 0 | 3.138.0-r0 |
| Chainguard | langfuse-worker-3 | 0 | 3.138.0-r0 |
| Chainguard | librechat | 0 | 0.8.0-r8 |
| Chainguard | librechat-compat | 0 | 0.8.0-r8 |
| Chainguard | librechat-dev | 0 | 0.8.0-r8 |
| Chainguard | redisinsight | 0 | 3.0.0-r0 |
| Chainguard | redisinsight-docker-entrypoint | 0 | 3.0.0-r0 |
| Chainguard | renovate | 0 | 42.39.1-r0 |
| Chainguard | saf | 0 | 1.5.2-r0 |
| Chainguard | sqlpad | 0 | 7.5.7-r4 |
| Chainguard | sqlpad-compat | 0 | 7.5.7-r4 |
| Wolfi | jitsucom-jitsu | 0 | 2.11.0-r10 |
| Wolfi | jitsucom-jitsu-console | 0 | 2.11.0-r10 |
| Wolfi | jitsucom-jitsu-rotor | 0 | 2.11.0-r10 |
| Wolfi | kubeflow-centraldashboard | 0 | 1.10.0-r7 |
| Wolfi | kubeflow-pipelines | 0 | 2.15.0-r2 |
| Wolfi | kubeflow-pipelines-apiserver | 0 | 2.15.0-r2 |
| Wolfi | kubeflow-pipelines-cache-deployer | 0 | 2.15.0-r2 |
| Wolfi | kubeflow-pipelines-cache-deployer-compat | 0 | 2.15.0-r2 |
| Wolfi | kubeflow-pipelines-cache_server | 0 | 2.15.0-r2 |
| Wolfi | kubeflow-pipelines-frontend | 0 | 2.15.0-r2 |
| Wolfi | kubeflow-pipelines-metadata-envoy-config | 0 | 2.15.0-r2 |
| Wolfi | kubeflow-pipelines-metadata-writer | 0 | 2.15.0-r2 |
| Wolfi | kubeflow-pipelines-metadata-writer-compat | 0 | 2.15.0-r2 |
| Wolfi | kubeflow-pipelines-persistence_agent | 0 | 2.15.0-r2 |
| Wolfi | kubeflow-pipelines-scheduledworkflow | 0 | 2.15.0-r2 |
| Wolfi | kubeflow-pipelines-viewer-crd-controller | 0 | 2.15.0-r2 |
| Wolfi | langfuse-3 | 0 | 3.138.0-r0 |
| Wolfi | langfuse-3-compat | 0 | 3.138.0-r0 |
| Wolfi | langfuse-3-worker | 0 | 3.138.0-r0 |
| Wolfi | langfuse-web-3 | 0 | 3.138.0-r0 |
| Wolfi | langfuse-web-compat | 0 | 3.138.0-r0 |
| Wolfi | langfuse-worker-3 | 0 | 3.138.0-r0 |
| Wolfi | renovate | 0 | 42.39.1-r0 |
| Wolfi | saf | 0 | 1.5.2-r0 |
| Wolfi | sqlpad | 0 | 7.5.7-r4 |
| Wolfi | sqlpad-compat | 0 | 7.5.7-r4 |
Related vulnerabilities
- GHSA-869p-cjfg-cm3x auth0/node-jws Improperly Verifies HMAC Signature Same vulnerability
- CVE-2026-33349 fast-xml-parser allows users to process XML from JS object without C/C++ based libraries… Also affects dbgate
- CVE-2026-33036 fast-xml-parser allows users to process XML from JS object without C/C++ based libraries… Also affects dbgate
- GHSA-jp2q-39xq-3w4g Entity Expansion Limits Bypassed When Set to Zero Due to JavaScript Falsy Evaluation in… Also affects dbgate
- GHSA-8gc5-j5rx-235r fast-xml-parser affected by numeric entity expansion bypassing all entity expansion… Also affects dbgate
- GHSA-fj3w-jwp8-x2g3 fast-xml-parser has stack overflow in XMLBuilder with preserveOrder Also affects dbgate
- CVE-2026-27942 fast-xml-parser allows users to validate XML, parse XML to JS object, or build XML from… Also affects dbgate
- CVE-2026-25896 fast-xml-parser allows users to validate XML, parse XML to JS object, or build XML from… Also affects dbgate