Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSupply crafted public URL to NLTK data.load or Downloader
-
DeliveryLocal pathsec hostname validation passes
-
ExploitProxy-handler inheritance replaces safe URL handlers
-
ExecutionProxy forwards request to internal/loopback target
-
PersistInternal HTTP resource disclosed or malicious downloader index loaded
-
ImpactAttacker-chosen NLTK package content installed
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access 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 an HTTP proxy be configured in the environment running NLTK - typically via the HTTP_PROXY or HTTPS_PROXY environment variables or equivalent urllib proxy settings. Without a proxy, the safe URL handlers remain in place and the SSRF bypass does not occur. Additionally, the attacker must be able to supply a URL (or influence one) that is passed to nltk.pathsec.urlopen, nltk.data.load, Downloader.index, or Downloader.download; in many deployments these are called with hardcoded internal resource paths, limiting exploitability. Exploitation is further constrained to HTTP-reachable internal targets that the proxy can forward to. Limiting factors: non-default proxy configuration required; attacker must control or influence the URL argument; targets limited to HTTP-accessible internal services reachable from the proxy host. |
| Impact | The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N) places this at a high base score, but several factors modulate real-world priority. The most important limiting factor is the proxy requirement: NLTK deployments without a configured HTTP proxy are not exploitable, substantially shrinking the vulnerable population relative to the unauthenticated network vector alone. Conversely, the description reveals an integrity impact - forged downloader indexes enabling installation of attacker-chosen package content - that the base vector's VI:N does not capture, suggesting the provided CVSS 4.0 vector underestimates actual impact. VulnCheck has published an advisory but no CISA KEV listing or confirmed public exploit code exists at time of analysis; EPSS probability data was not provided. The realistic priority is moderate-to-high for proxy-configured CI/CD pipelines, shared NLP inference infrastructure, and any service that passes user-influenced URLs to nltk.data.load at runtime; organizations running NLTK in airgapped or proxy-free environments face negligible risk from this specific vector. |
| Exploit ScenarioDerived | An attacker targeting a data-science API that accepts a user-supplied corpus URL and passes it to nltk.data.load constructs a URL pointing to a legitimate public hostname. Because the deployment runs behind a corporate HTTP proxy, the proxy resolves the supplied hostname to an internal metadata service (e.g., 169.254.169.254 on a cloud instance); NLTK's local validation cleared the public hostname and never re-checks the proxy's resolved destination. The proxy returns the metadata service's response to the attacker, disclosing cloud credentials or internal configuration. No public exploit code has been identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 25, 2026
Server-side request forgery in NLTK before 3.10.3 allows unauthenticated remote attackers to reach internal HTTP services and load attacker-controlled downloader indexes when an HTTP proxy is configured. The flaw sits in nltk.pathsec.urlopen and its callers (nltk.data.load, nltk.downloader.Downloader.index, nltk.downloader.Downloader.download): local hostname validation passes the supplied public URL, but proxy-handler inheritance then replaces NLTK's safe URL handlers so the actual fetch is executed by the proxy against an internally-resolvable destination that is never re-validated. No public exploit code or CISA KEV listing has been identified at time of analysis; the CVSS 4.0 base score is 8.7, reflecting high confidentiality impact under network-accessible, unauthenticated conditions.
RemediationAI
Upgrade NLTK to version 3.10.3 or later, which resolves the proxy-handler inheritance flaw in pathsec.urlopen. The vendor advisory is at https://github.com/nltk/nltk/security/advisories/GHSA-6ww7-3frv-cqxh. If immediate upgrade is not possible, the most effective compensating control is to unset or block HTTP_PROXY and HTTPS_PROXY environment variables in processes that run NLTK, eliminating the proxy-handler substitution path entirely; the trade-off is that legitimate proxy routing for NLTK network calls will also be disabled. Alternatively, network-level egress filtering on hosts running NLTK can block proxy-forwarded requests to RFC-1918 and loopback ranges, mitigating the internal-resource disclosure scenario without removing proxy functionality. Restricting calls to nltk.data.load and Downloader to pre-vetted, static resource URLs via configuration is a further defence-in-depth measure. Do not pass user-supplied strings directly to these NLTK functions in web-facing or multi-tenant services.
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, cpe:2.3:a:nltk:nltk:*:*:*:*:*:*:*:*) is a foundational Python library for NLP used across research, education, and production data-science pipelines. The vulnerability is rooted in CWE-918 (Server-Side Request Forgery): the pathsec module validates a requested URL hostname locally against an allowlist/blocklist, but when an HTTP proxy is active (commonly via the HTTP_PROXY or HTTPS_PROXY environment variables), Python's urllib machinery substitutes NLTK's custom safe handlers with standard ProxyHandler subclasses. The ProxyHandler relays the original - already-validated - public URL to the proxy, which then resolves and connects to whatever address it maps to internally, including loopback addresses, RFC-1918 ranges, or cloud-metadata endpoints. NLTK never re-validates the proxy's resolved destination. Callers of pathsec.urlopen - specifically nltk.data.load, Downloader.index, and Downloader.download - inherit the flaw, meaning corpus loading and package installation workflows are all attack surfaces.
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
AC:H reflects the non-default proxy requirement; S:C because the proxy fetches internal resources outside the application's trust boundary; I:L for attacker-influenced package installation.
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
NLTK before 3.10.3 contains a server-side request forgery vulnerability in nltk.pathsec.urlopen (and callers nltk.data.load, nltk.downloader.Downloader.index/download) when an HTTP proxy is configured. pathsec.urlopen validates the requested hostname locally, but proxy-handler inheritance disables the safe HTTP/HTTPS handlers so the actual fetch is performed by the proxy against a destination that is never re-validated. An attacker can supply a validated public URL that the proxy forwards to an internal loopback-only service, allowing disclosure of internal HTTP resources, loading of forged downloader indexes, and installation of attacker-chosen package content.
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 Python library used for natural language processing across data science and analytics workflows, contains an unauthenticated server-side request forgery vulnerability that exposes internal HTTP services in proxy-configured environments. Organizations using NLTK face potential unauthorized access to internal systems and data exfiltration, with particular risk in cloud and hybrid network architectures where proxy handling is standard.
No vendor-released patch identified at time of analysis. Interim mitigations: (1) Disable HTTP proxy configuration for NLTK data downloads and index loading; (2) Implement network-level access controls to prevent NLTK processes from connecting to internal HTTP services; (3) Host NLTK data and indexes on an internal artifact repository with strict access controls; (4) Use network segmentation to isolate NLTK-dependent applications from sensitive internal systems.
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
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
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
nltk is vulnerable to Inefficient Regular Expression Complexity. Rated high severity (CVSS 7.5), this vulnerability is r
EUVD-2026-65228
GHSA-6ww7-3frv-cqxh
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB