CVE-2026-96636
Medium · 6.5CVSS
6.5
EPSS
0.3%
Published
Oct 21, 2026
CISA due date
—
Cloudanix analysis
A flaw in a popular Python image library lets attackers send specially made picture files that can crash or slow down programs by using up all available memory.
- Exploitation
- Requires User Interaction
- Attacker needs
- User Interaction
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
MpoImageFile.seek() and DcxImageFile.seek() reparse later MPO or DCX frames and replace self._size without rerunning Image._decompression_bomb_check(), allowing a crafted multi-frame image to bypass the initial size check and allocate hundreds of megabytes or more during normal iteration via seek(), load(), or ImageSequence.Iterator.
Why it matters to the business
Attackers can trigger memory exhaustion in any application processing untrusted multi-frame MPO or DCX images, leading to denial of service, application crashes, or resource starvation with minimal attacker effort; the issue affects a widely used Python imaging library released four days ago with stable low exploit probability and no known ransomware use.
How an attack unfolds
An attacker crafts a multi-frame image where the first frame is tiny enough to pass Image.open() decompression checks but a subsequent frame declares dimensions that exceed limits; when the victim application iterates frames using seek(), load(), or standard iterators, the library decodes the oversized frame without re-checking, exhausting memory and causing denial of service.
How to fix it
Upgrade Pillow to version 13.0.0 or later in all environments; after upgrade, re-test any image-handling code paths that process MPO or DCX files to confirm the decompression bomb check now runs on every frame.
How to confirm the fix worked
Verify installed Pillow version is 13.0.0 or newer; attempt to open and iterate a test multi-frame image containing an oversized later frame and confirm memory usage remains bounded or an explicit decompression bomb error is raised.
Typical attack path
- Craft a multi-frame MPO or DCX image with a small first frame and an oversized later frame
- Deliver the image to a target application that uses Pillow to open and iterate frames
- Trigger frame iteration through seek(), load(), or ImageSequence.Iterator
- Observe memory exhaustion and denial of service on the target process
How to detect it
Review application logs and system metrics for sudden spikes in memory usage correlated with image-processing Python processes; search for any custom image-handling code that catches decompression-bomb exceptions and inspect recent changes around MPO or DCX handling.
What your security team should do
- Immediately inventory all applications using Pillow and schedule upgrade to 13.0.0
- Prioritize upgrade for any public-facing or untrusted-image processing services given the four-day-old disclosure
- Add runtime memory and CPU limits around image-processing workers as a temporary control
- Monitor EPSS and exploit maturity for any upward trend before relaxing other mitigations
The record
Pillow is a Python imaging library. Prior to 13.0.0, MpoImageFile.seek() and DcxImageFile.seek() reparse later MPO or DCX frames and replace self._size without rerunning Image._decompression_bomb_check(). A crafted multi-frame image can use a tiny first frame to pass Image.open() and then declare an over-limit later frame. Normal frame iteration through seek(), load(), or ImageSequence.Iterator can decode that frame and commit hundreds of megabytes or more, causing memory-exhaustion denial of service. This issue is fixed in version 13.0.0.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|
Related vulnerabilities
- CVE-2026-63341 Aedes is an MQTT broker that can run on any stream server. CWE-400
- CVE-2026-62300 Filecoin Pin is an IPFS Pinning Service API implementation that pins to Filecoin's PDP… CWE-400
- CVE-2026-62254 LibreDWG is a free C library to read and write DWG files. CWE-400
- CVE-2026-62250 LibreDWG is a free C library to read and write DWG files. CWE-400
- CVE-2026-62303 Pistache is a high-performance REST toolkit written in C++. CWE-400
- CVE-2026-62160 Daptin is a GraphQL/JSON-API headless CMS. CWE-400
- CVE-2026-61848 Crass is a Ruby CSS parser that's fully compliant with the CSS Syntax Level 3… CWE-400
- CVE-2026-61854 VoiceSentinel is a real-time voice moderation system for Minecraft servers. CWE-400