CVE-2025-10155: picklescan: file extension bypass allows model RCE
GHSA-jgw4-cr84-mqxg HIGH PoC AVAILABLE CISA: TRACK*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 |
| picklescan | pip | <= 0.0.30 | 0.0.31 |
How severe is it?
What is the attack surface?
What should I do?
7 steps-
PATCH
Upgrade picklescan to >= 0.0.31 across all environments — dev, staging, production, and CI/CD runners.
-
VERIFY
Run 'pip show picklescan' in every environment; treat any version <= 0.0.30 as unprotected.
-
RE-SCAN: Re-scan all PyTorch model files (.pt, .pth, .bin, .ckpt) obtained from external sources while running the vulnerable version.
-
SHIFT FORMAT
Migrate to safetensors format wherever possible — it is not susceptible to pickle deserialization attacks by design.
-
RESTRICT
Enforce allowlists on model sources; block loading models not originating from vetted internal registries.
-
SANDBOX
Run model loading in isolated environments (containers, VMs) with no access to production credentials or data.
-
DETECT
Alert on torch.load() / pickle.loads() calls in production that reference externally sourced files.
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-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
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
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
Primary
CWE-693 Protection Mechanism Failure
Primary
CWE-20 Improper Input Validation 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 References
- github.com/advisories/GHSA-jgw4-cr84-mqxg
- github.com/mmaitre314/picklescan/commit/28a7b4ef753466572bda3313737116eeb9b4e5c5
- nvd.nist.gov/vuln/detail/CVE-2025-10155
- github.com/mmaitre314/picklescan/blob/58983e1c20973ac42f2df7ff15d7c8cd32f9b688/src/picklescan/scanner.py Product
- github.com/mmaitre314/picklescan/security/advisories/GHSA-jgw4-cr84-mqxg Exploit Patch Vendor
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