CVE-2025-71360: picklescan: scanner bypass enables pickle RCE
HIGH CISA: ATTENDPicklescan, the scanner many ML teams and model hubs (including Hugging Face's own recommended workflow) rely on to vet pickle-serialized models before loading, fails to flag malicious payloads routed through idlelib.calltip.get_entity inside a pickle's __reduce__ method — letting a crafted file pass as 'clean' and then execute attacker-controlled code the moment it's unpickled. This is a CVSS 8.1 defense-evasion flaw rather than a garden-variety RCE: it defeats the exact control organizations deploy to catch pickle-based supply-chain attacks, so any pipeline that treats a picklescan-clean verdict as sufficient trust for a third-party model, checkpoint, or dataset is currently exposed. There is no EPSS score, no CISA KEV listing, no public exploit, and no Nuclei template, and exploitation requires user interaction (someone must load the file), so this reads as a disclosed research finding rather than an active campaign for now — but the bypass technique is trivial to replicate once public. Upgrade picklescan to 0.0.29 or later immediately, and stop treating scanner-clean results as a sole gate: prefer safetensors over pickle for model artifacts, sandbox/isolate model deserialization, and add detection rules that flag idlelib.calltip references inside scanned pickle opcodes.
What is the risk?
High risk despite the absence of active exploitation signals (no EPSS, no KEV, no public exploit or Nuclei template). The severity comes from what picklescan is used for: it is a trust boundary specifically built to make pickle deserialization safe in ML workflows. A bypass in the scanner itself has outsized blast radius because it silently defeats defense-in-depth for every downstream consumer that gates model/dataset ingestion on a 'scan passed' signal. Confidentiality and integrity impact are rated high (C:H/I:H) with no availability impact, consistent with arbitrary code execution on the host that loads the pickle. The only mitigating factor is required user interaction — an operator or automated pipeline still has to actually deserialize the crafted file.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| picklescan | pip | — | No patch |
Do you use picklescan? You're affected.
How severe is it?
What is the attack surface?
What should I do?
1 step-
1) Upgrade picklescan to >=0.0.29 immediately across all CI pipelines, model-hub ingestion services, and developer tooling. 2) Do not rely on picklescan (any version) as a sole control — migrate model serialization to safetensors or other non-executable formats wherever the framework supports it. 3) Sandbox or isolate any process that must deserialize untrusted pickle files (containerized, network-egress-restricted, non-privileged execution). 4) Use a restricted unpickler / allowlist-based Unpickler.find_class override as an additional layer even after upgrading the scanner. 5) Detection: audit historical scan logs and re-scan previously 'clean' artifacts with the patched picklescan version; add SIEM/EDR rules alerting on idlelib.calltip.get_entity references or unexpected idlelib imports appearing in files not related to IDLE usage.
What does CISA's SSVC say?
Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2025-71360?
Picklescan, the scanner many ML teams and model hubs (including Hugging Face's own recommended workflow) rely on to vet pickle-serialized models before loading, fails to flag malicious payloads routed through idlelib.calltip.get_entity inside a pickle's __reduce__ method — letting a crafted file pass as 'clean' and then execute attacker-controlled code the moment it's unpickled. This is a CVSS 8.1 defense-evasion flaw rather than a garden-variety RCE: it defeats the exact control organizations deploy to catch pickle-based supply-chain attacks, so any pipeline that treats a picklescan-clean verdict as sufficient trust for a third-party model, checkpoint, or dataset is currently exposed. There is no EPSS score, no CISA KEV listing, no public exploit, and no Nuclei template, and exploitation requires user interaction (someone must load the file), so this reads as a disclosed research finding rather than an active campaign for now — but the bypass technique is trivial to replicate once public. Upgrade picklescan to 0.0.29 or later immediately, and stop treating scanner-clean results as a sole gate: prefer safetensors over pickle for model artifacts, sandbox/isolate model deserialization, and add detection rules that flag idlelib.calltip references inside scanned pickle opcodes.
Is CVE-2025-71360 actively exploited?
No confirmed active exploitation of CVE-2025-71360 has been reported, but organizations should still patch proactively.
How to fix CVE-2025-71360?
1) Upgrade picklescan to >=0.0.29 immediately across all CI pipelines, model-hub ingestion services, and developer tooling. 2) Do not rely on picklescan (any version) as a sole control — migrate model serialization to safetensors or other non-executable formats wherever the framework supports it. 3) Sandbox or isolate any process that must deserialize untrusted pickle files (containerized, network-egress-restricted, non-privileged execution). 4) Use a restricted unpickler / allowlist-based Unpickler.find_class override as an additional layer even after upgrading the scanner. 5) Detection: audit historical scan logs and re-scan previously 'clean' artifacts with the patched picklescan version; add SIEM/EDR rules alerting on idlelib.calltip.get_entity references or unexpected idlelib imports appearing in files not related to IDLE usage.
What systems are affected by CVE-2025-71360?
This vulnerability affects the following AI/ML architecture patterns: model serving, MLOps CI/CD pipelines, model registries/hubs, training pipelines.
What is the CVSS score for CVE-2025-71360?
CVE-2025-71360 has a CVSS v3.1 base score of 8.1 (HIGH). The EPSS exploitation probability is 0.30%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0011.000 Unsafe AI Artifacts AML.T0011.001 Malicious Package AML.T0018.002 Embed Malware AML.T0072 Reverse Shell AML.T0107 Exploitation for Defense Evasion Compliance Controls Affected
What are the technical details?
Original Advisory
picklescan before 0.0.29 fails to detect malicious pickle files using idlelib.calltip.get_entity function in reduce methods. Attackers can embed undetected code in pickle files that executes remote commands when loaded by victims.
Exploitation Scenario
An attacker crafts a malicious pickle file — packaged as a 'model checkpoint' or dataset artifact — whose __reduce__ method invokes idlelib.calltip.get_entity as a smuggling primitive that picklescan's opcode/import allowlist does not recognize as dangerous. The attacker uploads the file to a public model hub, attaches it to a phishing email, or submits it to a CI pipeline that auto-scans incoming artifacts. The victim's automated gate runs picklescan, receives a 'safe' verdict, and proceeds to load the model with pickle.load() (directly or via a wrapping library), which triggers execution of attacker-supplied code — potentially opening a reverse shell or establishing persistence on the ML training/inference host.
Weaknesses (CWE)
CWE-502 — Deserialization of Untrusted Data: The product deserializes untrusted data without sufficiently ensuring that the resulting data will be valid.
- [Architecture and Design, Implementation] If available, use the signing/sealing features of the programming language to assure that deserialized data has not been tainted. For example, a hash-based message authentication code (HMAC) could be used to ensure that data has not been modified.
- [Implementation] When deserializing data, populate a new object rather than just deserializing. The result is that the data flows through safe input validation and that the functions are safe.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N References
Timeline
Related Vulnerabilities
CVE-2026-3490 10.0 picklescan: blocklist bypass enables full RCE
Same package: picklescan GHSA-vvpj-8cmc-gx39 10.0 picklescan: security flaw enables exploitation
Same package: picklescan GHSA-g38g-8gr9-h9xp 9.8 picklescan: Allowlist Bypass evades input filtering
Same package: picklescan CVE-2025-1945 9.8 picklescan: ZIP flag bypass enables RCE in PyTorch models
Same package: picklescan GHSA-7wx9-6375-f5wh 9.8 picklescan: Allowlist Bypass evades input filtering
Same package: picklescan