Vulnerabilities

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

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.

  1. 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

  2. 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

  3. 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

  4. 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

  5. Oct 28, 2026 · PyPA Advisory Database

    Fix available

    pillow fixed in 13.0.0

  6. Oct 28, 2026 · PyPA Advisory Database

    Fix available

    pillow fixed in 13.0.0

  7. 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