Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAttacker controls or compromises NLTK package source
-
DeliveryUser invokes nltk.download() in application or pipeline
-
ExploitMalicious archive fetched over network
-
ExecutionArchive extracted into shared corpora/ or taggers/ namespace
-
PersistTrusted resource files overwritten before integrity check
-
ImpactPoisoned NLP models silently loaded by NLTK APIs across all subsequent runs
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Access control enforcement
MITRE ATT&CK
1 technique across 1 tactic: Defense Evasion The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The attack requires the victim to invoke nltk.downloader (e.g., via nltk.download()) to fetch at least one package - providing the UI:R interaction. The attacker must control or intercept the package source queried by the downloader, which requires either: (1) a compromised NLTK data mirror or repository, (2) a MitM attack on the download channel if it uses an unencrypted or unauthenticated transport, or (3) a malicious package accepted into the official NLTK data distribution. The NLTK data directory must be shared across packages (i.e., multiple packages write to the same corpora/ or taggers/ root) - this is the default configuration, not a special deployment. Exploitation is limited by AC:H: the attacker cannot passively exploit any NLTK installation; they must actively control what the victim downloads. No special privilege is required on the victim system (PR:N). Authentication requirements for the download endpoint are not confirmed from available data. |
| Impact | The CVSS 3.0 base score of 5.3 (Medium) with vector AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:N accurately reflects a real-world threat that is meaningful but not trivially mass-exploitable. AC:H is the critical limiting factor: the attacker must control or inject into the package source the victim queries - whether via a compromised NLTK mirror, a dependency confusion attack, a MitM on an unencrypted download channel, or a malicious package submitted to and accepted by an official NLTK data repository. UI:R requires the victim to explicitly invoke the downloader. The I:H rating is well-justified: once resources are poisoned, every NLTK API call that loads that resource silently uses the attacker-controlled version. The absence of EPSS data and KEV listing indicates no confirmed widespread exploitation. However, the risk is disproportionately high in automated pipelines, CI/CD environments that call nltk.download(), and ML reproducibility contexts where model integrity is a security assumption. The tag 'Authentication Bypass' from huntr.com likely refers to circumventing the implicit trust model of the package namespace, not a credential bypass. No EPSS score was provided in the input data; real-world priority should be assessed by how exposed the environment's NLTK data path is to external or multi-tenant package sources. |
| Exploit ScenarioDerived | An attacker positions a malicious package - either by submitting it to an NLTK data repository, performing a MitM on an HTTP download channel, or exploiting a dependency confusion scenario - such that when a data scientist or automated pipeline calls nltk.download('some-package'), the malicious archive is fetched. The archive contains files path-crafted to overwrite a trusted resource (e.g., a POS tagger model file in taggers/) with an adversarial version. Because extraction precedes integrity validation, the poisoned model is immediately active; the victim's ML application then loads and uses the attacker-controlled model on every subsequent run, across restarts, with no visible error. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 07, 2026
Cross-package resource and model poisoning in NLTK's downloader (versions <= 3.9.4) allows an attacker who can influence what packages a user downloads to silently overwrite trusted corpora and model files with adversarial replacements. The root cause is that nltk.downloader extracts archives into shared namespaces (corpora/, taggers/) rather than package-isolated directories, and performs integrity validation only after extraction is complete - a classic TOCTOU-like design flaw. Poisoned resources survive interpreter restarts and propagate silently into ML pipelines, making this particularly dangerous in reproducibility-sensitive or automated NLP workflows. No public exploit code has been identified at time of analysis and this vulnerability is not listed in CISA KEV.
RemediationAI
No vendor-released patch version has been confirmed in the available data; the fix version is not independently verified from the provided references. Users should monitor the official NLTK GitHub repository and PyPI for a patched release above 3.9.4. In the interim, the most effective compensating control is to use per-project virtual environments with isolated NLTK data paths (set the NLTK_DATA environment variable to a project-specific directory) so that no shared namespace exists across projects or users - this eliminates the cross-package overwrite surface. Additionally, only invoke nltk.download() from pinned, version-locked package lists in controlled environments, and verify downloaded resource file hashes against known-good values before use. Avoid running nltk.download() in automated CI/CD pipelines pointed at default or shared data directories until a patch is available. The trade-off of NLTK_DATA isolation is that each project must maintain its own copy of downloaded corpora, increasing disk usage. The huntr.com disclosure is at https://huntr.com/bounties/8b8c381e-08a8-4e4f-bb46-a320c96a364f.
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) is a Python library for natural language processing that includes a built-in package downloader (nltk.downloader) used to fetch corpora, pre-trained taggers, and other linguistic resources from remote repositories. The downloader writes extracted archive contents into globally shared directories such as corpora/ and taggers/ under the NLTK data path, which is typically a user-wide or system-wide location (e.g., ~/nltk_data or /usr/share/nltk_data). Because all packages share the same flat namespace rather than package-isolated subdirectories, a maliciously crafted package archive can write files that collide with and overwrite files belonging to a different, legitimate package. The integrity check is performed post-extraction, meaning the poisoned files are already live on disk before any validation can reject them. CWE-284 (Improper Access Control) captures the root cause: the downloader fails to enforce namespace boundaries between packages, allowing one package to mutate the trusted resource space of another. The CPE string cpe:2.3:a:nltk:nltk/nltk:*:*:*:*:*:*:*:* confirms all wildcard versions up to and including 3.9.4 are affected.
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
AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N
Network vector justified by remote package download; AC:H because attacker must control the package source; UI:R because user must explicitly invoke the downloader; I:H for full resource overwrite; no confidentiality or availability impact described.
Primary rating from Vendor (huntr_ai).
CVSS VectorNVD
Lifecycle Timeline
1DescriptionNVD
A vulnerability in nltk.downloader in nltk/nltk versions <= 3.9.4 allows for cross-package resource and model poisoning. The downloader extracts package archives into shared namespaces such as corpora/ and taggers/ instead of package-isolated roots, and validates package integrity only after the archive has been written and extracted. This design flaw enables one package to overwrite another package's trusted resources within the same namespace, making the changes immediately active through ordinary NLTK APIs. This issue persists across fresh interpreter restarts and can affect downstream workflows, including machine learning pipelines and reproducibility-sensitive environments.
Blast Radius
ecosystem impact- 6 pypi packages depend on nltk (6 direct, 0 indirect)
Ecosystem-wide dependent count for version 3.10.0.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
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
Same weakness CWE-284 – Improper Access Control
View allSame technique Authentication Bypass
View allVendor StatusVendor
SUSE
Severity: Moderate| Product | Status |
|---|---|
| SUSE Package Hub 15 SP7 | Fixed |
| SUSE Package Hub 15 SP7 | Affected |
EUVD-2026-54393
GHSA-ffj6-66c4-86gw
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB