CVE-2026-102265: PyJWT: Uncaught RecursionError in jwt.decode() on deeply nested token header

Published Sep 28, 2026
·
Updated

PyJWT is a Python implementation of JSON Web Token standards. From 2.13.0 until 2.14.0, PyJWS.load in jwt/apijws.py is affected because parser catches ValueError but not RecursionError. This occurs when a deeply nested token header reaches json.loads. As a result, RecursionError escapes the documented PyJWT error hierarchy. Consequently, an unauthenticated malformed token can cause a request-level failure and HTTP 500. This issue is fixed in version 2.14.0.

Affected Software

1 affected component
pypi/pyjwt>=2.13.0<2.14.0

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade PyJWT to a version that resolves this vulnerability.

    Fixed in 2.14.0

Event History

Sep 28, 2026
CVE Published
via MITRE·08:48 PM
Data Sourced
via MITRE·08:48 PM
DescriptionSeverityWeakness
Data Sourced
via NVD·09:17 PM
DescriptionSeverityWeakness

Frequently Asked Questions

1

Which deployments are exposed to request failures?

Applications using PyJWT versions from 2.13.0 up to, but not including, 2.14.0 are affected when they decode attacker-controlled JWTs. An unauthenticated client can submit a malformed token with a deeply nested header and trigger an HTTP 500 request-level failure.

2

Does exploitation require credentials or user interaction?

No. The issue has network attack vector, low attack complexity, no privileges required, and no user interaction; the attacker only needs a path that passes a supplied token to jwt.decode().

3

What is the remediation?

Upgrade PyJWT to version 2.14.0, which fixes the uncaught RecursionError. The supplied information does not identify an alternative mitigation for deployments that cannot yet upgrade.

4

How can I identify attempted exploitation?

Look for request failures or HTTP 500 responses associated with JWT decoding where a RecursionError escapes from json.loads or PyJWS._load in jwt/api_jws.py. The triggering input is a token containing a deeply nested header.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203