CVE-2026-96636: Pillow memory exhaustion via multi-frame image decompression bomb

CVE-2026-96636 · Severity: medium · CVSS 6.5 · Published 2026-10-21

Pillow is a Python imaging library used to process and display image files. A crafted multi-frame image can bypass security checks by declaring a small first frame that passes initial validation, then switching to an oversized second frame that consumes hundreds of megabytes of memory when decoded, causing the application to crash or become unresponsive. An attacker can trigger this by providing a malicious image file to any application that uses Pillow.

Technologies: pillow (PyPI). Vendors: PyPI.

Quick answers

Is CVE-2026-96636 exploited in the wild?
No. Junglewise Threat Intelligence has no report of CVE-2026-96636 being exploited in the wild.
How severe is CVE-2026-96636?
Medium severity, with a CVSS score of 6.5, published 21 October 2026.
Which products and versions are affected?
pillow (PyPI) < 13.0.0, ECOSYSTEM:introduced=0,fixed=13.0.0; Python Imaging Library (PIL/Pillow) Pillow prior to 13.0.0.
Is there a fix for CVE-2026-96636?
Yes. pillow (PyPI): upgrade to 13.0.0 or later. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.
How is CVE-2026-96636 attacked?
It is attacked over the network, in a software library.
Am I affected by CVE-2026-96636?
Check whether you run pillow (PyPI) or Python Imaging Library (PIL/Pillow) Pillow at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

How to fix

  • pillow (PyPI): upgrade to 13.0.0 or later
    pip install "pillow>=13.0.0"

Technical details

The vulnerability exists in MpoImageFile.seek() and DcxImageFile.seek() methods, which reparse later frames without re-running Image._decompression_bomb_check(). A multi-frame image with a tiny first frame can pass Image.open() validation, but a later frame can declare dimensions that exceed memory limits. When the application iterates frames via seek(), load(), or ImageSequence.Iterator, the oversized frame is decoded without decompression bomb protection, leading to memory exhaustion DoS. The fix adds decompression bomb checks after seek operations open new frames.

Affected products

  • Python Imaging Library (PIL/Pillow) Pillow prior to 13.0.0

Identifiers

  • CVE-2026-96636
  • BIT-PILLOW-2026-96636
  • GHSA-p8hx-v2p6-rp84
  • PYSEC-2026-4337

Timeline

  • 2026-10-21: disclosed: CVE-2026-96636 published
  • 2026-09-17: patched: Fix merged in commit f1acfc54c53502948d0d14121872061df931db48

References

This page as Markdown. Free to reuse under CC BY 4.0 with a link back.