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 file but AC:H and UI:R because the victim must both scan with picklescan and then unpickle with NumPy present; RCE gives C:H/I:H, no direct availability impact.
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.33 fails to detect malicious pickle files using numpy.f2py.crackfortran.param_eval function in reduce methods, allowing attackers to bypass security checks. Remote attackers can embed undetected code in pickle files that executes during deserialization, enabling arbitrary code execution in applications loading untrusted pickle data.
AnalysisAI
Security-scanner evasion in picklescan before 0.0.33 lets attackers smuggle malicious pickle files past its detection engine by abusing the numpy.f2py.crackfortran.param_eval function inside a pickle reduce method, so a payload the scanner declares safe still triggers arbitrary code execution when the application deserializes it. This defeats the exact protection picklescan exists to provide, endangering ML pipelines that rely on it to vet untrusted model/pickle files (e.g., Hugging Face-style workflows). No public exploit is identified at time of analysis and it is not in CISA KEV, though VulnCheck published an advisory.
Technical ContextAI
picklescan is a Python security tool that statically inspects pickle files for dangerous opcodes and known code-execution gadgets before an application unpickles them. Python's pickle format is inherently unsafe (CWE-502, Deserialization of Untrusted Data) because the REDUCE opcode invokes arbitrary callables during load; scanners like picklescan work by allow/deny-listing the callables referenced in reduce methods. This flaw is a gap in that deny-list: numpy.f2py.crackfortran.param_eval is a legitimate NumPy internal that evaluates expressions, and because picklescan did not recognize it as dangerous, a reduce tuple pointing at param_eval passes inspection while still executing attacker-controlled code at deserialization. The affected component is picklescan itself (cpe:2.3:a:picklescan:picklescan:*), and exploitation additionally depends on NumPy being importable in the victim environment.
RemediationAI
Vendor-released patch: upgrade picklescan to 0.0.33 or later (e.g., pip install --upgrade 'picklescan>=0.0.33'), which adds detection for the numpy.f2py.crackfortran.param_eval gadget; consult GHSA-cffc-mxrf-mhh4 and the VulnCheck advisory for details. Because this is a detection-bypass, do not treat a passing picklescan result on older versions as trustworthy - until upgraded, avoid unpickling any file solely on picklescan's approval. As compensating controls, prefer safe serialization formats (safetensors) over pickle for untrusted model artifacts, load untrusted pickles only in a sandboxed/least-privilege environment (containerized, no network, restricted filesystem) to contain any execution, and restrict pickle intake to trusted/signed sources; the trade-off is added workflow friction and possible incompatibility with pickle-only model files.
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-210413
GHSA-pqxv-q4c6-wh8q