CVE-2026-66393

NLTK before 3.9.4 Denial of Service via JSONTaggedDecoder

Published Aug 22, 2026 CVSS 4.0 · 8.7 High EPSS < 1% KEV · Not listed
Description
NLTK versions before 3.9.4 contain an unbounded recursion vulnerability in JSONTaggedDecoder.decode_obj() that allows attackers to cause denial of service by supplying deeply nested JSON structures. Attackers can craft JSON payloads exceeding the recursion limit to trigger an unhandled RecursionError that crashes the Python process.

Analysis

AI-generated

Technical impact

NLTK versions before 3.9.4 contain an unbounded recursion bug in JSONTaggedDecoder.decode_obj(). Attackers can supply deeply nested JSON structures that exceed Python’s recursion limit, triggering an unhandled RecursionError that crashes the interpreter process. The flaw is classified as CWE‑674, Uncontrolled Recursion, and also exhibits CWE‑606, Missing Input Validation, as the decoder accepts arbitrary nested structures without bounds. The flaw does not provide a privilege escalation path but can completely halt services that depend on NLTK, resulting in a denial of service.

Affected Systems

All users of the Python Natural Language Toolkit (NLTK) prior to release 3.9.4 are affected. The vulnerability applies to any installation where the vulnerable JSONTaggedDecoder is used to parse user‑supplied JSON data.

Risk and Exploitability

The CVSS score of 8.7 indicates a high severity, and the exploit requires the ability to deliver a crafted JSON payload to the NLTK decoder. While the EPSS score is < 1%, the lack of an official KEV listing does not mitigate the risk, as the flaw can be leveraged in any environment exposing the decoding functionality. Remediation is recommended as the threat is active and the potential for service disruption is significant.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade NLTK to version 3.9.4 or later.
  • If an upgrade is not immediately possible, wrap calls to JSONTaggedDecoder.decode_obj() in a try/except block that catches RecursionError or prepend a sanity check that limits JSON nesting depth.
  • Monitor application logs for RecursionError traces and apply process supervision to restart the service automatically if a crash occurs.

Generated by OpenCVE AI on August 31, 2026 at 13:56 UTC.

Tracking

Sign in to view the affected projects.

Advisories

Source ID Title
Github GHSA Github GHSA GHSA-rf74-v2fm-23pw Natural Language Toolkit (NLTK) has unbounded recursion in JSONTaggedDecoder.decode_obj() may cause DoS
History
Type Values Removed Values Added
Metrics ssvc

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

Type Values Removed Values Added
Description NLTK versions before 3.9.4 contain an unbounded recursion vulnerability in JSONTaggedDecoder.decode_obj() that allows attackers to cause denial of service by supplying deeply nested JSON structures. Attackers can craft JSON payloads exceeding the recursion limit to trigger an unhandled RecursionError that crashes the Python process.
Title NLTK before 3.9.4 Denial of Service via JSONTaggedDecoder
First Time appeared Nltk
Nltk nltk
Weaknesses CWE-674
CPEs cpe:2.3:a:nltk:nltk:*:*:*:*:*:*:*:*
Vendors & Products Nltk
Nltk nltk
References
Metrics cvssV3_1

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

cvssV4_0

{'score': 8.7, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N'}

Weaknesses
  • CWE-606

    Unchecked Input for Loop Condition

  • CWE-674

    Uncontrolled Recursion

Sources

Status
PUBLISHED
Assigner
VulnCheck
Published
Updated
Aug 26, 2026, 5:55 PM
Reserved
Jul 26, 2026, 12:22 PM
Status
Analyzed
Published
Aug 22, 2026, 3:16 PM
Modified
Oct 14, 2026, 1:10 PM
Severity
Important
Public date
Aug 22, 2026, 2:12 PM