CVE-2026-101918 · GHSA-42vr-xj54-vc7v
PyJWT: Unauthenticated RecursionError DoS in pre-verification payload parse (PyJWKClient.get_signing_key_from_jwt / verify_signature=False)
- Risk score
- 66/100
- CVSS
- 7.5 v3.1
- Exploit chance (30 days)
- 0.4%
- Published
- 28 Sep 2026
Open in the live forecast Today's forecast
What to know
- What it is
- PyJWT is a Python implementation of JSON Web Token standards. From 2.0.0a1 until 2.15.0, PyJWT PyJWKClient.get_signing_key_from_jwt is affected because payload parser catches ValueError but not RecursionError. This occurs when an attacker-controlled recursively nested payload reaches json.loads. As a result, documente…
- Affected
- PyJWT (pip) >= 2.0.0a1, <= 2.14.0
- Fix
- Upgrade PyJWT to 2.15.0 or later.
- Exploitation
- Public proof of concept
Story map
At a glance
PyJWT: Amber, patch this week. PyJWT is a Python implementation of JSON Web Token standards. Prior to 2.14.0, is_pem_format in jwt/utils.py is affected because is_pem_format does not recognize every PEM representation accepted by the cryptography loader. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a mutated pub…
The flaws
- CVE-2026-101918: Unauthenticated RecursionError DoS in pre-verification payload parse (PyJWKClient.get_signing_key_from_jwt / verify_signature=False) (CVSS 7.5 · EPSS 0%)
- CVE-2026-102268: Asymmetric-PEM detection bypass: whitespace/line-ending-mutated public keys skip the HS/asymmetric confusion guard (CVSS 9.1 · EPSS 0%)
- CVE-2026-102266: PyJWK accepts empty HMAC keys, bypassing PyJWT's empty-key validation (CVSS 9.1 · EPSS 0%)
- CVE-2026-101917: PyJWT: PyJWKClient still amplifies unauthenticated JWKS fetches on unknown kid values (incomplete fix of CVE-2026-48524) (CVSS 7.5 · EPSS 0%)
The fix
Upgrade PyJWT: 2.15.0 · 2.14.0 or later on your release line
Who is exposed: PyJWT (pip) <= 2.13.0
Where it stands
- Public proof of concept
Connects to
- Same weakness: CWE-248 (CWE-248). 63 other warnings in 30 days
- Same product: Earlier PyJWT warnings. 10 in the last 90 days
Why it is Amber
- CVSS 7.5 high
- Public exploit or proof of concept referenced
- Remotely exploitable without logging in
- On your watchlist: PyPI
Affected packages
| Package | Ecosystem | Vulnerable | Fixed in |
|---|---|---|---|
| PyJWT | pip | >= 2.0.0a1, <= 2.14.0 | 2.15.0 |
References
- https://github.com/advisories/GHSA-42vr-xj54-vc7v
- https://github.com/jpadilla/pyjwt/security/advisories/GHSA-42vr-xj54-vc7v
- https://nvd.nist.gov/vuln/detail/CVE-2026-101918
- https://github.com/jpadilla/pyjwt/commit/5fde08a6cf906aa7698de2d6391d88b73006b17b
- https://github.com/jpadilla/pyjwt/releases/tag/2.15.0
- https://github.com/advisories/GHSA-42vr-xj54-vc7v
Original description
PyJWT is a Python implementation of JSON Web Token standards. From 2.0.0a1 until 2.15.0, PyJWT PyJWKClient.get_signing_key_from_jwt is affected because payload parser catches ValueError but not RecursionError. This occurs when an attacker-controlled recursively nested payload reaches json.loads. As a result, documented PyJWT exception handling does not contain the failure. Consequently, an unauthenticated request can raise an exception that may produce an HTTP 500 response. The advisory-defined affected implementation also includes jwt/api_jwt.py, verify_signature=False. This issue is fixed in version 2.15.0.
Last activity 28 Sep 2026. Patch Forecast updates every hour.