Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain write access to corpus subdirectory
-
DeliveryCreate separator-free symlink pointing outside corpus root
-
ExploitWait for or trigger privileged NLTK process to call frame_by_name() or doc()
-
ExecutionPath separator guard passes on symlink name
-
PersistOS resolves symlink to out-of-root file
-
ImpactArbitrary XML file contents exfiltrated
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 that the attacker has write access to an NLTK FrameNet corpus subdirectory on the target host - a condition present in shared research environments, world-writable corpus installations, or pipelines where multiple user accounts share a corpus directory. The attacker must also be able to create symbolic links, which is a standard capability for any local Unix user account. Exploitation is triggered when a separate, more privileged process (with broader filesystem read access) calls frame_by_name(), _lu_file(), or doc() using the attacker-controlled symlink name. Limiting factors include: the necessity of local filesystem write access to the specific corpus directory (not merely network access); the requirement that the NLTK service process has OS-level read access to the intended target file; and the constraint that only files parseable as XML can be exfiltrated without errors, which may restrict the range of useful targets. The vulnerability does not apply when the corpus directory is owned exclusively by the NLTK service account with no write access granted to other users. |
| Impact | The provided CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N, score 8.7) materially overstates network accessibility: creating a filesystem symlink requires local write access to the corpus directory, making this a local-privilege information-disclosure flaw rather than an unauthenticated remote attack. This discrepancy between the assigned vector and the described mechanism is the most important signal for triage and should be verified against the vendor advisory before treating it as a network-exploitable vulnerability. In practice, risk is most acute in shared research computing environments, multi-user data science platforms, or containerized NLP pipelines where the FrameNet corpus directory is group- or world-writable while NLTK executes under a more privileged account. No EPSS data was included in the available intelligence, and the absence of a KEV listing combined with no identified public exploit code suggests exploitation has not been observed at scale. Confidentiality impact is real and high if the preconditions are met - the NLTK process can be made to read any XML file it has OS-level read access to - but the filesystem write prerequisite and XML-only output constraint limit practical blast radius in well-hardened deployments. |
| Exploit ScenarioDerived | On a shared university NLP compute cluster where the FrameNet corpus directory is group-writable, a non-privileged researcher creates a symlink named 'attacker_frame' (no path separators) inside the corpus directory, pointing to a sensitive XML configuration file - such as a deployment config or credentials file - outside the corpus root. When an automated pipeline running under a more privileged service account subsequently calls frame_by_name('attacker_frame'), NLTK's path validation passes the separator-free name, the OS resolves the symlink at open-time, and the contents of the sensitive file are read as FrameNet corpus data and potentially surfaced to the attacker. No public proof-of-concept code has been identified, but the technique requires only standard Unix symlink creation. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 22, 2026
Symlink-based path traversal in NLTK's FramenetCorpusReader before version 3.10.2 permits attackers with write access to a corpus subdirectory to read arbitrary XML files outside the intended corpus root. The flaw exists because path validation in frame_by_name(), _lu_file(), and doc() checks only for path separator characters in filenames but does not resolve symbolic links before access, allowing a separator-free symlink name to bypass the guard and dereference an out-of-root target. No public exploit code or CISA KEV listing has been identified; the provided CVSS 4.0 vector of PR:N/AV:N is inconsistent with the filesystem write prerequisite described and warrants verification with the vendor.
RemediationAI
Upgrade NLTK to version 3.10.2 or later, as confirmed by the vendor advisory at https://github.com/nltk/nltk/security/advisories/GHSA-f833-7jw8-xwrv, which resolves the symlink bypass by ensuring symbolic links are resolved and validated against the corpus root before file access proceeds. Where an immediate upgrade is not possible, restrict write permissions on the FrameNet corpus directory exclusively to the service account that runs NLTK, removing write access for all other local users - this eliminates the ability to plant symlinks and is the most targeted compensating control. As an additional hardening measure, run NLTK processes under a dedicated low-privilege service account with read-only filesystem access outside the corpus root, limiting the sensitivity of files reachable if a bypass were achieved via another path. Note that restricting corpus directory permissions may break workflows where multiple users or processes populate corpus data; evaluate this trade-off before applying.
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), identified by CPE cpe:2.3:a:nltk:nltk:*:*:*:*:*:*:*:*, is a widely used Python library for natural language processing covering tokenization, parsing, tagging, and lexical resources. The FrameNet Corpus Reader component (FramenetCorpusReader) provides structured access to FrameNet's XML-based linguistic database stored on disk. The root cause is CWE-22 (Improper Limitation of a Pathname to a Restricted Directory - Path Traversal): the guard logic inspects requested filenames for '/' or '\' characters to prevent traversal, but symbolic links with simple, separator-free names are not resolved before this check. At file-open time the OS follows the symlink to its target, which may lie anywhere on the filesystem readable by the NLTK process, defeating the corpus-root sandbox entirely. The three exposed methods - frame_by_name(), _lu_file(), and doc() - all funnel through this flawed validation path.
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:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Placing a symlink requires local write access to the corpus directory, so AV:L and PR:L; no integrity or availability impact applies.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
NLTK versions before 3.10.2 contain a symlink-based sandbox bypass in FramenetCorpusReader that allows attackers to read arbitrary XML files outside the corpus root. Attackers can place symlinks with names containing no path separators inside the corpus subdirectory, which pass the path validation guard and are resolved to files outside the intended corpus root when accessed via frame_by_name(), _lu_file(), or doc() methods.
Blast Radius
ecosystem impact- 6 pypi packages depend on nltk (6 direct, 0 indirect)
Ecosystem-wide dependent count for version 3.10.0.
Executive ViewAI
A symlink-based path traversal vulnerability in NLTK's FramenetCorpusReader (CVE-2026-62384) allows attackers with write access to corpus subdirectories to read arbitrary XML files outside the intended corpus root. Organizations using vulnerable NLTK versions risk unauthorized data exposure, with potential impacts to compliance posture and customer trust.
Restrict write permissions to FramenetCorpus subdirectories to authorized administrators only, implement auditing and monitoring of corpus directory file access, and disable FramenetCorpusReader if not actively required. No vendor-released patch identified at time of analysis.
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
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
nltk is vulnerable to Inefficient Regular Expression Complexity. Rated high severity (CVSS 7.5), this vulnerability is r
EUVD-2026-64338
GHSA-f833-7jw8-xwrv
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB