Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify NLTK service accepting external TEI corpus input
-
DeliveryCraft malformed TEI with many unmatched opening tags
-
ExploitSubmit payload via words() or tagged_words() API
-
ExecutionTrigger quadratic backtracking in read_block regex
-
PersistExhaust CPU resources
-
ImpactCause service denial
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that the target application use NLTK's Pl196xCorpusReader (specifically via words() or tagged_words() methods) AND that it processes attacker-supplied or attacker-influenced TEI corpus data. The CVSS 4.0 vector specifies AT:P (attack requirements present), meaning a precondition beyond mere network access exists: the application must be configured to accept external TEI input for processing. Default or academic NLTK deployments that load only bundled or internally trusted corpora are NOT exploitable. The impact is strictly a CPU-exhaustion denial of service-no authentication bypass, no data exfiltration, and no code execution is possible. Authentication requirements are not confirmed from the provided CVSS data (PR:N indicates no privilege required to invoke the API, not necessarily that the endpoint itself is unauthenticated at the application layer). |
| Impact | The CVSS 4.0 score of 6.3 reflects network reachability (AV:N) offset by high attack complexity (AC:H) and an attack prerequisite condition (AT:P), with impact limited entirely to availability at low severity (VA:L). There is no confidentiality or integrity impact. Real-world risk is conditional: only applications that pipe attacker-controlled TEI corpus content into Pl196xCorpusReader are exploitable. Deployments loading only trusted local corpora (the common academic use case) are not exposed. EPSS data was not provided in source intelligence. No CISA KEV listing exists and no POC code has been identified, suggesting this has not been actively weaponized at scale. The primary realistic concern is CPU starvation in shared or multi-tenant NLP API services. Despite the network vector, the combination of high complexity, attack prerequisites, and low availability impact makes this a moderate-not urgent-priority, warranting patching on a normal patch cycle rather than emergency response. |
| Exploit ScenarioDerived | An attacker targeting an NLP-as-a-service application built on NLTK submits a crafted TEI corpus file containing thousands of nested, unmatched opening tags via the service's corpus analysis endpoint. The application calls words() on the uploaded corpus, triggering the vulnerable read_block regex which rescans the malformed block repeatedly, consuming near-quadratic CPU time relative to the tag depth and stalling or crashing the service worker. No POC code has been publicly identified, but the attack concept is straightforward given public documentation of ReDoS patterns. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 27, 2026
Regular expression denial of service in NLTK's Pl196xCorpusReader allows unauthenticated remote attackers to exhaust CPU resources by supplying malformed TEI corpus data containing many unmatched opening tags. Applications exposing NLTK's words() or tagged_words() public APIs over a network boundary-such as NLP services processing user-supplied corpora-are at risk of near-quadratic runtime growth in the read_block method. No public exploit code or CISA KEV listing has been identified at time of analysis; patch 3.10.3 is available.
RemediationAI
Upgrade NLTK to version 3.10.3 or later, which resolves the regex pattern in read_block. The fix is documented in the GitHub security advisory at https://github.com/nltk/nltk/security/advisories/GHSA-8mpw-7fpc-4gqj. For applications that cannot upgrade immediately, a targeted workaround is to avoid passing any externally sourced or user-supplied TEI corpus files to Pl196xCorpusReader, words(), or tagged_words()-restricting these APIs to trusted, internally generated corpora eliminates the attack surface entirely. If corpus input from external parties is required, a mitigating control is to enforce a maximum file size and structural depth limit on incoming TEI documents before parsing, reducing the effective input space the regex engine must handle. There is no known side effect from upgrading to 3.10.3 beyond standard regression testing.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
NLTK (Natural Language Toolkit, CPE: cpe:2.3:a:nltk:nltk:*:*:*:*:*:*:*:*) is a widely used Python library for natural language processing. The Pl196xCorpusReader component handles the Polish TEI (Text Encoding Initiative) XML corpus format. CWE-400 (Uncontrolled Resource Consumption) manifests here as a ReDoS: the read_block method employs lazy (non-possessive) regex patterns that, when confronted with adversarial input-specifically TEI blocks with many unmatched opening tags-force the regex engine into repeated, redundant rescans of the input string. The backtracking behavior scales near-quadratically with input size, meaning a modest increase in malformed tag depth produces a disproportionate spike in CPU cycles consumed per parse call.
Know when Nltk gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Network vector but high complexity and no privileges required; impact is solely low availability via CPU exhaustion, no confidentiality or integrity loss.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
1DescriptionCVE.org
NLTK before 3.10.3 contains a regular expression denial of service vulnerability in Pl196xCorpusReader that allows attackers to cause quadratic CPU consumption by supplying malformed TEI blocks with many unmatched opening tags. Attackers can exploit lazy regex patterns in the read_block method through public APIs like words() and tagged_words() to force repeated rescans and achieve near-quadratic runtime growth.
Blast Radius
ecosystem impact- 10 pypi packages depend on nltk (9 direct, 1 indirect)
Ecosystem-wide dependent count for version 3.10.3.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Arbitrary code execution in the Natural Language Toolkit (NLTK) before 3.10.3 allows attackers to bypass the library's p
Arbitrary code execution in NLTK (Natural Language Toolkit) through 3.9.4 allows attackers to run Python code when a vic
Arbitrary code execution in the NLTK (Natural Language Toolkit) Python library affects all versions through its data dow
StreamBackedCorpusView in NLTK before 3.10.0 allows arbitrary local file reads by calling Python's builtins.open() direc
Symlink-based path traversal in NLTK's FramenetCorpusReader before version 3.10.2 permits attackers with write access to
Unbounded recursion in NLTK's JSONTaggedDecoder.decode_obj() (nltk/jsontags.py) allows unauthenticated remote attackers
Path traversal and pickle deserialization protections in NLTK before 3.10.0 are effectively disabled by default - pathse
XML Entity Expansion (Billion Laughs) in NLTK before 3.10.3 allows unauthenticated remote attackers to cause denial of s
Server-side request forgery in NLTK before 3.10.3 allows unauthenticated remote attackers to reach internal HTTP service
Symlink escape in NLTK's CorpusReader.open() allows local attackers to read arbitrary files outside the designated corpu
Path traversal in NLTK's FramenetCorpusReader and NKJPCorpusReader (all versions before 3.10.0) enables unauthenticated
NLTK (Natural Language Toolkit) is a suite of open source Python modules, data sets, and tutorials supporting research a
EUVD-2026-67075
GHSA-3m7f-6hxv-6796
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB