Skip to main content

Pillow EUVDEUVD-2026-107572

| CVE-2026-96636 MEDIUM
Uncontrolled Resource Consumption (CWE-400)
6.5
CVSS 3.1 · Vendor
View

Attack ChainAIDerived

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

  1. Access
    Upload crafted MPO/DCX/MIC file
  2. Exploit
    Application calls seek() to additional frames
  3. Execution
    Decompression-bomb size check bypassed
  4. Impact
    Oversized buffer allocation exhausts memory

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK

1 technique across 1 tactic: Impact

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

Exploitation Conditions

The target application must open an attacker-supplied MPO, DCX, or MIC image with Pillow AND invoke seek() to navigate to frames/pages beyond the first - that frame-seeking code path is where the MAX_IMAGE_PIXELS decompression-bomb check is bypassed. Limiting factors: single-frame opens that never call seek() are not affected; the application must process these specific multi-frame container formats; and the effect is memory/CPU exhaustion (availability) with no confidentiality or integrity impact. Exploitation requires no special non-default Pillow configuration beyond handling multi-frame images, which is common in galleries, converters, and thumbnail pipelines.

Impact

CVE-2026-96636 is a MEDIUM-severity denial-of-service issue in Pillow, where the decompression-bomb protection (the MAX_IMAGE_PIXELS guard) can be bypassed for MPO, DCX, and MIC multi-frame formats when an application calls seek() to move to additional frames/pages. No CVSS vector, CWE, EPSS score, KEV listing, or POC is present in the supplied data, so quantitative exploitation-probability signals are entirely absent and cannot be compared. The vendor (Pillow 13.0.0 release notes) classifies it as Medium, consistent with a resource-exhaustion impact rather than code execution: there is no confidentiality or integrity consequence, only availability loss via memory amplification. Real-world risk is bounded but non-trivial because Pillow is embedded in a huge number of Python web services that accept user-uploaded images and iterate frames; however, this is a DoS-only, availability-impacting bug, not a high-urgency RCE. Exploitation status is 'no public exploit identified at time of analysis' - this is NOT actively exploited and no POC is referenced. Key missing data: NVD has not yet published a CVSS vector or CWE (input shows N/A), so the authentication/attack-vector profile below is my independent assessment, not vendor-confirmed.

Exploit ScenarioDerived

An attacker uploads a specially crafted MPO, DCX, or MIC image to a service that uses Pillow to process multi-frame images (e.g., thumbnailing or frame iteration). When the application calls seek() to access later frames, the normal decompression-bomb size check is skipped, so the declared frame dimensions force Pillow to allocate an enormous pixel buffer, exhausting memory and causing a denial of service. No public exploit code is identified at the time of analysis.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.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 – Oct 21, 2026

Denial-of-service in Pillow's multi-frame image handling: the MAX_IMAGE_PIXELS decompression-bomb guard can be bypassed for MPO, DCX, and MIC containers when an application calls seek() to navigate to frames or pages beyond the first, allowing a small attacker-supplied file to trigger unbounded memory and CPU consumption. Only applications that open these specific multi-frame formats and seek past the first frame are affected; single-frame opens and first-frame-only pipelines are not. The flaw is rated CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L (availability-only, no confidentiality or integrity impact), affects Pillow releases prior to 13.0.0, and no public exploit code was identified at time of analysis.

RemediationAI

Upgrade to Pillow 13.0.0 or later (pip install --upgrade 'Pillow>=13.0.0'), which contains the fix for CVE-2026-96636 / GHSA-p8hx-v2p6-rp84 together with the rest of the 13.0.0 security batch - verify with python -c "import PIL; print(PIL.__version__)" and rebuild any wheels or container images that vendor Pillow; see https://pillow.readthedocs.io/en/stable/releasenotes/13.0.0.html and https://seclists.org/oss-sec/2026/q4/295. Where an immediate upgrade is not possible, mitigate in application code rather than globally: avoid calling seek() on untrusted MPO/DCX/MIC inputs, or restrict accepted formats with Image.init() plus an explicit allowlist (register only the plugins you need, e.g. JPEG/PNG) so the MPO, DCX and MIC plugins are never loaded - trade-off is loss of legitimate multi-frame support and possible breakage of user workflows that rely on those formats. Lowering PIL.Image.MAX_IMAGE_PIXELS does not close the hole because frame sizes in the seek() path are not compared against it, but running decode work in a memory- and CPU-capped worker (cgroup/ulimit, subprocess with timeout) limits the blast radius at the cost of added latency and complexity. Also enforce upload size limits and per-request timeouts at the edge as compensating controls.

Affected VersionsENISA

Pillow < 13.0.0

Affected Packages

pypi pillow fix: 13.0.0

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

Pillow enforces a decompression-bomb defense by comparing declared or computed image pixel counts against the MAX_IMAGE_PIXELS threshold and raising DecompressionBombError/Warning when exceeded. In the MPO (multi-picture object, a JPEG-derived container), DCX (multi-page PCX) and MIC (multi-frame Windows imaging) plugins, the guard is evaluated against the size of the initially decoded frame, while subsequent frames reached through ImageFile.seek() are sized and allocated independently - so frame 2..N escape the pixel-count check. Because these formats are compact by design (MPO/MIC can describe large frames with small payloads, and DCX sequences pages), a tiny file can expand into large per-frame allocations, producing memory exhaustion and repeated decode work (CPU) in the process that hosts Pillow. The underlying weakness class is an improper/incomplete resource-limit enforcement (CWE-770-style uncontrolled resource consumption) in the frame-seeking path rather than a memory-corruption bug, which is consistent with the assessed availability-only impact (C:N/I:N/A:L) and the unauthenticated, network-reachable attack vector (AV:N/PR:N/UI:N) where image bytes are attacker-controlled. Related issues fixed in the same release include similar seek()-based bypasses in SPIDER (CVE-2026-96637), APNG, and GIF.

Know when Pillow 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 (CNA) PRIMARY 6.5 MEDIUM
AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H
vuln.today AI 5.3 MEDIUM

Remote attacker-supplied image processed without authentication or user interaction (AV:N/PR:N/UI:N); availability-only resource exhaustion, so C:N/I:N and A:L reflecting a recoverable DoS.

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

Primary rating from Vendor (CNA).

CVSS VectorVendor

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

3
Patch available
Oct 21, 2026 - 22:03 EUVD
CVSS changed
Oct 21, 2026 - 21:23 NVD
6.5 (MEDIUM)
CVE Published
Oct 21, 2026 - 19:14 oss-security
HIGH

Description PRE-NVD

Disclosed via oss-security. NVD scoring and full description are pending.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 93,931 pypi packages depend on pillow (20,820 direct, 74,698 indirect)

Ecosystem-wide dependent count for version 13.0.0.

Executive ViewAI

Why It Matters

Pillow, a widely deployed Python imaging library, has a high-severity availability flaw that can let a small malicious multi-frame image exhaust memory and CPU in applications that seek beyond the first frame of MPO, DCX, or MIC files. The issue is unauthenticated and has no public exploit identified at time of analysis, but affected image-processing services could face slowdowns or outages if they accept these formats. Leadership should prioritize identifying exposed pipelines and applying interim format restrictions while a vendor fix is tracked.

Business Impact: Medium
Compensating Controls

No vendor-released patch identified at time of analysis; restrict or disable MPO, DCX, and MIC processing, enforce image-format allowlists, avoid seek() beyond the first frame, apply memory/CPU/time quotas, and isolate image-processing workloads.

Threat Intelligence Overview

EPSS Score
0.3%
Top 81% exploitable
Prevalence
High
Pillow is a near-default image library across Python web applications
Threat Intel
1
1 source
Data Quality
5 sources
Confidence: Medium

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
Medium

Priority Score

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

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

More in Pillow

View all
CVE-2022-30595 CRITICAL POC
9.8 May 25

libImaging/TgaRleDecode.c in Pillow 9.1.0 has a heap buffer overflow in the processing of invalid TGA image files. Rated

CVE-2026-59204 HIGH POC
8.7 Jul 14

Denial of service in Python Pillow (versions 8.2.0 through 12.2.0) allows remote attackers to exhaust memory during JPEG

CVE-2026-54058 HIGH POC
8.3 Jul 14

Out-of-bounds memory disclosure in Python Pillow before 12.3.0 lets an attacker who supplies a crafted McIdas AREA image

CVE-2026-59197 HIGH POC
8.2 Jul 14

Heap out-of-bounds write in Python Pillow prior to 12.3.0 lets an attacker who controls the rank-filter size parameter c

CVE-2026-59205 HIGH POC
7.5 Jul 14

Denial-of-service and controlled heap corruption in Python's Pillow imaging library (all versions prior to 12.3.0) occur

CVE-2026-59203 HIGH POC
7.5 Jul 14

Denial of service in Python Pillow 12.0.0 through 12.2.0 lets a remote attacker hang an application by supplying a craft

CVE-2026-59199 HIGH POC
7.5 Jul 14

Denial of service (and potential memory corruption) in Python Pillow before 12.3.0 arises when public image coordinate A

CVE-2026-55379 HIGH POC
7.5 Jul 06

Uncontrolled memory allocation in Python Pillow before 12.3.0 lets a crafted BDF font file exhaust available memory and

CVE-2026-59200 HIGH POC
7.5 Jul 14

Uncontrolled memory consumption in Python Pillow (PIL) versions 5.1.0 through 12.2.x allows a remote attacker to cause d

CVE-2026-55380 HIGH POC
7.5 Jul 06

Denial-of-service via memory exhaustion in Python Pillow before 12.3.0 allows a crafted GD-format (.gd) image to trigger

CVE-2026-54060 HIGH POC
7.5 Jul 06

Uncontrolled memory allocation in Python Pillow before 12.3.0 allows a maliciously crafted font file to trigger excessiv

CVE-2026-54059 HIGH POC
7.5 Jul 06

Uncontrolled memory allocation in the Python Pillow imaging library (all versions prior to 12.3.0) allows a crafted PCF

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