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.
Affected products
| Vendor | Product | Affected | Fixed |
|---|---|---|---|
| jpadilla | pyjwt | >= 2.9.0, < 2.13.0 | — |
Fixed in Linux distributions
Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.
Debian
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Debian 14 | pyjwt | 2.13.0-1 | — |
| Debian 13 | pyjwt | No fix yet | — |
Ubuntu
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu 26.04 LTS | pyjwt | 2.10.1-4ubuntu1.1 | USN-8823-1 |
| Ubuntu 25.10 | pyjwt | No fix yet | — |
| Ubuntu 24.04 LTS | pyjwt | 2.7.0-1ubuntu0.2 | USN-8823-1 |
| Ubuntu 22.04 LTS | pyjwt | 2.3.0-1ubuntu0.4 | USN-8823-1 |
Show 3 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu Pro 20.04 LTS | pyjwt | 1.7.1-2ubuntu2.1+esm2 | USN-8823-1 |
| Ubuntu Pro 18.04 LTS | pyjwt | 1.5.3+ds1-1ubuntu0.1+esm2 | USN-8823-1 |
| Ubuntu Pro 16.04 LTS | pyjwt | 1.3.0-1ubuntu0.1+esm2 | USN-8823-1 |
SUSE
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| SLES 15 SP7 | python-PyJWT | 2.4.0-150200.3.14.1 | SUSE-SU-2026:2627-1 |
| SLES 15 SP6 | python-PyJWT | 2.4.0-150200.3.14.1 | SUSE-SU-2026:2627-1, SUSE-SU-2026:2626-1 |
| SLES 15 SP5 | python-PyJWT | 2.4.0-150200.3.14.1 | SUSE-SU-2026:2627-1, SUSE-SU-2026:2626-1 |
| SLES 15 SP4 | python-PyJWT | 2.4.0-150200.3.14.1 | SUSE-SU-2026:2627-1, SUSE-SU-2026:2626-1 |
| SLES 3 | python-PyJWT | 2.8.0-150400.8.13.1 | SUSE-SU-2026:2626-1 |
Show 11 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| SLES for SAP 16.0 | python-PyJWT | 2.12.1-160000.2.1 | SUSE-SU-2026:22170-1 |
| SLES for SAP 15 SP6 | python-PyJWT | 2.4.0-150200.3.14.1 | SUSE-SU-2026:2627-1, SUSE-SU-2026:2626-1 |
| SLES for SAP 15 SP5 | python-PyJWT | 2.4.0-150200.3.14.1 | SUSE-SU-2026:2627-1, SUSE-SU-2026:2626-1 |
| SLES for SAP 15 SP4 | python-PyJWT | 2.4.0-150200.3.14.1 | SUSE-SU-2026:2627-1, SUSE-SU-2026:2626-1 |
| SLES 16.0 | python-PyJWT | 2.12.1-160000.2.1 | SUSE-SU-2026:22170-1 |
| SLE Micro 6.2 | python-PyJWT | 2.12.1-160000.2.1 | SUSE-SU-2026:22220-1 |
| SLE Micro 6.1 | python-PyJWT | 2.12.1-slfo.1.1_2.1 | SUSE-SU-2026:22138-1 |
| SLE Micro 6.0 | python-PyJWT | 2.9.0-3.1 | SUSE-SU-2026:22238-1 |
| SLE Micro 5.5 | python-PyJWT | 2.4.0-150200.3.14.1 | SUSE-SU-2026:2627-1 |
| SLE HPC 15 SP5 | python-PyJWT | 2.4.0-150200.3.14.1 | SUSE-SU-2026:2627-1, SUSE-SU-2026:2626-1 |
| SLE HPC 15 SP4 | python-PyJWT | 2.4.0-150200.3.14.1 | SUSE-SU-2026:2627-1, SUSE-SU-2026:2626-1 |
openSUSE
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| openSUSE Tumbleweed | python-PyJWT | 2.13.0-1.1 | openSUSE-SU-2026:11024-1 |
| openSUSE Leap 16.0 | python-PyJWT | 2.12.1-160000.2.1 | openSUSE-SU-2026:21095-1 |
Wolfi
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Wolfi rolling | datadog-agent-7.72-core-integrations | No fix yet | — |
| Wolfi rolling | datadog-agent-7.73-core-integrations | 7.73.3-r23 | — |
| Wolfi rolling | datadog-agent-7.77-core-integrations | 7.77.3-r16 | — |
| Wolfi rolling | datadog-agent-7.78-core-integrations | 7.78.4-r10 | — |
| Wolfi rolling | datadog-agent-7.79-core-integrations | 7.79.2-r6 | — |
| Wolfi rolling | datadog-agent-7.80-core-integrations | 7.80.4-r3 | — |
| Wolfi rolling | ggshield | 1.52.2-r1 | — |
| Wolfi rolling | kserve +1 | 0.20.0-r7 | — |
| Wolfi rolling | kserve-storage-controller | 0.19.0-r2 | — |
| Wolfi rolling | superset-6.0 | 6.0.0-r17 | — |
| Wolfi rolling | superset-6.1 | 6.1.0-r2 | — |
Affected packages
| Ecosystem | Package | Affected | Fixed | Record |
|---|---|---|---|---|
| PyPI | pyjwt | >= 2.9.0, < 2.13.0 | 2.13.0 | GHSA-jq35-7prp-9v3f |
| PyPI | pyjwt | >= 2.9.0, < 2.12.1 | 2.12.1 | PYSEC-2026-176 |
Advisories 9
- USN-8823-1 pyjwt vulnerabilities Ubuntu Security Notices (USN) · Sep 28, 2026
- openSUSE-SU-2026:21095-1 Security update for python-PyJWT SUSE / openSUSE Security Updates · Jun 30, 2026
- SUSE-SU-2026:22238-1 Security update for python-PyJWT SUSE / openSUSE Security Updates · Jun 26, 2026
- SUSE-SU-2026:2626-1 Security update for python-PyJWT SUSE / openSUSE Security Updates · Jun 26, 2026
- SUSE-SU-2026:2627-1 Security update for python-PyJWT SUSE / openSUSE Security Updates · Jun 26, 2026
- SUSE-SU-2026:22220-1 Security update for python-PyJWT SUSE / openSUSE Security Updates · Jun 24, 2026
- SUSE-SU-2026:22170-1 Security update for python-PyJWT SUSE / openSUSE Security Updates · Jun 24, 2026
- SUSE-SU-2026:22138-1 Security update for python-PyJWT SUSE / openSUSE Security Updates · Jun 18, 2026
- openSUSE-SU-2026:11024-1 python311-PyJWT-2.13.0-1.1 on GA media SUSE / openSUSE Security Updates · Jun 14, 2026