CVE-2026-66393
PoC massUnbounded recursion DoS in NLTK JSONTaggedDecoder
NLTK (the Natural Language Toolkit) versions before 3.9.4 contain an unbounded recursion flaw (CWE-674) in the JSONTaggedDecoder.decode_obj() function. An attacker who can control JSON input reaching this decoder, for example an application, API, or service that deserializes NLTK tagged JSON from untrusted clients, can submit a deeply nested JSON structure that exceeds Python's recursion limit and triggers an unhandled RecursionError. The result is denial of service: the Python process crashes, with the CVSS 4.0 score of 8.7 (high) reflecting high availability impact and no confidentiality or integrity impact. Any environment running an affected NLTK version in which JSONTaggedDecoder processes attacker-controlled input is affected, while uses of NLTK that never invoke this decoder are not practically exposed. There are no confirmed reports of exploitation in the wild; a public proof of concept is documented in the vendor advisory (GHSA-rf74-v2fm-23pw), the flaw is not in CISA KEV, and EPSS estimates only a 0.4% probability of exploitation within 30 days.
What to do: Upgrade to NLTK 3.9.4 or later. Until patched, identify any services that pass untrusted JSON to NLTK's JSONTaggedDecoder, enforce a nesting-depth or input-size limit on such JSON before decoding, and monitor worker processes for RecursionError crashes. Since no in-the-wild exploitation is reported and EPSS is low, patching on a normal cycle is reasonable, prioritizing internet-facing services that decode client-supplied JSON.
| nltk (Natural Language Toolkit) | All versions before 3.9.4 (< 3.9.4) |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
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.
- Vendors
- nltk
- Products
- nltk
- Weakness
- CWE-674
- 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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
In the news0 stories
No ingested article mentions this CVE yet.