---
title: "CVE-2026-96639: Pillow multi-frame loaders can reuse stale native image storage after mode transitions"
url: https://erroneo.us/security/cve/CVE-2026-96639/
description: "CVE-2026-96639 (python-pillow Pillow): Pillow is a Python imaging library. From 11.0.0 until 13.0.0, multi-frame loaders can retain an ImagingCore…"
type: vulnerability-record
section: "Security Digest"
date_published: 2026-10-21
date_modified: 2026-10-21
publisher: erroneo.us
author: erroneo.us Security Desk
cve: "CVE-2026-96639"
kev: false
cvss: 9.8
epss: null
license: All rights reserved. Quote with attribution and a link.
---

# CVE-2026-96639: Pillow multi-frame loaders can reuse stale native image storage after mode transitions

**Signal:** Critical and remotely reachable. No known exploitation yet, but it is network-reachable without credentials. (Computed from CISA KEV, EPSS and CVSS; not an editorial verdict.)

## Should you act?

- No confirmed exploitation. It is not in CISA’s KEV catalog. That can change quickly after a public write-up; re-check if you are affected.
- Remotely reachable with no login and no user interaction. If the vulnerable service is exposed to the internet, prioritize it.
- Editorial verdict: Patch this week. Pillow 13.0.0: Critical Image-Parsing Memory Bugs Fixed — If your service opens images that users or the internet supply, move to Pillow 13.0.0 this week; the worst bugs are memory corruption reachable from a crafted file, and reproducers are in the published advisories.

## What it is

Pillow is a Python imaging library. From 11.0.0 until 13.0.0, multi-frame loaders can retain an ImagingCore allocation created for a narrow frame mode while a later frame of the same dimensions changes the logical mode and decoder tiles to wider RGB or CMYK data. ImageFile.loadprepare() reuses the stale native storage because im is non-null without verifying that its mode and size still match. Crafted PSD, MPO, DCX, or MIC frame transitions can then write wider pixels into the narrow allocation, causing native out-of-bounds writes and crashes. The MPO path can also cause a native over-read and, in demonstrated runtime-specific profiles, command execution. This issue is fixed in version 13.0.0.

## Affected products (CVE record)

- python-pillow Pillow: >= 11.0.0, < 13.0.0

## Severity

- GitHub_M CVSS 3.1: 9.8 `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H`

## Exploitation

- CISA KEV: not listed (no confirmed in-the-wild exploitation known to CISA).

## Sources

- [CVE.org record CVE-2026-96639](https://www.cve.org/CVERecord?id=CVE-2026-96639)
- [NVD entry CVE-2026-96639](https://nvd.nist.gov/vuln/detail/CVE-2026-96639)
- [github.com](https://github.com/python-pillow/Pillow/security/advisories/GHSA-v9pv-5gc8-w2m6)
- [github.com](https://github.com/python-pillow/Pillow/pull/10105)
- [github.com](https://github.com/python-pillow/Pillow/commit/78d97d994579aef81aafe123773d525f40f2522a)
- [github.com](https://github.com/python-pillow/Pillow/releases/tag/13.0.0)

---
Source page: https://erroneo.us/security/cve/CVE-2026-96639/ · Security Digest: https://erroneo.us/security/ · More: https://erroneo.us/llms.txt
