CVE-2026-48523 PyJWT: Algorithm allow-list bypass when decoding with `PyJWK` / `PyJWKClient` keys
Attackers can bypass JWT algorithm allow-lists when using PyJWK keys, allowing tokens signed with disallowed algorithms to be accepted as valid.
- Exploited in the wild
- Not known
- Login needed
- Any signed-in user
- Attackable
- Over the internet
- Victim action needed
- Not needed
- Fix
- Available
What is CVE-2026-48523?
CVE-2026-48523 is a medium-severity vulnerability in jpadilla pyjwt, published on 28 May 2026. Any signed-in user can exploit it over the network, with no action from the victim.
Official description
PyJWT is a JSON Web Token implementation in Python. From 2.9.0 to 2.12.1, there is a verifier-side algorithm allow-list bypass when jwt.decode() or jwt.decode_complete() are called with a PyJWK key. The token header alg is checked against the caller-supplied algorithms allow-list, but signature verification is performed with the algorithm bound to the PyJWK object instead of the header algorithm. An attacker who controls a registered JWK/JWKS private key can sign with a disallowed algorithm, advertise an allowed algorithm in the JWT header, and still be accepted. The issue affects the documented PyJWKClient.get_signing_key_from_jwt(...) flow. This vulnerability is fixed in 2.13.0.
Weakness: CWE-347
Which versions are affected by CVE-2026-48523?
3 open source packages ship an affected version, including pyjwt. It affects 1 product.
| Package | Affected | Fixed in |
|---|---|---|
pyjwt PyPI | From 2.9.0 | 2.12.1 |
pyjwt PyPI | From 2.9.0 | 2.13.0 |
pyjwt PyPI | From 2.9.0 | 2.13.0 |
Products include Pyjwt Project Pyjwt.
How do I fix CVE-2026-48523?
Upgrade pyjwt to a fixed version for your release line: 2.12.1 or 2.13.0.
Is CVE-2026-48523 being exploited?
It is not confirmed as exploited in the wild, but public exploit code for CVE-2026-48523 exists.
Other vulnerabilities in jpadilla pyjwt
- CVE-2026-102268 PyJWT: Asymmetric-PEM detection bypass: whitespace/line-ending-mutated public keys skip the HS/asymmetric confusion guard
- CVE-2026-32597 PyJWT accepts unknown `crit` header extensions (RFC 7515 §4.1.11 MUST violation)
- CVE-2026-102266 PyJWK accepts empty HMAC keys, bypassing PyJWT's empty-key validation
- CVE-2026-102267 PyJWT: PyJWKClient follows redirects when fetching JWKS
- CVE-2026-102271 PyJWT: Public keys in DER form are accepted as HMAC secrets, bypassing the CVE-2022-29217 guard
Sources
Also known as BELL-CVE-2026-48523, CLEANSTART-2026-HM72127, DEBIAN-CVE-2026-48523, ECHO-894a-8fa2-a1b5, GHSA-jq35-7prp-9v3f, MINI-2p3c-ghvh-749x and 30 more.