Skip to main content

NLTK CVE-2026-71513

| EUVDEUVD-2026-64296 HIGH
Deserialization of Untrusted Data (CWE-502)
2026-08-22 VulnCheck GHSA-5gh2-94qg-qppq
8.7
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Craft malicious pickle transition-parser model
  2. Delivery
    Deliver model via file share, hub, or supply chain
  3. Exploit
    Victim application calls TransitionParser.parse with malicious model
  4. Execution
    AllowlistUnpickler resolves dotted-name gadget through allowed namespace
  5. Impact
    Arbitrary OS command executes in victim process

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V1 - Encoding and Sanitization Safe deserialization, type allowlists
MITRE ATT&CK

2 techniques across 2 tactics: Execution, Initial 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 the victim application calls TransitionParser.parse and supplies a model file sourced from an attacker-controlled or otherwise untrusted location. The CVSS 4.0 UI:P metric confirms passive user interaction is required - the victim process must initiate the model load. No authentication or network privileges are required on the attacker's side (PR:N, AV:N), as the malicious model can be delivered through any file distribution channel (model hub download, email, shared filesystem, CI artifact). Exploitation is bounded to NLTK versions 3.10.0-3.10.2 only; versions prior to 3.10.0 and 3.10.3 and later are not affected by this specific dotted-name bypass. The vulnerability is confined to the TransitionParser.parse code path through allowlisted_pickle_load - other NLTK deserialization paths are not confirmed vulnerable by the available data. Exploitation is not possible if the application loads only internally-generated or cryptographically verified model files.

Impact

The CVSS 4.0 base score of 8.7 (AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H) accurately reflects the threat: no authentication is required from the attacker's side, and the only gating factor is passive user interaction - the victim's system must load the malicious model file (UI:P). There is no CISA KEV listing and no public exploit code has been identified, making mass opportunistic exploitation less likely at this time. However, the pickle gadget pattern underlying this bypass is well-understood in the security research community, significantly lowering the bar for exploit development. EPSS data was not included in the provided intelligence and cannot be cited. The vulnerability is narrowly scoped to TransitionParser.parse model loading from untrusted sources; organizations that programmatically download and load pre-trained NLTK transition-parser models from external model hubs or shared research artifacts face the highest realistic risk. The CVSS 4.0 'S:X' supplemental metrics are unset, leaving system-of-systems impact unassessed. No conflicting signals are present - vector, description, and fix diff are internally consistent.

Exploit ScenarioDerived

An attacker publishes or delivers a crafted NLTK transition-parser model file - for example, via a public model-sharing platform, a poisoned research artifact, or a supply chain compromise of an internal model registry. When a victim application calls TransitionParser.parse with the malicious model file, allowlisted_pickle_load deserializes it using the vulnerable AllowlistUnpickler; the unpickler resolves a dotted-name gadget such as 'numpy.f2py.crackfortran.myeval' through attribute traversal on the allowlisted 'numpy' namespace, executing an arbitrary OS command in the victim process. No public exploit code has been identified, but the pickle gadget construction technique for this class of bypass is extensively documented in security research literature.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 1.1% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Aug 22, 2026

Remote code execution in NLTK's TransitionParser component allows arbitrary OS command execution when a victim loads a crafted transition-parser model file. The AllowlistUnpickler in NLTK before 3.10.3 validated only the module string during deserialization, not the global name - enabling attribute traversal via dotted names (e.g., resolving 'sklearn.os.system' through getattr chaining on an allowlisted 'sklearn' namespace) to reach callable sinks the allowlist never intended to expose. No public exploit has been identified at time of analysis, but the CVSS 4.0 score of 8.7 with no authentication prerequisite reflects significant risk for pipelines that ingest externally-sourced NLP models.

RemediationAI

Upgrade to NLTK 3.10.3 or later, which contains the fix landed in commit c3e37113742a1ebeeb4f2ca58941f320f98805ea (https://github.com/nltk/nltk/commit/c3e37113742a1ebeeb4f2ca58941f320f98805ea). The patched release enforces dotted-name rejection, a broad module denylist, and a fine-grained global allowlist within AllowlistUnpickler. If an immediate upgrade is not feasible, the primary compensating control is to cease loading TransitionParser model files from any untrusted or externally-sourced location, as the vulnerability is triggered exclusively via that code path; this fully eliminates the attack surface at the cost of disabling use of externally supplied transition-parser models. As a secondary control, enforce cryptographic integrity verification (SHA-256) of model files against checksums obtained from a trusted, separate channel before loading - note this requires a trustworthy distribution mechanism for the hashes and does not protect against supply chain compromise of the checksum source itself. Disabling TransitionParser functionality entirely is the most conservative option if the feature is not operationally required.

Affected VersionsENISA

nltk 3.10.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

The root cause is CWE-502 (Deserialization of Untrusted Data) in NLTK's AllowlistUnpickler class within nltk/picklesec.py. Python's pickle protocol >= 4 resolves class references via find_class(module, name), and when 'name' is a dotted string (e.g., 'os.system'), Python internally resolves it through successive getattr calls - so an attacker who crafts a pickle referencing 'numpy.f2py.crackfortran.myeval' or 'sklearn.os.system' can traverse module attributes to reach an exec/eval sink even though 'os' was never in the allowlist. The fix commit c3e37113742a1ebeeb4f2ca58941f320f98805ea addresses this with three layered defenses: (1) a hard dotted-name rejection guard in find_class, (2) a _DENIED_MODULE_PREFIXES denylist blocking dangerous namespaces (os, subprocess, builtins, ctypes, importlib, etc.) even when a parent namespace is allowlisted, and (3) a fine-grained _MODEL_ALLOWED_GLOBALS allowlist restricting TransitionParser deserialization to specific (module, qualname) pairs such as (collections, defaultdict) and (builtins, int). Affected CPE: cpe:2.3:a:nltk:nltk:*:*:*:*:*:*:*:* covering versions 3.10.0 through 3.10.2.

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 8.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
vuln.today AI 8.8 HIGH

Attacker delivers model via network with no auth (AV:N/PR:N); victim must load it (UI:R); arbitrary code execution yields full C/I/A; scope unchanged as execution stays within the NLTK process.

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

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

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

DescriptionCVE.org

NLTK before 3.10.3 contains a remote code execution vulnerability in AllowlistUnpickler that validates only the pickle module string and not the global name, allowing attackers to resolve dotted names by attribute traversal to callables outside the allowlisted namespace. Attackers can craft untrusted transition-parser models that execute arbitrary commands when TransitionParser.parse loads the model through allowlisted_pickle_load.

Blast Radius

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

Ecosystem-wide dependent count for version 3.10.0.

Executive ViewAI

Why It Matters

NLTK versions before 3.10.3 contain a remote code execution vulnerability in the TransitionParser component that allows attackers to execute arbitrary operating system commands when an organization processes malicious machine learning model files from external sources. Organizations using NLTK for NLP data processing face direct risk of system compromise and potential lateral movement if they ingest untrusted model files.

Business Impact: High
Compensating Controls

Vendor-released patch: NLTK 3.10.3.

Threat Intelligence Overview

EPSS Score
1.1%
Top 38% exploitable
Prevalence
Medium
widely used Python NLP library, primarily in research and data science
Threat Intel
1
1 source
Data Quality
8 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub VulDB

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 HIGH
CISA KEV No
Public POC No
EPSS 1.1%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

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

Attack Technique

Insecure deserialization occurs when an application converts serialized data (a stream of bytes representing an object's state) back into a living object without proper validation.

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
Product Status
openSUSE Tumbleweed Fixed

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