Skip to content
Rush Commerce
Software & Dev3 min read

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 .png does not help.
  • The condition: the optional olefile package 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
TR

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.