CVE-2025-10155: picklescan: file extension bypass allows model RCE

GHSA-jgw4-cr84-mqxg HIGH PoC AVAILABLE CISA: TRACK*
Published September 17, 2025
CISO Take

Upgrade picklescan to 0.0.31 immediately — any ML pipeline running <= 0.0.30 that believed it was protected against malicious models was not. An attacker who can deliver a pickle payload with a PyTorch extension (.pt, .pth, .bin) bypasses scanning entirely, resulting in RCE when the file is loaded via torch.load(). Audit model ingestion logs for externally sourced PyTorch-extension files loaded in the past 90 days.

What is the risk?

CVSS 7.8 with a local attack vector understates real-world risk because this is a security control bypass — teams relying on picklescan likely removed compensating controls, creating dangerous false confidence. The attack is trivial: rename a malicious pickle file with a .pth extension and let the scanner clear it. Risk is highest in MLOps pipelines that pull models from HuggingFace, shared registries, or research collaborations and treat picklescan as their primary gate. EPSS 0.0003 reflects low automated exploitation but targeted supply chain attacks make this trivially achievable for motivated adversaries.

What systems are affected?

Package Ecosystem Vulnerable Range Patched
picklescan pip No patch
413 3 dependents Pushed 1mo ago 69% patched ~12d to patch Full package profile →
picklescan pip <= 0.0.30 0.0.31
413 3 dependents Pushed 1mo ago 69% patched ~12d to patch Full package profile →

How severe is it?

CVSS 3.1
7.8 / 10
EPSS
0.8%
chance of exploitation in 30 days
Higher than 52% of all CVEs
Exploitation Status
Exploit Available
Exploitation: MEDIUM
Sophistication
Trivial
Exploitation Confidence
medium
CISA SSVC: Public PoC
Public PoC indexed (trickest/cve)
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 Local
AC Low
PR None
UI Required
S Unchanged
C High
I High
A High

What should I do?

7 steps
  1. PATCH

    Upgrade picklescan to >= 0.0.31 across all environments — dev, staging, production, and CI/CD runners.

  2. VERIFY

    Run 'pip show picklescan' in every environment; treat any version <= 0.0.30 as unprotected.

  3. RE-SCAN: Re-scan all PyTorch model files (.pt, .pth, .bin, .ckpt) obtained from external sources while running the vulnerable version.

  4. SHIFT FORMAT

    Migrate to safetensors format wherever possible — it is not susceptible to pickle deserialization attacks by design.

  5. RESTRICT

    Enforce allowlists on model sources; block loading models not originating from vetted internal registries.

  6. SANDBOX

    Run model loading in isolated environments (containers, VMs) with no access to production credentials or data.

  7. DETECT

    Alert on torch.load() / pickle.loads() calls in production that reference externally sourced files.

What does CISA's SSVC say?

Decision Track*
Exploitation poc
Automatable No
Technical Impact partial

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:

EU AI Act
Art. 15(5) - Accuracy, robustness and cybersecurity — resilience against manipulation
ISO 42001
A.6.2 - AI system supply chain management
NIST AI RMF
GOVERN 6.2 - Policies and procedures for AI supply chain risk management
OWASP LLM Top 10
LLM03:2025 - Supply Chain Vulnerabilities

Frequently Asked Questions

What is CVE-2025-10155?

Upgrade picklescan to 0.0.31 immediately — any ML pipeline running <= 0.0.30 that believed it was protected against malicious models was not. An attacker who can deliver a pickle payload with a PyTorch extension (.pt, .pth, .bin) bypasses scanning entirely, resulting in RCE when the file is loaded via torch.load(). Audit model ingestion logs for externally sourced PyTorch-extension files loaded in the past 90 days.

Is CVE-2025-10155 actively exploited?

Proof-of-concept exploit code is publicly available for CVE-2025-10155, increasing the risk of exploitation.

How to fix CVE-2025-10155?

1. PATCH: Upgrade picklescan to >= 0.0.31 across all environments — dev, staging, production, and CI/CD runners. 2. VERIFY: Run 'pip show picklescan' in every environment; treat any version <= 0.0.30 as unprotected. 3. RE-SCAN: Re-scan all PyTorch model files (.pt, .pth, .bin, .ckpt) obtained from external sources while running the vulnerable version. 4. SHIFT FORMAT: Migrate to safetensors format wherever possible — it is not susceptible to pickle deserialization attacks by design. 5. RESTRICT: Enforce allowlists on model sources; block loading models not originating from vetted internal registries. 6. SANDBOX: Run model loading in isolated environments (containers, VMs) with no access to production credentials or data. 7. DETECT: Alert on torch.load() / pickle.loads() calls in production that reference externally sourced files.

What systems are affected by CVE-2025-10155?

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

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

CVE-2025-10155 has a CVSS v3.1 base score of 7.8 (HIGH). The EPSS exploitation probability is 0.82%.

What is the AI security impact?

Affected AI Architectures

training pipelinesmodel registriesmodel servingMLOps/CI-CD pipelinesML development environments

MITRE ATLAS Techniques

AML.T0010.001 AI Software
AML.T0011.000 Unsafe AI Artifacts
AML.T0018.002 Embed Malware
AML.T0074 Masquerading
AML.T0107 Exploitation for Defense Evasion

Compliance Controls Affected

EU AI Act: Art. 15(5)
ISO 42001: A.6.2
NIST AI RMF: GOVERN 6.2
OWASP LLM Top 10: LLM03:2025

What are the technical details?

Original Advisory

An Improper Input Validation vulnerability in the scanning logic of mmaitre314 picklescan versions up to and including 0.0.30 allows a remote attacker to bypass pickle files security checks by supplying a standard pickle file with a PyTorch-related file extension. When the pickle file incorrectly considered safe is loaded, it can lead to the execution of malicious code.

Exploitation Scenario

An adversary targets an ML team that uses picklescan as their model validation gate. They craft a malicious pickle file embedding a reverse shell payload and name it 'finetuned-llama3-v2.pth'. They upload it to a shared research bucket, a model leaderboard, or deliver it via a convincing research collaboration email. The CI/CD pipeline runs picklescan — because the .pth extension causes the scanner to skip proper pickle inspection (CWE-693), the file is marked clean. An ML engineer or automated training job runs torch.load('finetuned-llama3-v2.pth'), triggering deserialization and executing the payload. The adversary gains a shell in the training environment, with access to training data, model weights, API keys, and potentially the entire ML infrastructure.

Weaknesses (CWE)

CWE-20 — Improper Input Validation: The product receives input or data, but it does not validate or incorrectly validates that the input has the properties that are required to process the data safely and correctly.

  • [Architecture and Design] Consider using language-theoretic security (LangSec) techniques that characterize inputs using a formal language and build "recognizers" for that language. This effectively requires parsing to be a distinct layer that effectively enforces a boundary between raw input and internal data representations, instead of allowing parser code to be scattered throughout the program, where it could be subject to errors or inconsistencies that create weaknesses. [REF-1109] [REF-1110] [REF-1111]
  • [Architecture and Design] Use an input validation framework such as Struts or the OWASP ESAPI Validation API. Note that using a framework does not automatically address all input validation problems; be mindful of weaknesses that could arise from misusing the framework itself (CWE-1173).

Source: MITRE CWE corpus.

CVSS Vector

CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H

Timeline

Published
September 17, 2025
Last Modified
October 2, 2025
First Seen
September 17, 2025

Related Vulnerabilities