Security fix · CVE-2026-112405
Pillow is a Python imaging library.
Published Oct 19, 2026 · catalog updated Oct 28, 2026 · Pillow is a Python
Last checked Oct 30, 2026. A connected source was read within the last 7 days.
Check if you run it
No confirmed exploitation is on record for CVE-2026-112405. EPSS is 0.59%. Act only if a listed version of Pillow is a Python is installed.
Gaps on this record
- The stored product name is a package slug. The name on this page is taken from the title (Pillow is a Python).
- No vendor fix or required action is stored. Compare the linked advisory before you change production.
- Severity
- High8.7
- Known exploitation
- Not in CISA/VulnCheck KEV
- EPSS
- 0.59%
- Remediation
- Version ranges on file
- Affected products
- PyPI pillow · pip pillow · pypi pillow
### Summary checks the mode of every input band except band 0. If band 0 is a single-band or image, the native merge routine reads a pixel pointer that is NULL for those modes and the process crashes. The IPTC plugin reaches this from a plain followed by a load, and IPTC has no magic-byte prefilter, so a crafted file with no recognizable header can drive it. ### Details The validation loop skips band 0: - iterates and checks mode and size only for those. For an or image the 8-bit plane is NULL (only is set). dereferences for the multi-band output modes: - , , The IPTC loader builds the band list from an attacker-typed sub-image and passes it to merge with the sub-image at index 0: - - registers the opener with no accept function. ### PoC Run it: Observed on a source build of commit . Under AddressSanitizer: The null address confirms the dereference of the missing plane for band 0. ### Impact NULL pointer dereference in a C extension. A crafted file opened and loaded through the IPTC path crashes the worker process. This is a hard crash, not a Python exception an application can catch.
Are you affected?
Enter the version you run. The result uses only the ranges stored on this record.
The check returns affected, not affected, or incomplete. It does not guess a version that is missing from the record.
- PyPI pillow12.0.0 → 13.0.0
- pip pillow>= 12.0.0, < 13.0.0
- pypi pillowversion unspecified
How to fix CVE-2026-112405
Upgrade
CVE-2026-112405 lists a fix boundary at 13.0.0. Compare the installed build with that boundary before you change production.
Version check
Affected < 13.0.0
Advisory
Open the cve_org record and follow its fix.
Official advisories
What to do
Three questions, each answered from this record only. Confirm the vendor advisory before you patch.
Should you patch?
No confirmed exploitation is on record for CVE-2026-112405. EPSS is 0.59%. Act only if a listed version of Pillow is a Python is installed.
Which versions are affected?
Compare what you have installed with 12.0.0 → 13.0.0, >= 12.0.0, < 13.0.0. Compare the installed version with the linked vendor advisory before you change production.
What should an analyst verify?
CWE-476: NULL Pointer Dereference. EPSS 0.59%. There is no CISA KEV listing. No Exploit-DB or Metasploit reference is linked. Use the source links for the original advisory.
Technology hubs
Code
The project this record applies to. Exploit listings stay in References.
Timeline
Detection, updates, and resolution for this record.
Oct 19, 2026 · NIST NVD
Detected
Pillow is a Python imaging library. From 12.0.0 until 13.0.0, Pillow's Image.merge() can dereference a null image8 plane. Validation skips the first input band, allowing a 32-bit integer or floating-point image backed by image32 storage to be merged as a narrower multiband image. A crafted IPTC file can reach this path when an application opens and loads it, or a caller can invoke Image.merge() di
Oct 20, 2026 · NIST NVD
Updated
Pillow is a Python imaging library. From 12.0.0 until 13.0.0, Pillow's Image.merge() can dereference a null image8 plane. Validation skips the first input band, allowing a 32-bit integer or floating-point image backed by image32 storage to be merged as a narrower multiband image. A crafted IPTC file can reach this path when an application opens and loads it, or a caller can invoke Image.merge() di
Oct 20, 2026 · NIST NVD
Updated
Pillow is a Python imaging library. From 12.0.0 until 13.0.0, Pillow's Image.merge() can dereference a null image8 plane. Validation skips the first input band, allowing a 32-bit integer or floating-point image backed by image32 storage to be merged as a narrower multiband image. A crafted IPTC file can reach this path when an application opens and loads it, or a caller can invoke Image.merge() di
Oct 21, 2026 · GitHub Advisory Database
Updated
### Summary checks the mode of every input band except band 0. If band 0 is a single-band or image, the native merge routine reads a pixel pointer that is NULL for those modes and the process crashes. The IPTC plugin reaches this from a plain followed by a load, and IPTC has no magic-byte prefilter, so a crafted file with no recognizable header can drive it. ### Details The validation loop skips b
Oct 28, 2026 · PyPA Advisory Database
Fix available
pillow fixed in 13.0.0
Oct 28, 2026 · PyPA Advisory Database
Fix available
pillow fixed in 13.0.0
Oct 28, 2026 · PyPA Advisory Database
Updated
### Summary checks the mode of every input band except band 0. If band 0 is a single-band or image, the native merge routine reads a pixel pointer that is NULL for those modes and the process crashes. The IPTC plugin reaches this from a plain followed by a load, and IPTC has no magic-byte prefilter, so a crafted file with no recognizable header can drive it. ### Details The validation loop skips b
Sources
- CVE.orgVulnerability recordCVE-2026-112405
Official CVE identifier
cve.org - FIRST EPSSExploitation probabilityCVE-2026-112405
30-day exploitation probability 0.59%
first.org - GitHub Advisory DatabasePackage advisoryGHSA-cp9v-662q-vvx9
Pillow: NULL pointer dereference in Image.merge via an unvalidated band 0
github.com - GitLab Advisory DatabasePackage advisoryCVE-2026-112405
Image.merge() checks the mode of every input band except band 0. If band 0 is a single-band I or F image, the native merge routine reads a pixel pointer that is NULL for those modes and the process crashes. The IPTC plugin reaches this from a plain Image.open() followed by a load, and IPTC has no magic-byte prefilter, so a crafted file with no recognizable header can drive it.
advisories.gitlab.com - NIST NVDVulnerability recordCVE-2026-112405
Pillow is a Python imaging library. From 12.0.0 until 13.0.0, Pillow's Image.merge() can dereference a null image8 plane. Validation skips the first input band, allowing a 32-bit integer or floating-point image backed by image32 storage to be merged as a narrower multiband image.
nvd.nist.gov - PyPA Advisory DatabasePackage advisoryGHSA-cp9v-662q-vvx9
Pillow: NULL pointer dereference in Image.merge via an unvalidated band 0
osv.dev - PyPA Advisory DatabasePackage advisoryPYSEC-2026-4333
Pillow is a Python imaging library. From 12.0.0 until 13.0.0, Pillow's Image.merge() can dereference a null image8 plane. Validation skips the first input band, allowing a 32-bit integer or floating-point image backed by image32 storage to be merged as a narrower multiband image.
osv.dev
References
Freshness
Last verified in this catalog Oct 30, 2026. Significant claims (KEV, EPSS, CVSS, affected ranges) come from the source rows above — open the original publisher for the authoritative advisory.
- FIRST EPSSOct 30, 2026
- PyPA Advisory DatabaseOct 28, 2026
- PyPA Advisory DatabaseOct 28, 2026
- GitLab Advisory DatabaseOct 23, 2026
- GitHub Advisory DatabaseOct 22, 2026
- CVE.orgOct 21, 2026
- NIST NVDOct 21, 2026