CVE-2025-71372: Picklescan: RCE gadget bypasses pickle safety scanner

HIGH CISA: ATTEND
Published July 4, 2026
CISO Take

Picklescan is the de-facto safety scanner used to vet pickle-serialized model files before loading, but versions before 0.0.33 fail to flag the numpy.f2py.crackfortran.getlincoef gadget hidden in a pickle __reduce__ method, letting arbitrary Python code execute the moment a "scanned safe" file is deserialized. The CVSS 8.1 score reflects high confidentiality and integrity impact with no privileges required, though user interaction is needed to trigger the load; there is no known public exploit, no Nuclei template, and it is not in CISA KEV, so exploitation likelihood today is low but the trust-bypass nature of the flaw makes it a high-value supply-chain vector once weaponized. Because Picklescan is specifically relied upon as a defensive control at model ingestion points (HuggingFace Hub downloads, MLOps pipelines, shared model registries), any organization treating a Picklescan pass as sufficient proof of safety is currently exposed to a false sense of security. Upgrade to Picklescan 0.0.33 or later immediately, and until upgraded, treat any pickle-format model file from an untrusted or public source as unsafe regardless of scan result — prefer safetensors or other non-executable formats, and audit recent model ingestions for pickle files that passed scanning but originated from low-trust sources.

Sources: NVD GitHub Advisory ATLAS

What is the risk?

High risk for organizations whose model-ingestion or ML supply-chain workflow relies on Picklescan as a gating control. Exploitability is moderate-to-high in principle (network vector, low complexity, no privileges) but requires a victim to load a malicious pickle file, and no public exploit or scanner signature exists yet, keeping near-term opportunistic exploitation probability low. The real danger is systemic: this is a detection-bypass vulnerability, meaning affected environments believe they are protected when they are not, which can mask silent supply-chain poisoning until a breach is discovered by other means.

How does the attack unfold?

Craft malicious artifact
Attacker embeds the numpy.f2py.crackfortran.getlincoef gadget in a pickle file's __reduce__ method to achieve code execution while evading Picklescan detection.
AML.T0018.002
Distribute poisoned model
Attacker publishes the crafted pickle file as a seemingly legitimate model artifact on a public hub or shared repository.
AML.T0058
Victim scans and trusts
Victim's pipeline runs Picklescan pre-0.0.33, which fails to flag the gadget and returns a false 'safe' verdict.
AML.T0011.000
Code execution on load
Victim deserializes the file with pickle.load(), triggering arbitrary code execution within the ML environment.
AML.T0050

What systems are affected?

Package Ecosystem Vulnerable Range Patched
picklescan pip No patch
418 3 dependents Pushed 25d ago 53% patched ~12d to patch Full package profile →

Do you use picklescan? You're affected.

How severe is it?

CVSS 3.1
8.1 / 10
EPSS
0.4%
chance of exploitation in 30 days
Higher than 31% of all CVEs
Exploitation Status
Exploit Available
Exploitation: MEDIUM
Sophistication
Advanced
Exploitation Confidence
medium
CISA SSVC: Public PoC
Composite signal derived from CISA KEV, VulnCheck KEV, CISA SSVC, EPSS, Metasploit, Exploit-DB, trickest/cve, Nuclei templates, and inthewild.io exploitation reports.

What is the attack surface?

AV AC PR UI S C I A
AV Network
AC Low
PR None
UI Required
S Unchanged
C High
I High
A None

What should I do?

1 step
  1. Upgrade picklescan to >= 0.0.33 immediately across all systems that use it as a gating control. Until upgraded, do not treat a Picklescan pass as authoritative — re-verify provenance of any pickle file from external sources (HuggingFace, forums, unofficial mirrors) via checksum/signature or by re-scanning after the patch. Where feasible, migrate model artifact storage to safetensors or other non-executable serialization formats that eliminate __reduce__-based code execution entirely. For detection, monitor for pickle loads following the patch window that were previously cleared by an older Picklescan version, and add a secondary static-analysis or sandboxed deserialization check for high-value model ingestion pipelines rather than relying on a single scanner.

What does CISA's SSVC say?

Decision Attend
Exploitation poc
Automatable No
Technical Impact total

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:

ISO 42001
A.6.2.3 - AI system supply chain management
NIST AI RMF
MAP-3.4 - Third-party AI resources are evaluated for risk
OWASP LLM Top 10
LLM05 - Supply Chain Vulnerabilities

Frequently Asked Questions

What is CVE-2025-71372?

Picklescan is the de-facto safety scanner used to vet pickle-serialized model files before loading, but versions before 0.0.33 fail to flag the numpy.f2py.crackfortran.getlincoef gadget hidden in a pickle __reduce__ method, letting arbitrary Python code execute the moment a "scanned safe" file is deserialized. The CVSS 8.1 score reflects high confidentiality and integrity impact with no privileges required, though user interaction is needed to trigger the load; there is no known public exploit, no Nuclei template, and it is not in CISA KEV, so exploitation likelihood today is low but the trust-bypass nature of the flaw makes it a high-value supply-chain vector once weaponized. Because Picklescan is specifically relied upon as a defensive control at model ingestion points (HuggingFace Hub downloads, MLOps pipelines, shared model registries), any organization treating a Picklescan pass as sufficient proof of safety is currently exposed to a false sense of security. Upgrade to Picklescan 0.0.33 or later immediately, and until upgraded, treat any pickle-format model file from an untrusted or public source as unsafe regardless of scan result — prefer safetensors or other non-executable formats, and audit recent model ingestions for pickle files that passed scanning but originated from low-trust sources.

Is CVE-2025-71372 actively exploited?

No confirmed active exploitation of CVE-2025-71372 has been reported, but organizations should still patch proactively.

How to fix CVE-2025-71372?

Upgrade picklescan to >= 0.0.33 immediately across all systems that use it as a gating control. Until upgraded, do not treat a Picklescan pass as authoritative — re-verify provenance of any pickle file from external sources (HuggingFace, forums, unofficial mirrors) via checksum/signature or by re-scanning after the patch. Where feasible, migrate model artifact storage to safetensors or other non-executable serialization formats that eliminate __reduce__-based code execution entirely. For detection, monitor for pickle loads following the patch window that were previously cleared by an older Picklescan version, and add a secondary static-analysis or sandboxed deserialization check for high-value model ingestion pipelines rather than relying on a single scanner.

What systems are affected by CVE-2025-71372?

This vulnerability affects the following AI/ML architecture patterns: model serving, training pipelines, MLOps/CI-CD model registries.

What is the CVSS score for CVE-2025-71372?

CVE-2025-71372 has a CVSS v3.1 base score of 8.1 (HIGH). The EPSS exploitation probability is 0.38%.

What is the AI security impact?

Affected AI Architectures

model servingtraining pipelinesMLOps/CI-CD model registries

MITRE ATLAS Techniques

AML.T0010.003 Model
AML.T0011 User Execution
AML.T0011.000 Unsafe AI Artifacts
AML.T0018.002 Embed Malware
AML.T0058 Publish Poisoned Models

Compliance Controls Affected

ISO 42001: A.6.2.3
NIST AI RMF: MAP-3.4
OWASP LLM Top 10: LLM05

What are the technical details?

Original Advisory

Picklescan before 0.0.33 fails to detect the numpy.f2py.crackfortran.getlincoef gadget in pickle __reduce__ methods, allowing arbitrary code execution. Attackers can craft malicious pickle files that execute arbitrary Python code when loaded, bypassing Picklescan's safety checks and enabling supply-chain poisoning of shared model files.

Exploitation Scenario

An adversary crafts a malicious pickle-serialized model artifact whose __reduce__ method points to the numpy.f2py.crackfortran.getlincoef gadget — a function Picklescan (pre-0.0.33) does not recognize as dangerous — and uploads it to a public model hub or shares it via a community channel, disguised as a legitimate fine-tuned checkpoint. A victim's MLOps pipeline or data scientist downloads the file, runs it through Picklescan as a routine safety gate, receives a clean/safe verdict, and proceeds to pickle.load() the file into a training or inference environment. At that moment the embedded gadget executes arbitrary Python code with the privileges of the loading process, giving the attacker code execution inside the victim's ML infrastructure — a classic supply-chain poisoning outcome enabled purely by trusting a bypassed scanner.

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

Timeline

Published
July 4, 2026
Last Modified
July 7, 2026
First Seen
July 4, 2026

Related Vulnerabilities