© 2025-2026 PySpect
First version without a known vulnerability: 2.15.0
PyJWT accepts inconsistent OKP x/d JWKs, causing public/private key identity confusion
Fixed in: 2.15.0
PyJWT.decode() reintroduces options-dict mutation, enabling silent claim-verification bypass on dict reuse
PyJWT: Unauthenticated RecursionError DoS in pre-verification payload parse (PyJWKClient.get_signing_key_from_jwt / verify_signature=False)
Fixed in: 2.15.0
PyJWT: ReDoS vulnerability when calling the `is_pem_format` function.
Fixed in: 2.14.0
PyJWT: PyJWK accepts empty HMAC keys, bypassing PyJWT's empty-key validation
Fixed in: 2.14.0
PyJWT: Uncaught RecursionError in jwt.decode() on deeply nested token header
Fixed in: 2.14.0
PyJWT: Non-canonical signature segments enable raw-token revocation bypass
Fixed in: 2.14.0
PyJWT: Asymmetric-PEM detection bypass: whitespace/line-ending-mutated public keys skip the HS/asymmetric confusion guard
Fixed in: 2.14.0
PyJWT accepts public JWK containers as HMAC secrets
Fixed in: 2.14.0
PyJWT: PyJWKClient follows redirects when fetching JWKS
Fixed in: 2.14.0
PyJWT: Public keys in DER form are accepted as HMAC secrets, bypassing the CVE-2022-29217 guard
Fixed in: 2.14.0
PyJWT BOM Bypass
Fixed in: 2.14.0
PyJWT: PyJWKClient still amplifies unauthenticated JWKS fetches on unknown kid values (incomplete fix of CVE-2026-48524)
Fixed in: 2.14.0
PyJWT: Malformed RSA JWK aborts parsing of an entire JWK Set
Fixed in: 2.14.0
PyJWT: Unauthenticated DoS via unbounded Base64URL decoding of unused payload segment in b64=false detached JWS
Fixed in: 2.13.0
PyJWKClient: missing scheme allowlist enables CVE-2024-21643-class SSRF + token forgery via file://, ftp://, data: schemes
Fixed in: 2.13.0
PyJWT: Public-key JWK accepted as HMAC secret enables forged HS256 tokens when mixed families are allowed
Fixed in: 2.13.0
PyJWT: Algorithm allow-list bypass when decoding with `PyJWK` / `PyJWKClient` keys
Fixed in: 2.13.0, 2.12.1
PyJWKClient unbounded JWKS endpoint requests via attacker-controlled kid values (DoS)
Fixed in: 2.13.0
PyJWT accepts unknown `crit` header extensions
Fixed in: 2.12.0
pyjwt v2.10.1 was discovered to contain weak encryption. NOTE: this is disputed by the Supplier because the key length is chosen by the application that uses the library (admittedly, library users may benefit from a minimum value and a mechanism for opting in to strict enforcement).
PyJWT Issuer field partial matches allowed
Fixed in: 2.10.1
Key confusion through non-blocklisted public key formats
Fixed in: 2.4.0, 9c528670c455b8d948aff95ed50e22940d1ad3fc
PyJWT vulnerable to key confusion attacks
Fixed in: 1.5.1