CVE-2026-96644
High · 8.1CVSS
8.1
EPSS
0.4%
Published
Oct 21, 2026
CISA due date
—
Cloudanix analysis
A bug in a popular Python picture library on Windows lets specially made image files cause the program to read memory it shouldn't, which can make the program crash or leak information.
- Exploitation
- Requires User Interaction
- Attacker needs
- User Interaction
- Complexity
- Low
- Impact
- Data Exposure
- Component
- Library
- Class
- Memory Corruption
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
On Windows, unchecked 32-bit WMF/EMF dimensions in WmfImagePlugin.py are passed to drawwmf in display.c; the DIB allocation uses 16-bit-truncated bcWidth/bcHeight while pixel copy uses full dimensions, enabling out-of-bounds heap read.
Why it matters to the business
Applications processing untrusted images on Windows may crash or leak memory; low but non-zero exploitability on widely used Python imaging code increases operational risk for image-handling services.
How an attack unfolds
An attacker crafts a wide but short WMF/EMF metafile that bypasses the pixel-count decompression check, supplies it to a vulnerable Pillow installation on Windows, and triggers the native handler to read beyond the allocated DIB buffer.
How to fix it
Upgrade Pillow to version 13.0.0 or later on all Windows deployments; avoid processing untrusted WMF/EMF files until patched.
How to confirm the fix worked
Confirm Pillow version >= 13.0.0 is installed; test rendering of known-bad metafiles to verify no crash or memory disclosure occurs.
Typical attack path
- Craft a malicious WMF or EMF file with mismatched 32-bit and truncated 16-bit dimensions
- Deliver the file to a target application using Pillow < 13.0.0 on Windows for image processing
- Trigger rendering path through WmfImagePlugin.py into drawwmf
- Induce out-of-bounds read to crash the process or disclose heap memory
How to detect it
Review application logs for unexpected crashes or errors during WMF/EMF image rendering; inspect Python process memory dumps or heap artifacts after processing suspicious image files.
What your security team should do
- Prioritize upgrade of Pillow to 13.0.0 on Windows systems within the next patch cycle
- Restrict or sandbox image processing of WMF/EMF formats from untrusted sources
- Monitor EPSS trend and any future exploit publications given recent publication
The record
Pillow is a Python imaging library. Prior to 13.0.0 on Windows, src/PIL/WmfImagePlugin.py passes unchecked 32-bit WMF or EMF dimensions to the native drawwmf handler in src/display.c. The handler sizes a DIB allocation from 16-bit-truncated bcWidth and bcHeight fields but copies pixel data using the original full dimensions. A crafted wide, short metafile can pass the pixel-count decompression-bomb check and make the Windows-only renderer read beyond the heap buffer, potentially disclosing memory or crashing the process. This issue is fixed in version 13.0.0.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|
Related vulnerabilities
- CVE-2026-62958 libriscv is a RISC-V sandbox and emulator. CWE-125
- CVE-2026-119338 Tesseract is an open source OCR engine. CWE-125
- CVE-2026-119299 gopacket provides packet processing capabilities for Go. CWE-125
- CVE-2026-119722 Blender before 4.5.15 and 5.x before 5.2.3 contains a heap out-of-bounds access… CWE-125
- CVE-2026-119721 Blender before 4.5.15 and 5.x before 5.2.3 contains an out-of-bounds read vulnerability… CWE-125
- CVE-2026-119720 Blender before 4.5.15 and 5.x before 5.2.3 contains a heap out-of-bounds read… CWE-125
- CVE-2026-104063 Scribus before 1.6.7 contains an out-of-bounds read vulnerability in the Mac PICT image… CWE-125
- CVE-2026-61627 libass is a portable subtitle renderer for the `ASS`/SSA (Advanced Substation… CWE-125