Skip to main content

Pillow EUVDEUVD-2026-104646

| CVE-2026-112405 HIGH
NULL Pointer Dereference (CWE-476)
2026-10-19 GitHub_M GHSA-cp9v-662q-vvx9
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 IPTC image to app
  2. Exploit
    Application opens and loads file via Pillow
  3. Execution
    Image.merge dereferences null image8 plane
  4. Impact
    Native 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.

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

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

Pillow 12.0.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'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

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

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/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:29 cve.org
HIGH 8.7

DescriptionCVE.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
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.3%
Top 80% exploitable
Prevalence
High
Pillow is the de facto Python imaging library, embedded in countless web and data pipelines
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

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.

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