Description
PyJWT is a Python implementation of JSON Web Token standards. From 2.0.0a1 until 2.15.0, PyJWT PyJWKClient.get_signing_key_from_jwt is affected because payload parser catches ValueError but not RecursionError. This occurs when an attacker-controlled recursively nested payload reaches json.loads. As a result, documented PyJWT exception handling does not contain the failure. Consequently, an unauthenticated request can raise an exception that may produce an HTTP 500 response. The advisory-defined affected implementation also includes jwt/api_jwt.py, verify_signature=False. This issue is fixed in version 2.15.0.
Published: 2026-09-28
Score: 5.3 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Denial of Service
Action: Apply Patch
AI Analysis

Impact

PyJWT, the Python implementation of JSON Web Tokens, has a flaw in which the payload parser catches ValueError but not RecursionError. When an attacker supplies a JWT with a deeply nested payload, the recursive expansion causes a RecursionError during json.loads. Because the exception is not caught, an unauthenticated request can raise the error and trigger an HTTP 500 response, resulting in a denial of service that affects application availability but does not expose data or grant further privileges.

Affected Systems

The vulnerability impacts the PyJWT library distributed by the jpadilla project, covering all releases from 2.0.0a1 up to and including 2.15.0. Systems that rely on any of these versions for token verification or key retrieval—particularly when the verify_signature flag is set to False or when using PyJWKClient.get_signing_key_from_jwt—are at risk.

Risk and Exploitability

The CVSS base score is 5.3, indicating moderate severity. The EPSS score is not available, and the issue is not listed in the CISA KEV catalog, suggesting limited evidence of active exploitation. Attackers can trigger the vulnerability by sending a crafted JWT containing recursive payloads without needing authentication; the resulting RecursionError can cause an HTTP 500 response, temporarily disrupting services. No privilege escalation or data exfiltration is possible, but the DoS impact can be significant in high‑traffic environments.

Generated by OpenCVE AI on September 28, 2026 at 21:37 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade the PyJWT library to version 2.15.0 or later to eliminate the RecursionError handling flaw.
  • If an upgrade cannot be applied immediately, implement defensive coding by wrapping JWT parsing with a try/except block that captures RecursionError and handles it gracefully, ensuring the request does not result in an HTTP 500 response.
  • Apply temporary application‑level request throttling or rate‑limit incoming token requests to mitigate potential DoS impact while remediation is underway.

Generated by OpenCVE AI on September 28, 2026 at 21:37 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-42vr-xj54-vc7v PyJWT: Unauthenticated RecursionError DoS in pre-verification payload parse (PyJWKClient.get_signing_key_from_jwt / verify_signature=False)
History

Wed, 07 Oct 2026 21:15:00 +0000

Type Values Removed Values Added
First Time appeared Pyjwt Project
Pyjwt Project pyjwt
CPEs cpe:2.3:a:pyjwt_project:pyjwt:*:*:*:*:*:*:*:*
Vendors & Products Pyjwt Project
Pyjwt Project pyjwt

Tue, 29 Sep 2026 14:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Tue, 29 Sep 2026 13:15:00 +0000

Type Values Removed Values Added
References
Metrics threat_severity

None

threat_severity

Moderate


Mon, 28 Sep 2026 23:15:00 +0000

Type Values Removed Values Added
First Time appeared Jpadilla
Jpadilla pyjwt
Vendors & Products Jpadilla
Jpadilla pyjwt

Mon, 28 Sep 2026 20:30:00 +0000

Type Values Removed Values Added
Description PyJWT is a Python implementation of JSON Web Token standards. From 2.0.0a1 until 2.15.0, PyJWT PyJWKClient.get_signing_key_from_jwt is affected because payload parser catches ValueError but not RecursionError. This occurs when an attacker-controlled recursively nested payload reaches json.loads. As a result, documented PyJWT exception handling does not contain the failure. Consequently, an unauthenticated request can raise an exception that may produce an HTTP 500 response. The advisory-defined affected implementation also includes jwt/api_jwt.py, verify_signature=False. This issue is fixed in version 2.15.0.
Title PyJWT: Unauthenticated RecursionError DoS in pre-verification payload parse (PyJWKClient.get_signing_key_from_jwt / verify_signature=False)
Weaknesses CWE-248
References
Metrics cvssV3_1

{'score': 5.3, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L'}


Subscriptions

Jpadilla Pyjwt
Pyjwt Project Pyjwt
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-09-29T13:57:29.516Z

Reserved: 2026-09-28T15:55:37.908Z

Link: CVE-2026-101918

cve-icon Vulnrichment

Updated: 2026-09-29T13:57:17.253Z

cve-icon NVD

Status : Analyzed

Published: 2026-09-28T21:17:13.410

Modified: 2026-10-07T20:59:17.860

Link: CVE-2026-101918

cve-icon Redhat

Severity : Moderate

Publid Date: 2026-09-28T20:11:55Z

Links: CVE-2026-101918 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-09-28T23:00:07Z

Weaknesses