Skip to main content

picklescan CVE-2025-71354

| EUVDEUVD-2025-210327 HIGH
Deserialization of Untrusted Data (CWE-502)
2026-06-24 VulnCheck
7.6
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Recon
    Craft pickle with ObjectTreeItem.SetText __reduce__ payload
  2. Delivery
    Publish model to hub or send to victim
  3. Exploit
    Victim runs picklescan and gets clean verdict
  4. Install
    Victim invokes pickle.load/torch.load
  5. C2
    idlelib SetText resolves attacker callable
  6. Execute
    os.system executes payload
  7. Impact
    RCE in ML pipeline context

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V1 - Encoding and Sanitization Safe deserialization, type allowlists
MITRE ATT&CK

2 techniques across 2 tactics: Execution, Initial Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires that (1) the target organisation uses picklescan < 0.0.29 as its safety check on pickle files, (2) a user is induced to load an attacker-supplied pickle file via pickle.load(), torch.load(), joblib.load() or equivalent (UI:P - user interaction is required to deserialise), and (3) the victim's Python environment has the idlelib standard-library module importable, which is the default on CPython desktop and most server distributions but may be absent in stripped-down container images that exclude tkinter/idle. No authentication to the picklescan tool is needed (PR:N) and no special picklescan configuration is required - the bypass works against default scan settings. The attack does not work if the victim never deserialises the file, or if their stdlib has idlelib removed.

Impact

The vendor-supplied CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N) scores 7.6 and accurately reflects that exploitation requires a passive attacker requirement (AT:P - the victim must consume an attacker-supplied pickle) plus user interaction (UI:P - the victim must call pickle.load on the file). EPSS and KEV data are not present in the input, so widespread opportunistic exploitation cannot be confirmed; however, a working PoC is published in the GHSA, lowering the skill barrier substantially. The realistic risk is concentrated in ML/AI organisations that rely on picklescan as a gating control for third-party models from Hugging Face or similar hubs - for those, this is high priority because the tool produces a clean verdict on a weaponised file. For organisations that do not use picklescan, the CVE is informational.

Exploit ScenarioDerived

An attacker publishes a PyTorch model (.pt/.pkl) to a public model hub with an embedded __reduce__ that returns ObjectTreeItem('label', None, print).SetText with an os.system payload, as shown in the published PoC. A defender runs picklescan against the file, receives a clean verdict, and loads it with torch.load / pickle.load in a training or inference pipeline; the payload executes as the loading process, giving the attacker code execution on the ML host.

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

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

Alert me

AnalysisAIv1 – Jun 24, 2026

Detection bypass in picklescan before 0.0.29 allows attackers to craft malicious pickle files using idlelib.debugobj.ObjectTreeItem.SetText in __reduce__ methods that evade the scanner's dangerous-function checks, resulting in arbitrary command execution when the victim subsequently calls pickle.load(). The flaw turns picklescan from a security control into a false-assurance tool for ML pipelines that consume untrusted PyTorch models. Publicly available exploit code exists via the GHSA advisory, though no public exploit identified in active campaigns at time of analysis.

RemediationAI

Vendor-released patch: upgrade picklescan to 0.0.29 or later (pip install --upgrade picklescan>=0.0.29), which adds idlelib.debugobj.ObjectTreeItem.SetText to the denylist per commit aecd11be98702caa9ba9b12189d91ad596a36114 referenced in GHSA-3vg9-h568-4w9m. Until upgraded, treat picklescan output as advisory rather than authoritative: refuse pickle-format model files from untrusted sources and require safetensors equivalents where available (trade-off: not all upstream models publish safetensors weights, so some HF integrations may break). As a structural mitigation, load suspect pickles only inside an unprivileged sandbox or ephemeral container with no outbound network and read-only filesystem so that a successful __reduce__ payload cannot pivot - note that this adds latency to model-loading pipelines and may need orchestrator changes.

Affected VersionsENISA

picklescan 0 <0.0.29

Affected Packages

pypi picklescan fix: 0.0.29

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 library that statically inspects pickle streams to flag dangerous opcodes and known-bad callables before pickle.load() is invoked, commonly used in ML supply chains to vet PyTorch model files. CWE-502 (Deserialization of Untrusted Data) is the root cause: picklescan maintains an allow/deny list of callables, but idlelib.debugobj.ObjectTreeItem.SetText - a method exposed by the stdlib IDLE debugger - was not in its denylist despite being a usable code-execution sink when wrapped in __reduce__. The CPE cpe:2.3:a:picklescan:picklescan:*:*:* identifies the pip-distributed picklescan package as the affected component; the underlying pickle protocol and idlelib remain unchanged.

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 auth to the scanner (PR:N), but victim must deserialise the file (UI:R); successful RCE yields full host impact.

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 24, 2026 - 13:01 EUVD

DescriptionCVE.org

picklescan before 0.0.29 fails to detect malicious pickle files that exploit idlelib.debugobj.ObjectTreeItem.SetText function in reduce methods. Attackers can craft pickle files with embedded code that bypasses picklescan detection and executes arbitrary commands when pickle.load() is called.

Executive ViewAI

Why It Matters

picklescan, a security scanning tool for validating PyTorch models in ML pipelines, contains a detection bypass allowing attackers to craft malicious pickle files that evade security checks and achieve arbitrary code execution; publicly available exploit code exists. Organizations relying on picklescan as a primary defense mechanism now operate with a false sense of security while remaining vulnerable to model-based attacks.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: (1) Execute pickle.load() operations in sandboxed containers with minimal privileges; (2) Require cryptographic code-signing validation for PyTorch models before loading; (3) Implement network isolation for systems processing untrusted models; (4) Disable picklescan if currently relied upon as primary security control.

Threat Intelligence Overview

EPSS Score
0.3%
Top 83% exploitable
Prevalence
Low
niche ML-supply-chain scanner, limited to teams vetting pickle models
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High

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.3%
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
None
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

Insecure deserialization occurs when an application converts serialized data (a stream of bytes representing an object's state) back into a living object without proper validation.

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-71351 HIGH POC
7.6 Jun 21

Detection bypass in picklescan versions before 0.0.25 allows attackers to embed remote code execution payloads in 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

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