Skip to main content

Pillow EUVDEUVD-2026-104636

| CVE-2026-112400 HIGH
Uncontrolled Resource Consumption (CWE-400)
2026-10-19 GitHub_M GHSA-65qm-jvmh-6pqg
8.7
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Submit crafted GIF to image endpoint
  2. Delivery
    DecompressionBombError raised and caught by app
  3. Exploit
    Rejected oversized dimensions retained on image object
  4. Execution
    App continues seek/load of same object
  5. Persist
    Allocation per bogus dimensions exhausts memory
  6. Impact
    Service denied (worker crash/hang)

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

Exploitation requires a specific application coding pattern, not just a vulnerable Pillow version: the consuming application must catch Image.DecompressionBombError and then continue to call seek() or load() on the SAME GifImageFile object that raised it. Only then are the rejected, oversized frame dimensions (retained in GifImagePlugin._seek before the fix) used for a subsequent allocation. The required input is a crafted multi-frame GIF whose declared frame extents exceed Pillow's decompression-bomb limit. Limiting factors: the attack is purely a denial of service (no code execution, data disclosure, or integrity impact); applications that let the exception propagate, discard the image object on error, or do not process further frames are NOT affected; it affects only GIF handling; and it is fixed in 13.0.0.

Impact

This is a CWE-400 uncontrolled-resource-consumption (memory exhaustion) denial-of-service flaw in Pillow, an extremely widely used Python imaging library (9.2.0 through pre-13.0.0). The input CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) with VA:H scores 8.7 (High), reflecting a network-reachable, unauthenticated, availability-only impact with no confidentiality or integrity effect. However, the raw score overstates real-world risk because exploitation is NOT automatic against default usage: the description makes clear it only triggers when an application catches the Image.DecompressionBombError and then continues to seek/load the SAME image object - a non-default, defensive-but-flawed error-handling pattern. The provided AT:N (no attack requirements) therefore understates reality; a conditional precondition exists, so AT:P is more honest. No EPSS score, KEV listing, or POC was supplied: exploitation status is 'no public exploit identified at time of analysis,' and there is no evidence of active exploitation. Net: a legitimate but bounded DoS - worth patching promptly in services that process untrusted GIFs, but not a widespread drive-by threat, and the absence of EPSS/KEV signals argues against urgent emergency response.

Exploit ScenarioDerived

An attacker uploads or submits a crafted GIF to a Python web service that uses Pillow and has wrapped image decoding in a try/except that catches DecompressionBombError and then continues to seek or load further frames of the same Image object. The retained oversized frame dimensions cause a large allocation on the next seek/load, exhausting memory and crashing or hanging the worker. No public exploit code was provided in the input, and the attack requires network access only (AV:N) with low complexity once the vulnerable error-handling pattern is present.

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 – Oct 19, 2026

Memory exhaustion denial of service in Pillow 9.2.0 through pre-13.0.0 can be triggered by a crafted multi-frame GIF that leaves rejected, oversized frame dimensions stored after Image.DecompressionBombError is raised. The flaw is exploitable only in applications that catch that exception and then continue calling seek() or load() on the same GifImageFile object; applications that let the exception propagate or discard the image object are not affected. It is an availability-only issue, with no public exploit identified at time of analysis and no CISA KEV confirmation.

RemediationAI

Vendor-released patch: upgrade to Pillow 13.0.0, which reorders the GIF _seek logic so rejected dimensions are not retained after Image.DecompressionBombError; see the advisory at https://github.com/python-pillow/Pillow/security/advisories/GHSA-65qm-jvmh-6pqg and release notes at https://github.com/python-pillow/Pillow/releases/tag/13.0.0. If immediate upgrade is not feasible, applications should not catch Image.DecompressionBombError and continue using the same GifImageFile object: let the exception propagate, discard the image object, and fail the request. Additional compensating controls include processing untrusted GIFs in memory-limited worker processes or containers so a single job cannot exhaust host memory, and restricting or disabling GIF upload or processing for untrusted sources; these reduce exposure but do not fix the underlying code path. Applications that already discard image objects on decompression-bomb errors are not affected by this specific pattern.

Affected VersionsENISA

Pillow 9.2.0, < 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 is a widely used Python imaging library, and this defect is in its GIF decoder path, specifically GifImagePlugin._seek. The root cause is CWE-400 uncontrolled resource consumption: before the fix, _seek assigned the newly computed frame extents to self._size before calling Image._decompression_bomb_check(), so when the check raised Image.DecompressionBombError the rejected dimensions could remain on the GifImageFile instance. A later seek() or load() on that same object could then allocate based on those retained dimensions. The upstream commit changes the order to compute a local size, run the decompression-bomb check, and only then assign self._size, and adds a regression test asserting the size remains unchanged after the exception. The CPE cpe:2.3:a:python-pillow:pillow:*:*:*:*:*:*:*:* identifies Pillow as the affected package; impact is limited to availability and only for GIF processing.

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 (GitHub_M) PRIMARY 8.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
vuln.today AI 5.9 MEDIUM

Network-reachable unauthenticated DoS (A:H only), but AC:H because exploitation depends on the application catching DecompressionBombError and continuing to use the same image object.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

Lifecycle Timeline

2
Patch available
Oct 19, 2026 - 23:18 EUVD
CVE Published
Oct 19, 2026 - 21:12 cve.org
HIGH 8.7

DescriptionCVE.org

Pillow is a Python imaging library. From 9.2.0 until 13.0.0, Pillow can retain a rejected GIF frame size after a decompression-bomb exception. In GifImageFile._seek, a crafted GIF can leave rejected dimensions stored after Image.DecompressionBombError; if an application catches that exception and continues processing the same image object, later seek or load operations allocate according to those dimensions and can exhaust memory, denying service. This issue is fixed in version 13.0.0.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 180 pypi packages depend on pillow (154 direct, 27 indirect)

Ecosystem-wide dependent count for version 9.2.0.

Technical POC Analysis

CWE-400 (Uncontrolled Resource Consumption), a state-mutation-ordering flaw in GifImageFile.seek() at src/PIL/GifImagePlugin.py:289-294 (advisory cites line 293, patch hunk header @@ -290,8 +290,9 @@…

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

Pillow 9.2.0 through pre-13.0.0 carries a high-severity availability flaw that can let crafted multi-frame GIFs exhaust memory in image-processing services, but only where application code catches decompression-bomb errors and continues using the same image object. The exposure is concentrated in teams that ingest untrusted GIFs and have custom exception handling; because no vendor-released patch is identified at time of analysis, leadership should prioritize interim guardrails and monitoring for those workflows. No public exploit identified at time of analysis, and no CISA KEV confirmation.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: reject or quarantine oversized and multi-frame GIFs; enforce frame-count, dimension, and pixel limits before decoding; do not reuse GifImageFile after Image.DecompressionBombError-propagate the exception and discard the object; add request timeouts, memory caps, rate limiting, and monitoring; isolate image-processing workloads to limit blast radius.

Threat Intelligence Overview

EPSS Score
0.3%
Top 80% exploitable
Prevalence
High
Pillow is the de facto Python imaging library, used across countless web backends
Threat Intel
1
1 source
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA 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 No
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
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
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-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-2021-23437 HIGH POC
7.5 Sep 03

The package pillow 5.2.0 and before 8.3.2 are vulnerable to Regular Expression Denial of Service (ReDoS) via the getrgb

CVE-2025-48379 HIGH POC
7.1 Jul 01

Pillow is a Python imaging library. In versions 11.2.0 to before 11.3.0, there is a heap buffer overflow when writing a

CVE-2016-4009 CRITICAL
9.8 Apr 13

Integer overflow in the ImagingResampleHorizontal function in libImaging/Resample.c in Pillow before 3.1.1 allows remote

CVE-2014-3007 CRITICAL
10.0 Apr 27

Python Image Library (PIL) 1.1.7 and earlier and Pillow 2.3 might allow remote attackers to execute arbitrary commands v

CVE-2026-96639 CRITICAL
9.8 Oct 21

Pillow versions 11.0.0 through 12.x (fixed in 13.0.0) can reuse a stale native ImagingCore buffer when a multi-frame ima

CVE-2021-34552 CRITICAL
9.8 Jul 13

Pillow through 8.2.0 and PIL (aka Python Imaging Library) through 1.1.7 allow an attacker to pass controlled parameters

CVE-2021-25289 CRITICAL
9.8 Mar 19

An issue was discovered in Pillow before 8.1.1. Rated critical severity (CVSS 9.8), this vulnerability is remotely explo

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