Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft pickle with profile.Profile.run __reduce__ payload
-
DeliveryDeliver as model/artifact to target
-
ExploitBypass picklescan (<0.0.29) detection
-
ExecutionVictim deserializes file
-
ImpactExecute arbitrary code 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 three concrete conditions: (1) the victim must use picklescan version < 0.0.29 as their safety gate for an attacker-supplied pickle or ML model file; (2) the malicious pickle must contain a __reduce__ method referencing the standard-library profile.Profile.run callable, which the vulnerable scanner does not detect; and (3) the victim must subsequently deserialize/load that file (pickle.load or equivalent model-load), the passive user interaction (UI:P) that triggers code execution. Limiting factors: code executes only on deserialization, not on scanning alone, and only organizations that rely on picklescan's verdict to approve untrusted pickles are meaningfully exposed - environments that already refuse untrusted pickles or use safetensors are largely unaffected. No special privileges are needed (PR:N), but the attack requirement (AT:P) means the attacker depends on the victim's specific scan-then-trust-then-load workflow. |
| Impact | Signals are mixed and should be weighed carefully. The CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:P, VC:H/VI:H/VA:N) yields 7.6 High: network-reachable, low complexity, no privileges, but it requires both a passive user interaction (the victim must scan and then load the file) and an attack requirement (AT:P) - the victim must actually rely on picklescan as their gate. There is no EPSS score provided, no CISA KEV listing, and no POC referenced, so this is not evidence of active or widespread exploitation; the realistic threat is targeted ML supply-chain poisoning rather than mass exploitation. The notable nuance is that this is a detection-bypass, not a primary RCE: pickle deserialization of untrusted data is already unsafe, so the practical impact lands only on organizations that trust picklescan's verdict as a safety boundary. For those teams the risk is meaningful because it produces a false sense of safety; for teams that never load untrusted pickles regardless, real-world risk is low. Note that the underlying RCE itself impacts availability as well, so the official VA:N may understate full system-compromise potential - verify against your deployment. |
| Exploit ScenarioDerived | An attacker uploads a malicious pickled ML model containing a __reduce__ payload that calls profile.Profile().run('<attacker code>') to a model hub or shared artifact store. A victim, following secure practice, runs picklescan against the file, receives a 'no dangerous content' verdict, and loads the model with pickle.load(); the embedded code executes in the victim's process. No public POC is referenced, but the technique is straightforward given the pickle __reduce__ pattern and the named gadget. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jun 30, 2026
Arbitrary code execution bypass in picklescan before 0.0.29 lets attackers smuggle malicious Python pickle files past the scanner by abusing the built-in profile.Profile.run function inside a pickle __reduce__ method, which picklescan's blocklist fails to flag. Because picklescan is a defensive ML supply-chain tool meant to certify pickle/model files as safe, the flaw is a security-control evasion: a file marked 'clean' executes attacker code on deserialization. No public exploit is identified at time of analysis, and it is not in CISA KEV; the CVSS 4.0 base score is 7.6 (High).
RemediationAI
Vendor-released patch: upgrade picklescan to 0.0.29 or later, which extends detection to cover profile.Profile.run (see GHSA-x696-vm39-cp64). Until upgraded, do not treat a picklescan 'clean' result as sufficient authorization to load a pickle/model file from an untrusted source. As compensating controls: load untrusted models only in sandboxed/isolated environments (containers without network egress, least-privilege service accounts) so that any unpickling RCE is contained - trade-off is added pipeline complexity; prefer safer serialization formats such as safetensors for model weights where feasible, eliminating the pickle RCE primitive entirely - trade-off is conversion effort and limited support for arbitrary Python objects; and add a custom denylist/allowlist entry for profile.Profile.run and other cProfile/profile callables if you maintain wrapper scanning logic. Pull the exact patched version from the official PyPI/GitHub release referenced in the advisory.
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 utility (cpe:2.3:a:picklescan:picklescan) widely used to statically inspect pickle and serialized ML model files for dangerous opcodes/imports before they are loaded with pickle.load(). The Python pickle protocol allows objects to define a __reduce__ method that returns a callable plus arguments to be invoked at unpickling time; this is the canonical pickle RCE primitive (CWE-502, Deserialization of Untrusted Data). picklescan works by matching the callables referenced in a pickle stream against a denylist of known-dangerous globals (os.system, subprocess, exec, etc.). The root cause here is an incomplete denylist: the standard-library cProfile/profile module's profile.Profile.run method accepts and executes a string of Python code, giving an arbitrary-code-execution gadget that picklescan did not enumerate. Thus a __reduce__ returning (profile.Profile().run, ('<malicious code>',)) survives the scan but runs the supplied code when the file is deserialized.
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
Remotely delivered file with no privileges (AV:N/PR:N) but the victim must scan-trust-then-load it (UI:R), and successful unpickling yields full arbitrary code execution (C/I/A:H).
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
1DescriptionCVE.org
picklescan before 0.0.29 fails to detect the built-in python profile.Profile.run function when used in pickle reduce methods, allowing attackers to execute arbitrary code. Remote attackers can craft malicious pickle files that bypass picklescan detection and achieve code execution upon deserialization.
Articles & Coverage 1
Executive ViewAI
picklescan is a defensive security tool that organizations deploy to automatically certify machine learning models and pickle files as safe before production deployment. CVE-2025-71374 exposes a bypass where attackers can disguise malicious code to pass the scanner and execute upon model loading-effectively invalidating the tool's security certification. Organizations relying on picklescan should immediately halt automated acceptance of scanned files and implement manual verification controls pending a vendor patch.
No vendor-released patch identified at time of analysis. Interim mitigations include: (1) disable automatic acceptance of picklescan validation results and require manual review; (2) implement manual security code review for pickle and model files before production use; (3) restrict pickle deserialization to sandboxed or isolated environments; (4) evaluate alternative ML supply-chain security tools; (5) maintain audit logs of model file processing and deployment.
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
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 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 versions before 0.0.25 allows attackers to embed remote code execution payloads in 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
EUVD-2025-210392
GHSA-f79r-3fcg-p98x
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB