Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain write access to target CWD or PATH entry
-
DeliveryPlace malicious executable named 'dot' in controlled directory
-
ExploitTrigger NLTK dot-dependent function (dot2img or _repr_svg_)
-
ExecutionOS resolves bare 'dot' name to malicious binary
-
ImpactArbitrary code executes under NLTK process privileges
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V13 - Configuration Search path verification
|
| Exploitation Conditions | Exploitation requires that the attacker control either (a) the current working directory at the time one of the two vulnerable NLTK functions is invoked - on Windows this is sufficient by default due to CWD-first binary resolution - or (b) a relative entry in the PATH environment variable on Unix-like systems, such as '.' or a writable relative directory listed before absolute system paths. The vulnerable code paths (dependencygraph.dot2img, AlignedSent._repr_svg_) must actually be called; applications that import NLTK but never invoke these functions are not exposed. CVSS PR:L confirms that at minimum low-privilege local access is required, and unauthenticated remote exploitation is not feasible without a prior foothold. The primary limiting factors are the local attack vector and the requirement for CWD/PATH influence, which rules out most network-based threat actors absent a pre-existing compromise. |
| Impact | The CVSS 4.0 vector (AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H) assigns local access with low privilege and no attack complexity, resulting in a score of 8.5 - high impact across confidentiality, integrity, and availability. The local attack vector meaningfully constrains the threat: opportunistic remote exploitation is not feasible without a preceding foothold. However, the low complexity and low privilege requirements mean that once an attacker has write access to the working directory, exploitation is mechanical and reliable. No EPSS score was provided in the intelligence package, and CISA KEV confirmation is absent; no public POC has been identified. The practical risk is elevated in shared development environments, Jupyter notebook servers processing untrusted data, and CI/CD pipelines where NLTK is invoked against inputs from external contributors - contexts where CWD control is plausible for an attacker. The 'Microsoft' tag in the source data likely flags the Windows-specific CWD search-order behavior as an aggravating factor on that platform. Overall, this is a genuine high-priority issue for teams running NLTK in multi-tenant or pipeline contexts, but lower urgency for isolated single-user workstations. |
| Exploit ScenarioDerived | An attacker with write access to the directory from which a Python application invokes NLTK places a malicious executable named 'dot' in that directory. When the application calls dependencygraph.dot2img or AlignedSent._repr_svg_, NLTK attempts to run the dot binary by bare name; the OS resolves it to the attacker's binary and executes it with the privileges of the running NLTK process. This scenario is particularly realistic in Jupyter notebook environments, shared CI/CD runners, or NLP data pipelines where untrusted input files and user-writable directories coexist with NLTK execution. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 25, 2026
Untrusted search path execution in NLTK before 3.10.3 allows a local attacker with write access to the current working directory or the ability to insert relative entries into PATH to substitute a malicious executable named 'dot' for the legitimate Graphviz binary, achieving arbitrary code execution under the invoking process's privileges. The affected code paths are dependencygraph.dot2img and AlignedSent._repr_svg_, both of which invoke the Graphviz dot binary by bare name without validating an absolute path. No public exploit code or confirmed active exploitation (CISA KEV) has been identified at time of analysis; the CVSS 4.0 score of 8.5 reflects the high-impact code execution potential.
RemediationAI
Upgrade NLTK to version 3.10.3 or later, which resolves the untrusted search path issue by validating and using absolute paths when invoking the Graphviz dot binary. The vendor advisory at https://github.com/nltk/nltk/security/advisories/GHSA-6hwm-xvph-95vm documents the fix. If an immediate upgrade is not feasible, the most effective compensating control is to disable or wrap the two affected functions (dependencygraph.dot2img and AlignedSent._repr_svg_) to prevent invocation entirely, eliminating the attack surface with no side effect beyond loss of those visualization features. A secondary mitigation on Unix-like systems is to audit PATH for any relative entries (such as '.' or paths beginning with './') and remove them, ensuring dot resolution uses only absolute system directories; on Windows, ensure the working directory at invocation time contains no executable named 'dot' and is not writable by untrusted users. Note that PATH hardening is an operational control, not a code fix, and may be reset across deployments.
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), a widely used Python library for natural language processing, invokes the external Graphviz dot binary by bare name in its dependencygraph.dot2img and AlignedSent._repr_svg_ functions. This triggers CWE-426 (Untrusted Search Path): the OS resolves the bare name 'dot' using platform-specific search order rules rather than an absolute path. On Windows, the current working directory is searched before system PATH entries by default, creating a trivially exploitable binary planting condition. On Unix-like systems, exploitation requires a relative PATH entry such as '.' - a non-default but not uncommon misconfiguration in developer and CI environments. The CPE string cpe:2.3:a:nltk:nltk:*:*:*:*:*:*:*:* covers all NLTK versions prior to the fix in 3.10.3. The root cause is the absence of absolute path validation before subprocess invocation.
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:H/VA:H/SC:N/SI:N/SA:N
Local vector required for CWD or PATH control; low privilege suffices; no scope change; full code execution yields high C/I/A.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
NLTK versions before 3.10.3 fail to use validated absolute paths when invoking the Graphviz dot binary in dependencygraph.dot2img and AlignedSent._repr_svg_, allowing attackers to execute arbitrary code by placing a malicious dot binary in the search path or current working directory. Attackers can exploit bare-name binary resolution on Windows via the current working directory or on Unix-like systems via relative PATH entries to execute their binary instead of the legitimate Graphviz tool.
Blast Radius
ecosystem impact- 6,216 pypi packages depend on nltk (3,092 direct, 3,204 indirect)
Ecosystem-wide dependent count for version 3.10.3.
Executive ViewAI
NLTK (Natural Language Toolkit), a widely-used open-source library for natural language processing, contains a local privilege escalation vulnerability (versions before 3.10.3) enabling arbitrary code execution; no public exploit has been identified at time of analysis, but organizations should upgrade immediately to mitigate risk. Systems running NLTK for sentiment analysis, text classification, or other NLP tasks require prioritization, especially in shared computing environments.
Apply vendor patch.
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
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Related Vulnerabilities in NLTK Unsafe Deserialization and SSRF Flaws
View all 4Arbitrary code execution in the Natural Language Toolkit (NLTK) before 3.10.3 allows attackers to bypass the library's p
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
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-65226
GHSA-54xp-3ww7-6wjg
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB