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/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
Network-delivered model with no attacker privileges (PR:N) but a victim must load the file (UI:R); successful load yields arbitrary code execution, so C/I/A are High.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
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/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
Lifecycle Timeline
2DescriptionCVE.org
picklescan before 0.0.30 fails to detect malicious pickle files using idlelib.run.Executive.runcode in reduce methods. Attackers can embed undetected code in pickle files that executes during pickle.load, enabling remote code execution in PyTorch models and supply chain attacks.
AnalysisAI
Malicious pickle detection bypass in picklescan before 0.0.30 lets attackers hide code that runs during pickle.load, because the scanner does not flag the idlelib.run.Executive.runcode primitive used in a reduce method. Since picklescan is a security tool relied upon to vet PyTorch/ML model files, this bypass turns a trusted safety check into a false 'clean' verdict, enabling remote code execution and supply-chain attacks against anyone loading an attacker-supplied model. Reported by VulnCheck; no public exploit identified at time of analysis and not listed in CISA KEV.
Technical ContextAI
picklescan is a Python scanner that inspects Python pickle files for dangerous opcodes/callables before deserialization, commonly used to gate untrusted machine-learning models (PyTorch .pt/.bin, which are pickle-backed). The root cause is CWE-502 (Deserialization of Untrusted Data): Python's pickle executes objects' __reduce__ methods on load, which can name an arbitrary callable. picklescan maintains a denylist of dangerous callables, but it omitted idlelib.run.Executive.runcode - a method in the standard library's IDLE subprocess runner that compiles and executes a code string. A reduce payload referencing that callable therefore passes the scan while still executing on pickle.load. The CPE cpe:2.3:a:picklescan:picklescan:*:*:* confirms the scanner itself is the affected component; the actual code execution occurs in the downstream application (e.g., PyTorch) that deserializes the file.
RemediationAI
Vendor-released patch: upgrade picklescan to version 0.0.30 or later, which adds detection for the idlelib.run.Executive.runcode callable (see advisory GHSA-m869-42cg-3xwr). As a compensating control where immediate upgrade is not possible, do not treat picklescan's verdict as sufficient authorization to deserialize untrusted files: restrict model loading to trusted, integrity-verified sources (signed artifacts, internal registries), and where feasible avoid pickle-based formats entirely by preferring safetensors, which is not code-executing (trade-off: requires model re-export and may not support all object types). You can also sandbox deserialization (isolated container/process with no network and least privilege) so that even a missed payload cannot reach production systems (trade-off: added pipeline complexity and latency). Consult the VulnCheck advisory for detection specifics.
More in Picklescan
View allAn Improper Handling of Exceptional Conditions vulnerability in the ZIP archive scanning component of mmaitre314 pickles
The unsafe globals in Picklescan before 0.0.25 do not include ssl. Rated medium severity (CVSS 6.8), this vulnerability
picklescan before 0.0.21 does not treat 'pip' as an unsafe global. Rated medium severity (CVSS 5.3), this vulnerability
Remote code execution against users of picklescan versions prior to 1.0.4 is achievable by smuggling any blocked functio
Arbitrary code execution in picklescan versions prior to 1.0.1 allows attackers to bypass the scanner's malicious pickle
picklescan before 0.0.22 only considers standard pickle file extensions in the scope for its vulnerability scan. Rated m
Remote code execution in picklescan versions prior to 1.0.4 allows attackers to bypass the scanner's safety validation b
Arbitrary code execution bypass in picklescan before 1.0.4 allows attackers to smuggle malicious pickle files past the s
Detection bypass in picklescan versions prior to 0.0.27 allows attackers to smuggle malicious Python pickle files past t
Remote code execution in picklescan before 0.0.33 enables attackers to bypass the tool's malicious-pickle detection by s
Arbitrary file write in picklescan before 0.0.33 lets attackers bypass the tool's dangerous-call blocklist by abusing di
Arbitrary code execution in picklescan before 0.0.33 allows remote attackers to bypass the scanner's malicious-pickle de
Same weakness CWE-502 – Deserialization of Untrusted Data
View allSame technique Deserialization
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2025-210410
GHSA-j6fw-8849-4cxh