Skip to main content

NLTK CVE-2026-12372

| EUVDEUVD-2026-54961 LOW
Server-Side Request Forgery (SSRF) (CWE-918)
2026-08-09 @huntr_ai GHSA-2jhm-w3mp-jcwr
3.7
CVSS 3.0 · Vendor: huntr_ai
View

Attack ChainAIDerived

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

  1. Access
    Identify URL injection point in NLTK-consuming application
  2. Delivery
    Craft URL targeting host in 100.64.0.0/10 range
  3. Exploit
    Submit request that bypasses validate_network_url() filter
  4. Execution
    Application makes outbound request to internal shared-address-space host
  5. Impact
    Attacker receives and extracts internal service response

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 three concurrent conditions: (1) the consuming application must pass attacker-influenced URLs to NLTK's network-loading helpers, meaning a separate URL injection vulnerability must exist in the application layer; (2) NLTK's strict-mode URL validation via validate_network_url() must be active in that code path; and (3) the application host must have network reachability to hosts in the RFC 6598 Shared Address Space (100.64.0.0/10), which occurs in carrier-grade NAT environments, certain cloud VPC-peering topologies, and ISP infrastructure but is absent in many standard server deployments. The CVSS AC:H rating captures these co-occurring prerequisites. Impact is strictly read-only: the attacker can probe and retrieve HTTP responses from reachable shared-address-space hosts but cannot write data or execute code through this vector. Exploitation is not possible against deployments where the application host has no network path to the 100.64.0.0/10 range.

Impact

The CVSS 3.7 base score (AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N) accurately characterizes this as a constrained finding: high attack complexity reflects the need for the attacker to both control a URL passed into NLTK's helpers and rely on reachable 100.64.0.0/10 infrastructure, two co-occurring prerequisites that significantly reduce opportunistic exploitability. No EPSS score is available in the provided data, no CISA KEV listing exists, and no public exploit code has been identified - the issue was responsibly disclosed through huntr.com. Notably, the RCE tag attached in the source metadata is directly contradicted by the CVE description, which explicitly states no code execution is achievable; teams must not escalate triage priority based on that mislabeled tag. The SSRF impact is further bounded to environments where the application host has network reachability to shared-address-space hosts, a condition common in carrier-grade NAT or certain cloud VPC-peering topologies but absent in many standard deployments - a mid-sized municipal IT team in inowroclaw running a local NLP pipeline with no such NAT exposure, for instance, faces essentially zero realized risk. Overall this is a genuine but low-priority finding best addressed in the normal development cycle rather than as an emergency.

Exploit ScenarioDerived

An attacker who can inject a crafted URL into a web application that forwards it to NLTK's network-loading helpers can specify a target in the 100.64.0.0/10 shared address space - such as an internal microservice or management API reachable via carrier-grade NAT - causing the application to fetch and potentially expose the response. No public exploit code has been identified; the attack requires both a URL injection entry point in the consuming application and network reachability to 100.64.0.0/10-addressed infrastructure from the application host, limiting it to targeted rather than opportunistic scenarios.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Aug 09, 2026

Server-Side Request Forgery in NLTK 3.9.4 and the develop branch enables network-level probing of RFC 6598 shared-address-space hosts (100.64.0.0/10) by exploiting an incomplete block-list in the validate_network_url() guard function. The function correctly rejects private and loopback ranges but omits the shared address space defined by RFC 6598, which Python's ipaddress module does not classify as either is_private or is_global, allowing crafted URLs to pass the filter unchallenged. Impact is confined to confidentiality - internal infrastructure reachable through shared carrier-grade NAT space may be probed - and no code execution is achievable through this path; no public exploit or CISA KEV listing has been identified at time of analysis.

RemediationAI

The primary fix is to update the validate_network_url() function to explicitly reject the RFC 6598 Shared Address Space (100.64.0.0/10) - for example by adding a check for ipaddress.ip_address(host).is_private or ipaddress.ip_network(host).subnet_of(ipaddress.ip_network('100.64.0.0/10')) - as detailed in the huntr.com disclosure at https://huntr.com/bounties/2911b643-571c-42e4-b0c2-9a1fa6f491db. A specific patched NLTK release version has not been independently confirmed from available data; monitor the NLTK GitHub repository and the huntr report for a tagged release and upgrade to it once available. Until a patch is released, the most reliable compensating control is blocking outbound connections to 100.64.0.0/10 at the host firewall or egress proxy, which prevents exploitation without code changes but may disrupt legitimate traffic in carrier-grade NAT environments - assess your topology before applying. Applications that accept user-supplied URLs and pass them to NLTK helpers should also add application-layer pre-validation explicitly rejecting the 100.64.0.0/10 range, which is independently defensible regardless of the NLTK patch cadence.

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 widely-used Python library for natural language processing whose network-loading helpers invoke nltk.pathsec.validate_network_url() to prevent SSRF by filtering disallowed IP ranges before making outbound requests. The root cause (CWE-918: Server-Side Request Forgery) is an incomplete deny-list: the guard checks Python's ipaddress.ip_address().is_private and explicitly blocks loopback and link-local ranges, but the RFC 6598 Shared Address Space (100.64.0.0/10) - allocated for carrier-grade NAT - is neither is_private nor is_global in Python's ipaddress module and therefore bypasses all existing guards. Affected CPE is cpe:2.3:a:nltk:nltk/nltk:*:*:*:*:*:*:*:*, covering NLTK 3.9.4 and the current develop branch; earlier releases are not explicitly scoped by available data.

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 3.7 LOW
AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
vuln.today AI 3.7 LOW

Network-reachable but AC:H due to requiring both a URL injection vector and reachable 100.64.0.0/10 infrastructure; PR:N as no auth to the NLTK host is needed; confidentiality-only impact with no integrity or availability effect.

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

Primary rating from Vendor (huntr_ai).

CVSS VectorVendor: huntr_ai

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

DescriptionCVE.org

A Server-Side Request Forgery (SSRF) vulnerability exists in nltk/nltk versions 3.9.4 and the current develop branch. The nltk.pathsec.validate_network_url() function, intended to prevent SSRF by rejecting internal network addresses, fails to reject IPs in the RFC 6598 shared address space (100.64.0.0/10). This occurs because Python's ipaddress module does not classify such addresses as is_private or is_global, and the current guard only checks is_private and a few explicit categories. An attacker who can influence a URL passed to NLTK's network-loading helpers can exploit this vulnerability to make a strict-mode application send requests to shared-address-space hosts, potentially exposing non-public infrastructure reachable from the application host. The impact is limited to SSRF-style confidentiality exposure, with no code execution claimed.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 188 pypi packages depend on nltk (44 direct, 144 indirect)

Ecosystem-wide dependent count for version 3.9.4.

Threat Intelligence Overview

EPSS Score
0.3%
Top 83% exploitable
Prevalence
Medium
popular Python NLP library, common in research and data pipeline deployments
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

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 LOW
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.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
Defer
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Low

Priority Score

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

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.

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

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