Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft .gd file with oversized header dimensions
-
DeliverySubmit file to app that decodes images
-
ExploitGdImageFile._open() reads unchecked _size
-
ExecutionTrigger excessive C-heap allocation
-
ImpactExhaust memory and crash service
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Memory allocation limits
|
| Exploitation Conditions | Exploitation requires that the target application actually loads and decodes an attacker-supplied file in the libgd 'GD' 2.x format through Pillow's GdImageFile plugin (e.g. via Image.open on untrusted input), and the crafted .gd header must declare oversized width/height to force the excessive allocation. Limiting factors: the GD image format is uncommon, so the application must accept or auto-detect .gd input for the path to be reachable; the impact is confined to availability (memory exhaustion / crash) with no code execution or data disclosure; and a lowered MAX_IMAGE_PIXELS or a format allowlist prevents the trigger. Per CVSS PR:N/UI:N, this is unauthenticated with no user interaction wherever such input is network-reachable. |
| Impact | The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, score 7.5) reflects a pure availability impact - no confidentiality or integrity loss - which contradicts the source 'Information Disclosure' tag; treat that tag as mislabeled, since the code path only causes excessive allocation, not data leakage. The network vector (AV:N) is realistic only where an application ingests attacker-supplied images over the network AND decodes the .gd format; the underlying trigger is file parsing, so practical exposure depends on whether untrusted .gd input actually reaches Pillow. No EPSS score, KEV entry, POC, or SSVC decision data was provided, so exploitation-probability signals are absent; the memory-exhaustion primitive is simple and reliable but yields only DoS, not code execution. Net assessment: a genuine but moderate-priority availability issue - meaningful for services that decode untrusted uploads, low urgency for environments that never process .gd files. |
| Exploit ScenarioDerived | An attacker uploads a small crafted .gd file whose GD 2.x header declares enormous width and height values to a web service that uses Pillow to open user-submitted images. When the server calls Image.open() on the file, GdImageFile._open() trusts the header dimensions and drives a massive C-heap allocation, exhausting memory and crashing the worker or host. No authentication or user interaction is required beyond getting the file decoded, and no public POC is currently identified. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 06, 2026
Denial-of-service via memory exhaustion in Python Pillow before 12.3.0 allows a crafted GD-format (.gd) image to trigger excessive C-heap allocation when opened, because GdImageFile._open() reads image dimensions straight from the GD 2.x header without invoking Pillow's Image._decompression_bomb_check() guard. Any application that loads untrusted .gd files with a vulnerable Pillow version can be crashed or driven into out-of-memory conditions. There is no public exploit identified at time of analysis, and it is not listed in CISA KEV; the CVSS 3.1 base score is 7.5 (availability-only impact).
RemediationAI
Vendor-released patch: upgrade Pillow to version 12.3.0 or later, which adds the missing Image._decompression_bomb_check() call to the GD plugin (commit f39b0ae6624eb2d7c5c5d651d9bb5fdbd96a8675; advisory GHSA-phj9-mv4w-65pm). If immediate upgrade is not possible, lower PIL.Image.MAX_IMAGE_PIXELS to a conservative value so oversized declared dimensions raise DecompressionBombError before large allocation (trade-off: legitimate very-large images are rejected), and avoid opening untrusted .gd files by restricting accepted formats to an explicit allowlist and refusing GD-format input at the application boundary (trade-off: loss of rarely needed .gd support). Running decode work in a memory-limited, isolated worker (e.g. cgroup or ulimit RLIMIT_AS) contains the blast radius of any residual excessive allocation.
Affected VersionsENISA
Affected Packages
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 (the maintained PIL fork) is one of the most widely used Python imaging libraries and ships decoders for many formats, including the libgd 'GD' bitmap format via PIL/GdImageFile.py. Pillow normally defends against decompression-bomb attacks by calling Image._decompression_bomb_check(), which compares declared pixel dimensions against MAX_IMAGE_PIXELS before buffers are allocated. The GD plugin's _open() parsed width/height fields from the GD 2.x header and populated self._size directly, bypassing that check, so an attacker-declared large dimension flowed unchecked into subsequent C-level heap allocation. This is a textbook CWE-789 (Memory Allocation with Excessive Size Value / uncontrolled allocation), in which an untrusted size field governs allocation without validation.
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
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Untrusted .gd input decoded without user interaction gives AV:N/AC:L/PR:N/UI:N; impact is memory-exhaustion DoS only, so C:N/I:N/A:H.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Pillow is a Python imaging library. Prior to 12.3.0, PIL/GdImageFile.py GdImageFile._open() read image dimensions from the GD 2.x header and stored them in self._size without calling Image._decompression_bomb_check(), allowing a crafted .gd file to trigger excessive C-heap allocation when loaded. This issue is fixed in version 12.3.0.
Blast Radius
ecosystem impact- 6,879 pypi packages depend on pillow (1,431 direct, 5,517 indirect)
Ecosystem-wide dependent count for version 12.3.0.
Articles & Coverage 1
Executive ViewAI
Python Pillow image library versions before 12.3.0 are vulnerable to denial-of-service attacks when processing specially crafted GD-format image files, causing uncontrolled memory allocation and application crashes. Any organization using Pillow to load untrusted images faces immediate risk of service outages. This availability-impacting vulnerability requires rapid detection and containment while the vendor develops a permanent patch.
No vendor-released patch identified at time of analysis. Interim mitigations: (1) Disable GD image format support if operationally feasible; (2) Enforce strict file-type whitelisting rejecting .gd files; (3) Require image files to originate from authenticated, trusted sources only; (4) Implement memory limits and resource monitoring on image processing services; (5) Subscribe to Pillow official security feed for patch notification.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
libImaging/TgaRleDecode.c in Pillow 9.1.0 has a heap buffer overflow in the processing of invalid TGA image files. Rated
Denial of service in Python Pillow (versions 8.2.0 through 12.2.0) allows remote attackers to exhaust memory during JPEG
Out-of-bounds memory disclosure in Python Pillow before 12.3.0 lets an attacker who supplies a crafted McIdas AREA image
Heap out-of-bounds write in Python Pillow prior to 12.3.0 lets an attacker who controls the rank-filter size parameter c
Uncontrolled memory consumption in Python Pillow (PIL) versions 5.1.0 through 12.2.x allows a remote attacker to cause d
The package pillow 5.2.0 and before 8.3.2 are vulnerable to Regular Expression Denial of Service (ReDoS) via the getrgb
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
Integer overflow in the ImagingResampleHorizontal function in libImaging/Resample.c in Pillow before 3.1.1 allows remote
Python Image Library (PIL) 1.1.7 and earlier and Pillow 2.3 might allow remote attackers to execute arbitrary commands v
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
Pillow through 8.2.0 and PIL (aka Python Imaging Library) through 1.1.7 allow an attacker to pass controlled parameters
An issue was discovered in Pillow before 8.1.1. Rated critical severity (CVSS 9.8), this vulnerability is remotely explo
Same technique Information Disclosure
View allVendor StatusVendor
SUSE
Severity: Important| Product | Status |
|---|---|
| SUSE Liberty Linux 8 | Fixed |
| SUSE Linux Enterprise Module for Package Hub 15 SP7 | Fixed |
| SUSE Linux Enterprise Server 16.0 SUSE Linux Enterprise Server for SAP applications 16.0 | Fixed |
| openSUSE Leap 16.0 | Fixed |
| openSUSE Tumbleweed | Fixed |
| SUSE Linux Enterprise High Performance Computing 15 SP4-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4-LTSS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5-LTSS | Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP7 | Affected |
| SUSE Linux Enterprise Server 15 SP7 | Affected |
| SUSE Linux Enterprise Desktop 15 SP7 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP7 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP7 | Affected |
| SUSE Linux Enterprise Server 15 SP4-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP4-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP5-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP5-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP6-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP6-LTSS | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP4 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP5 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP6 | Affected |
| SUSE Linux Enterprise Desktop 15 SP7 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP7 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP7 | Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP7 | Affected |
| SUSE Linux Enterprise Server 15 SP7 | Affected |
| SUSE Linux Enterprise Server 16.0 | Affected |
| SUSE Linux Enterprise Server 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP7 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.0 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
| openSUSE Leap 16.0 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4-LTSS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5-LTSS | Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP4 | Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP5 | Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP6 | Affected |
| SUSE Linux Enterprise Server 15 SP4 | Affected |
| SUSE Linux Enterprise Server 15 SP4-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP5 | Affected |
| SUSE Linux Enterprise Server 15 SP5-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP6 | Affected |
| SUSE Linux Enterprise Server 15 SP6-LTSS | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP6 | Affected |
| SUSE Manager Proxy 4.3 | Affected |
| SUSE Manager Retail Branch Server 4.3 | Affected |
| SUSE Manager Server 4.3 | Affected |
| SUSE Linux Enterprise Desktop 15 SP4 | Affected |
| SUSE Linux Enterprise Desktop 15 SP5 | Affected |
| SUSE Linux Enterprise Desktop 15 SP6 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP6 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP6 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP4 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP5 | Affected |
| openSUSE Leap 15.3 | Affected |
| openSUSE Leap 15.4 | Affected |
| openSUSE Leap 15.5 | Affected |
| openSUSE Leap 15.6 | Affected |
EUVD-2026-41901
GHSA-phj9-mv4w-65pm
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB