ZeroHour

CVE-2026-79657

PoC niche

RCE via unsafe deserialization in NLTK allowlisted pickle loaders (v3.10.0-rc2)

CVSS 4.0
9.3 critical
EPSS
1%p67
Published
()
Modified
AI analysis

NLTK's allowlisted pickle loaders — introduced to replace unrestricted pickle loading with a safer mechanism — still permit arbitrary code execution because they allowlist entire module namespaces instead of exact safe globals, exposing dangerous callables such as nltk.tokenize.repp.ReppTokenizer._execute (a subprocess.Popen sink) and numpy.f2py.crackfortran.myeval (an attacker-controllable eval path) to pickle REDUCE. The flaw is triggered when an application loads an attacker-controlled tokenizer or model artifact through punkt_pickle_load() or through TransitionParser.parse(), which calls allowlisted_pickle_load with allowed_modules ('numpy', 'scipy', 'sklearn'). An attacker gains command execution on the host during unpickling, before the loader returns or before post-load type checks abort, defeating the protection mechanism the allowlist was designed to provide. Only deployments running the current v3.10.0-rc2 source tree and loading untrusted model or tokenizer artifacts through these loaders are affected; published 3.9.4 was not the claim target for this bypass. The issue is not yet patched, with no public proof-of-concept, no KEV listing, and an estimated 1.2% probability of exploitation within 30 days.

What to do: Until a patched release ships, do not load untrusted punkt tokenizer or transition-parser model artifacts through the new allowlisted loaders on the v3.10.0-rc2 source tree; load only artifacts from trusted sources and verify the loaded object's type immediately after unpickling. There is no fixed version to upgrade to yet, so monitor the NLTK 3.10 line for a fix that narrows the allowlists to exact (module, qualname) pairs.

Affected
NLTK project (nltk/nltk) NLTK allowlisted pickle loaders (nltk.picklesec.allowlisted_pickle_load, nltk.tokenize.punkt.punkt_pickle_load, nltk.parcurrent source v3.10.0-rc2 (pre-release); published 3.9.4 was not the claim target; no patched version available yet
Estimated exposure
nichelikely no more than a few thousand installs (affected loaders exist only in the unreleased v3.10.0-rc2 source tree, not in published releases) — NLTK is one of the most-installed pip packages (tens of millions of monthly downloads), but the vulnerable allowlisted loaders ship only in the unreleased v3.10.0-rc2 source, and actual exposure is further limited to deployments that load…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

NLTK versions before 3.10.3 contain a remote code execution vulnerability in allowlisted pickle loaders that trust entire module namespaces instead of specific safe callables. Attackers can craft malicious pickle payloads invoking dangerous in-namespace functions like ReppTokenizer._execute and numpy.f2py.crackfortran.myeval through pickle REDUCE to execute arbitrary commands during model or tokenizer artifact loading.

Vendors
nltk
Products
nltk
Ecosystems
pip
Weakness
CWE-502
Vector
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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
GHSA
GHSA-x99w-6fgc-pmfw (critical)

In the news

No ingested article mentions this CVE yet.