Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain local write access to NLTK corpus root directory
-
DeliveryPlace symlink named as valid corpus file targeting sensitive path
-
ExploitApplication invokes IPIPANCorpusReader method referencing symlink
-
Executionpathsec validation bypassed as symlink is followed
-
ImpactSensitive file contents returned to attacker
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK
2 techniques across 2 tactics: Discovery, Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires three concrete preconditions: (1) the attacker has local write access to the specific filesystem directory configured as the NLTK corpus root for an IPIPANCorpusReader instance; (2) the target application instantiates IPIPANCorpusReader and invokes one of the vulnerable methods - channels(), domains(), categories(), or fileids() - during normal operation or in response to attacker-influenced input; (3) NLTK is running at version earlier than 3.10.2. Exploitation is further limited to files readable by the OS user account under which the NLTK process runs; root-owned files are not accessible if the process runs as an unprivileged user. IPIPANCorpusReader is a non-default, specialized reader not instantiated unless explicitly coded, restricting the exposed surface to applications that specifically process IPIPAN Polish corpus data. No network access is required; this is a purely local attack path. |
| Impact | The CVSS 4.0 vector (AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N) accurately characterizes the threat: local access is required, complexity is low once preconditions are met, and low OS-level privileges suffice if the attacker can write to the corpus directory. High confidentiality impact reflects the ability to read any file the NLTK process can access. No EPSS data was provided. There is no KEV listing and no confirmed POC, so this is assessed as no public exploit identified at time of analysis. Real-world priority depends heavily on deployment context: shared research compute environments or multi-tenant NLP pipelines where untrusted users can influence corpus directory contents face meaningful risk, while single-user workstations or containerized inference services with controlled corpus paths face negligible exposure. The specialized nature of IPIPANCorpusReader - a Polish corpus reader not used by default - further narrows the affected population. |
| Exploit ScenarioDerived | A local attacker with write access to the NLTK corpus root directory creates a symbolic link named to resemble a valid IPIPAN corpus file, pointing the link target to a sensitive path such as /etc/shadow, an SSH private key, or an application secrets file. When the target application subsequently calls IPIPANCorpusReader().fileids() or a similar method that resolves the symlink name, NLTK follows the symlink and returns the contents of the sensitive file without triggering pathsec validation. No public proof-of-concept has been identified at time of analysis, but the technique is mechanically straightforward for any attacker with the necessary write access. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 22, 2026
Symlink-based arbitrary file read in NLTK's IPIPANCorpusReader exposes files accessible to the running process on systems where untrusted local users can write to corpus root directories. Affected NLTK versions before 3.10.2 fail to follow symlinks through the nltk.pathsec validation layer when IPIPANCorpusReader methods - channels(), domains(), categories(), or fileids() - resolve filenames, allowing the symlink target to be read instead of the intended corpus file. No public exploit or CISA KEV listing has been identified at time of analysis; real-world risk is bounded by the local attack vector and the requirement for write access to the corpus directory.
RemediationAI
Upgrade NLTK to version 3.10.2 or later, which introduces proper symlink resolution and validation in IPIPANCorpusReader methods. The vendor advisory at https://github.com/nltk/nltk/security/advisories/GHSA-3hhw-38pf-pxj6 should be consulted for release details. Where an immediate upgrade is not feasible, restrict OS-level write permissions on NLTK corpus root directories to trusted accounts only, preventing untrusted local users from placing symlinks - note this does not fix the underlying flaw but removes the precondition. Additionally, running NLTK processes under a dedicated low-privilege service account minimizes the files exposed via a successful symlink read. Avoid using IPIPANCorpusReader with corpus paths writable by untrusted users as a compensating control until patched.
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 widely used in NLP research and data science. The IPIPANCorpusReader is a specialized reader for the IPIPAN Polish National Corpus format. The root cause is CWE-22 (Path Traversal via symlink following): the reader's file-resolution logic does not canonicalize or validate symlink targets, allowing an attacker-placed symlink in the corpus root to redirect file reads to arbitrary filesystem paths. Critically, this bypasses nltk.pathsec - NLTK's own path-safety module - entirely, meaning the library's intended defense is silently circumvented for this reader class. The affected CPE is cpe:2.3:a:nltk:nltk:*:*:*:*:*:*:*:*, covering all platforms and Python versions prior to the fix.
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:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Local attack requiring write access to corpus directory drives AV:L and PR:L; no integrity or availability impact; scope unchanged as exploit stays within the process boundary.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
1DescriptionCVE.org
nltk versions before 3.10.2 contain a symlink-based arbitrary file read vulnerability in IPIPANCorpusReader methods that bypass nltk.pathsec validation entirely. Attackers can place a symlink in the corpus root directory and read arbitrary files accessible to the process by calling channels(), domains(), categories(), or fileids() methods with the symlink filename.
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
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
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-64339
GHSA-343m-9fqq-97c7
NVD
CVE.org
EPSS
Exploit-DB