Pillow 13.0.0 fixes 38 flaws: upgrade before your uploads bite
Pillow 13.0.0 patches 38 security advisories, including CVE-2026-112398, a FlashPix heap overflow that can run code from one image. It also drops Python 3.10.
If your Python app accepts image uploads, it almost certainly runs Pillow. Pillow 13.0.0 shipped on October 16 with fixes for 38 security advisories. The one to read first is CVE-2026-112398: a heap buffer overflow in the FlashPix (FPX) decoder that can run code when your app opens a single crafted file. Product photos, avatars, receipts, thumbnails: any code path that calls Image.open() on a file a stranger sent you is in scope. The catch is that 13.0.0 also drops Python 3.10, so for some teams this is not a one-line bump.
What actually happened
The Pillow 13.0.0 release notes list 38 advisories: 2 critical, 13 high, and the rest medium and low. Formats hit include JPEG, TIFF, PDF, WMF/EMF, GIF, BMP and EPS. Many are denial-of-service bugs that let a small file eat memory or CPU. A few are memory-corruption bugs.
The GitLab advisory for CVE-2026-112398 (GHSA-5x8w-8jj5-q52h) gives the details for the worst one:
- The bug: a heap overflow in Pillow's FlashPix JPEG-tile decoder, which can lead to code execution.
- The trigger: an app opens one crafted file with
Image.open(). Pillow detects the format from the file's content, not its extension, so renaming the upload to.pngdoes not help. - The condition: the optional
olefilepackage must be installed. Without it, Pillow cannot read FPX files. - Affected: every version before 13.0.0. GitLab rates it 8.1 (High) under CVSS 3.1. Pillow's own notes list the JPEG decoder overflow as critical.
Other items worth knowing: CVE-2026-112900 is an argument injection into Ghostscript through EPS filenames, and CVE-2026-96639 (critical) reuses stale image memory after a mode change. We found no reports of exploitation in the wild.
Why Pillow 13.0.0 matters for your business
Uploads are attacker input. Every store, portal and internal tool that resizes an image is parsing a file format written by someone you don't know. Image libraries are old C code with a long bug history.
Check for olefile today. Run pip show olefile in each environment. If nothing needs it, remove it. That shuts the FPX path even before you upgrade.
Python 3.10 is the real blocker. Pillow 13 drops Python 3.10, which reached end of life this month. If your app is still on 3.10, the upgrade is a runtime migration. Plan it now, not after the next advisory.
Key takeaways
- Pillow 13.0.0 (October 16) fixes 38 security advisories across JPEG, TIFF, PDF, EPS and more
- CVE-2026-112398: one crafted FPX file opened with Image.open() can run code if olefile is installed
- Renaming files does not help: Pillow detects formats by content
- Remove olefile if you don't need it, then upgrade to Pillow 13.0.0
- Still on Python 3.10? Pillow 13 dropped it, so schedule the runtime upgrade
Treat every upload as hostile. We build upload pipelines that allow-list formats, process images in isolated workers with memory limits, and keep dependencies pinned and patched. Ask us to audit your image handling, or see what we build.
Sources: Pillow 13.0.0 release notes, GitLab Advisory Database.
- #pillow
- #python
- #cve-2026-112398
- #security
- #image-processing
Tommy Rush — Founder, Rush Commerce
Operator turned builder. 15+ years running operations — now shipping the systems businesses run on. More
Get The Rush Report weekly — one email, zero fluff.
Keep reading
OpenCode MCP OAuth RCE: silent patch, no CVE, check by hand
A malicious MCP server could run code on Windows and WSL machines using OpenCode 1.0.137–1.18.32. The fix shipped with no CVE, so scanners miss it.
Read itBrotli CVE-2026-111497 hits Bun, Python and Envoy, not just Node
The Brotli decoder bug behind the Node.js RCE also affects Bun, Python Brotli, brotlicffi, Envoy and Istio. Fixed versions, exposure paths and stopgaps.
Read it