Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSubmit crafted IPTC image to app
-
ExploitApplication opens and loads file via Pillow
-
ExecutionImage.merge dereferences null image8 plane
-
ImpactNative process crash (denial of service)
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Null pointer safety, defensive checks
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 either (a) an application using Pillow 12.0.0 up to (but not including) 13.0.0 to open and load an attacker-supplied crafted IPTC file, or (b) a caller invoking Image.merge() directly with a first band that is a 32-bit integer ('I') or floating-point ('F') image backed by image32 storage merged as a narrower multiband image - the validation flaw skips the first input band, allowing the null image8 plane dereference. Limiting factors: only the 12.0.0-12.x release line is affected (13.0.0 is fixed); the vulnerable code path is only reached when the application actually processes attacker-controlled image input, so services that do not accept untrusted images are not realistically exposed; and the outcome is limited to a process crash, not data exposure or code execution. |
| Impact | This is a denial-of-service vulnerability (CWE-476 null pointer dereference) with a genuinely high availability impact but zero confidentiality or integrity impact, which the vendor's own CVSS 4.0 vector reflects (VC:N/VI:N/VA:H). The 8.7 CVSS 4.0 score looks alarming but is driven almost entirely by the network attack vector, low complexity, and no-auth/no-UI metrics combined with a HIGH availability impact - it is a crash, not code execution. No EPSS score was provided, there is no CISA KEV listing in the input (so no confirmed active exploitation), and no public exploit code was supplied; the GitHub commit contains only a regression test, not a weaponized POC. The practical risk is therefore 'crash the worker process' rather than system compromise, which matters most for always-on services that auto-ingest untrusted images (web upload pipelines, thumbnailers) where repeated crashes degrade availability. Note a nuance to verify: the description says exploitation occurs 'when an application opens and loads' a crafted IPTC file, implying the target must process attacker-supplied input, yet the vendor rated UI:N - this is consistent only if you treat automated server-side image processing as requiring no human interaction. Overall this is a real-but-bounded priority: patch promptly on internet-facing image-processing services, lower urgency where images are not attacker-controlled. |
| Exploit ScenarioDerived | An attacker uploads a crafted IPTC-tagged image to a web service that uses a vulnerable Pillow (12.0.0 up to 13.0.0) to open and load it; when Pillow internally reaches Image.merge() with a 32-bit integer or floating-point first band backed by image32 storage, it dereferences a null image8 plane and the native process crashes. No authentication or user interaction beyond submitting the file is required, and attack complexity is low. No public exploit code was identified in the provided data, though the fix commit includes a regression test demonstrating the trigger condition. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 19, 2026
Denial of service in Pillow 12.0.0 through 12.x lets unauthenticated remote attackers crash a Python process by supplying a crafted IPTC image that reaches Image.merge(), or by calling Image.merge() with an I/F first band backed by image32 storage. The flaw is a null-pointer dereference (CWE-476) with high availability impact but no confidentiality or integrity impact; it is fixed in 13.0.0 and no public exploit was identified at time of analysis.
RemediationAI
Vendor-released patch: upgrade Pillow to 13.0.0 or later using the release at https://github.com/python-pillow/Pillow/releases/tag/13.0.0; the vendor advisory is https://github.com/python-pillow/Pillow/security/advisories/GHSA-cp9v-662q-vvx9 and the fix commit is https://github.com/python-pillow/Pillow/commit/b6ee66e8b2c2c0932bdf65f963268d9f2927ef86. If immediate upgrade is not possible, prevent untrusted IPTC/image files from reaching Pillow open/load paths and avoid passing attacker-controlled or I/F first bands to Image.merge(); enforce application-side mode validation before merge, rejecting 32-bit integer or floating-point first bands when the target mode has multiple bands, though this may break legitimate I/F merge workflows. Run image processing in an isolated worker or container with automatic restart and resource limits to contain crashes, accepting that this only limits blast radius and does not remove the bug.
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's Image.merge() combines single-band images into a multiband image. The native implementation in src/libImaging/Bands.c (ImagingMerge) validates input bands and later accesses an image8 plane. A validation gap allows a 32-bit integer ('I') or floating-point ('F') image, whose storage uses 4-byte pixels (image32), to be used as the first band when producing a narrower multiband image; the merge path then dereferences a null image8 plane and crashes the interpreter. The CWE-476 class describes this null pointer dereference. The upstream fix commit b6ee66e8b2c2c0932bdf65f963268d9f2927ef86 adds an explicit rejection when a band with pixelsize 4 is merged into a multiband image and adds a regression test expecting ValueError 'image has wrong mode'. The affected CPE is cpe:2.3:a:python-pillow:pillow:*:*:*:*:*:*:*:*.
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
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
Remote unauthenticated crafted-file input processed automatically justifies AV:N/AC:L/PR:N/UI:N; impact is a native crash only, so C:N/I:N/A:H with unchanged scope.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Pillow is a Python imaging library. From 12.0.0 until 13.0.0, Pillow's Image.merge() can dereference a null image8 plane. Validation skips the first input band, allowing a 32-bit integer or floating-point image backed by image32 storage to be merged as a narrower multiband image. A crafted IPTC file can reach this path when an application opens and loads it, or a caller can invoke Image.merge() directly with such a first band. This causes a native process crash. This issue is fixed in version 13.0.0.
Blast Radius
ecosystem impact- 137 pypi packages depend on pillow (111 direct, 26 indirect)
Ecosystem-wide dependent count for version 12.0.0.
Technical POC Analysis
CWE-476, NULL pointer dereference.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Pillow 12.0.0 through 12.x contains a high-severity availability flaw that can crash Python services when processing crafted IPTC images or certain Image.merge() inputs. Teams operating image upload, thumbnail, document, or media-processing pipelines with Pillow are exposed to service disruption; confidentiality and integrity are not impacted, and no public exploit was identified at time of analysis.
No vendor-released patch identified at time of analysis; interim mitigations include restricting Pillow 12.0.0-12.x processing of untrusted IPTC images, validating or sanitizing image inputs, avoiding Image.merge() with an I/F first band backed by image32 storage, isolating image-processing workers with restart and resource limits, and monitoring crash and availability events. If Pillow 13.0.0 is confirmed available per vendor advisory, apply it as the fixed release.
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
A null pointer dereference occurs when a program attempts to access memory through a pointer that has been set to NULL (address 0x0).
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
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
EUVD-2026-104646
GHSA-cp9v-662q-vvx9
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB