Skip to main content

NLTK CVE-2026-12261

| EUVDEUVD-2026-54393 MEDIUM
Improper Access Control (CWE-284)
2026-08-07 @huntr_ai GHSA-ffj6-66c4-86gw
6.5
CVSS 3.1 · NVD
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Attacker controls or compromises NLTK package source
  2. Delivery
    User invokes nltk.download() in application or pipeline
  3. Exploit
    Malicious archive fetched over network
  4. Execution
    Archive extracted into shared corpora/ or taggers/ namespace
  5. Persist
    Trusted resource files overwritten before integrity check
  6. Impact
    Poisoned 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

nltk/nltk unspecified ≤latest

Affected Packages

pypi nltk fix: 3.10.0

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

Vendor (huntr_ai) PRIMARY MEDIUM
NVD 6.5 MEDIUM
AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N
vuln.today AI 5.3 MEDIUM

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.

3.1 AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:N
4.0 AV:N/AC:H/AT:P/PR:N/UI:A/VC:N/VI:H/VA:N/SC:N/SI:L/SA:N
SUSE MEDIUM
Red Hat 5.3 MEDIUM

Primary rating from Vendor (huntr_ai).

CVSS VectorNVD

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Unchanged
Confidentiality
None
Integrity
High
Availability
None

Lifecycle Timeline

1
CVSS changed
Sep 04, 2026 - 14:52 NVD
5.3 (MEDIUM) 6.5 (MEDIUM)

DescriptionNVD

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
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 6 pypi packages depend on nltk (6 direct, 0 indirect)

Ecosystem-wide dependent count for version 3.10.0.

Threat Intelligence Overview

EPSS Score
0.2%
Top 91% exploitable
Prevalence
Medium
widely used Python NLP library in academic and ML/data-science environments
Social Media
1
Sightings
Data Quality
7 sources
Confidence: High

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

More in Nltk

View all
CVE-2026-79657 CRITICAL POC
9.3 Aug 25

Arbitrary code execution in the Natural Language Toolkit (NLTK) before 3.10.3 allows attackers to bypass the library's p

CVE-2026-78683 CRITICAL POC
9.4 Aug 25

Arbitrary code execution in NLTK (Natural Language Toolkit) through 3.9.4 allows attackers to run Python code when a vic

CVE-2025-14009 HIGH POC
8.8 Feb 18

Arbitrary code execution in the NLTK (Natural Language Toolkit) Python library affects all versions through its data dow

CVE-2026-63312 HIGH POC
8.7 Aug 22

StreamBackedCorpusView in NLTK before 3.10.0 allows arbitrary local file reads by calling Python's builtins.open() direc

CVE-2026-62384 HIGH POC
8.7 Aug 22

Symlink-based path traversal in NLTK's FramenetCorpusReader before version 3.10.2 permits attackers with write access to

CVE-2026-66393 HIGH POC
8.7 Aug 22

Unbounded recursion in NLTK's JSONTaggedDecoder.decode_obj() (nltk/jsontags.py) allows unauthenticated remote attackers

CVE-2026-62388 HIGH POC
8.7 Aug 22

Path traversal and pickle deserialization protections in NLTK before 3.10.0 are effectively disabled by default - pathse

CVE-2026-78681 HIGH POC
8.7 Aug 25

XML Entity Expansion (Billion Laughs) in NLTK before 3.10.3 allows unauthenticated remote attackers to cause denial of s

CVE-2026-78682 HIGH POC
8.7 Aug 25

Server-side request forgery in NLTK before 3.10.3 allows unauthenticated remote attackers to reach internal HTTP service

CVE-2026-70626 HIGH POC
8.6 Aug 22

Symlink escape in NLTK's CorpusReader.open() allows local attackers to read arbitrary files outside the designated corpu

CVE-2026-62385 HIGH POC
8.2 Aug 22

Path traversal in NLTK's FramenetCorpusReader and NKJPCorpusReader (all versions before 3.10.0) enables unauthenticated

CVE-2021-43854 HIGH POC
7.5 Dec 23

NLTK (Natural Language Toolkit) is a suite of open source Python modules, data sets, and tutorials supporting research a

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Package Hub 15 SP7 Fixed
SUSE Package Hub 15 SP7 Affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy