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.

Risk Assessment

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.

Affected Systems

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

Severity & Risk

CVSS 3.1
7.8 / 10
EPSS
0.1%
chance of exploitation in 30 days
Higher than 18% 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, CISA SSVC, EPSS, trickest/cve, and Nuclei templates.

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

Recommended Action

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.

CISA SSVC Assessment

Decision Track*
Exploitation poc
Automatable No
Technical Impact partial

Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.

Classification

Compliance Impact

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.06%.

Technical Details

NVD Description

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.

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