CVE-2026-103001
published 2026-09-30CVE-2026-103001: PyJWT is a Python implementation of JSON Web Token standards. From 2.11.0 through 2.13.0, PyJWT's PyJWT._merge_options() method can modify a caller-supplied…
PriorityP336medium6.5CVSS 3.1
AVNACHPRNUINSUCLIHAN
EPSS
0.24%
14.3th percentile
PyJWT is a Python implementation of JSON Web Token standards. From 2.11.0 through 2.13.0, PyJWT's PyJWT._merge_options() method can modify a caller-supplied mutable options mapping when verify_signature is false. If an application reuses that same mapping for a later decode() or decode_complete() call and changes verify_signature to true, the mapping can retain false values for expiration, not-before, issued-at, audience, issuer, subject, and JWT ID checks. A signed token with invalid registered claims can then be accepted without disabling signature verification, but applications that create a fresh options mapping for each call are not affected.
Affected
3 ranges
| Vendor | Product | Version range | Fixed in |
|---|---|---|---|
| jpadilla | pyjwt | — | — |
| pyjwt_project | pyjwt | >= 2.11.0 < 2.13.0 | 2.13.0 |
| pyjwt_project | pyjwt | 2.11.0 – 2.13.0 | — |
CVSS provenance
nvdv3.16.5MEDIUMCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:N
vendor_redhat6.5MEDIUM
Stop checking back — get the weekly exploitation signal.
Every Monday: what got weaponized or added to CISA KEV in the last seven days — each CVE cross-linked to its PoC, Nuclei template, and detection rule. Free, one email a week, unsubscribe in one click.
GHSA
PyJWT.decode() reintroduces options-dict mutation, enabling silent claim-verification bypass on dict reuse
ghsa·2026-09-30
CVE-2026-103001 [MEDIUM] CWE-471 PyJWT.decode() reintroduces options-dict mutation, enabling silent claim-verification bypass on dict reuse
PyJWT.decode() reintroduces options-dict mutation, enabling silent claim-verification bypass on dict reuse
### Summary
`PyJWT.decode()`/`decode_complete()` mutates a caller-supplied `options` dict in place whenever `verify_signature` is falsy, adding `verify_exp`/`verify_nbf`/`verify_iat`/`verify_aud`/`verify_iss`/`verify_sub`/`verify_jti` keys directly onto that object. If application code reuses the same `options` dict across calls (a config object, a module-level constant, a wrapper's `self.options`), a later call that explicitly sets `verify_signature=True` for a full, normal verification silently inherits the leftover `verify_exp=False` etc. from an earlier `verify_signature=False` call on the same object -- and accepts an expired, wrong-audience, wrong-issuer, or wrong-subject toke
VulDB
jpadilla PyJWT up to 2.13.0 Options Merging PyJWT._merge_options verify_signature signature verification
vuldb·2026-09-30·CVSS 6.5
CVE-2026-103001 [MEDIUM] jpadilla PyJWT up to 2.13.0 Options Merging PyJWT._merge_options verify_signature signature verification
A vulnerability classified as critical has been found in jpadilla PyJWT up to 2.13.0. This affects the function PyJWT._merge_options of the component Options Merging. This manipulation of the argument verify_signature causes improper verification of cryptographic signature.
This vulnerability appears as CVE-2026-103001. The attack may be initiated remotely. There is no available exploit.
Red Hat
pyjwt: pyjwt: Token validation bypass via options dictionary mutation
vendor_redhat·2026-09-30·CVSS 6.5
CVE-2026-103001 [MEDIUM] CWE-358 pyjwt: pyjwt: Token validation bypass via options dictionary mutation
pyjwt: pyjwt: Token validation bypass via options dictionary mutation
A flaw was found in pyjwt. This vulnerability allows a remote attacker to bypass token validation checks when an application reuses an options configuration across multiple token decoding requests. Because the library unintentionally modifies the caller's shared configuration dictionary when signature verification is disabled, subsequent token verifications may retain disabled claim checks. As a result, an attacker could supply an expired or otherwise invalid JSON Web Token (JWT) that the application accepts as valid.
Package: jaeger (Red Hat Hardened Images) - Not affected
Package: llvm21 (Red Hat Hardened Images) - Not affected
Package: rust (Red Hat Hardened Images) - Not affected
Package: swift-lang (Red Hat Har
No detection rules found.
No public exploits indexed.
2026-09-30
Published