Vulnerabilities

Vulnerability · CVE-2026-112403

Pillow is a Python imaging library.

Published Oct 19, 2026 · catalog updated Oct 28, 2026 · Pillow is a Python

Last checked Oct 31, 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-112403. EPSS is 0.95%. 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
Critical9.8
Known exploitation
Not in CISA/VulnCheck KEV
EPSS
0.95%
Remediation
Version ranges on file
Affected products
Bitnami pillow · PyPI pillow · pip Pillow · vendor python-pillow

## Summary — which calls automatically — requests 1/2, 1/4 or 1/8 scaled JPEG output and shrinks and the tile extents to match, so allocates a single-row decode buffer of samples. sets / , calls , and then reads scanlines into that buffer without ever comparing , or against , and . libjpeg-turbo 3.x decodes lossless (SOF3) JPEG, but hardwires lossless streams to no scaling — the requested is silently discarded. It therefore returns full-width -sample rows into a buffer sized for . Each call writes bytes past the end of the heap allocation, and the overflowing bytes are the decoded pixel values, which are byte-exact for an 8-bit grayscale lossless image. The input is a standards-compliant JPEG, so does not prevent it. Pillow's Python SOF parser already accepts marker ("SOF3", "Spatial lossless") at 8-bit precision, so the file opens normally as a / mode image at its full declared size. ## Affected code At ( , 2026-08-29): - — ; at :240, at :252, with no geometry check between them. - — ; with . - — ; computes and shrinks , the tile extents and with no notion of lossless coding. - — . Because ( ) can never equal libjpeg's when , the decode always ends in an error after the rows have already been written: the caller sees an exception and gets no pixels back. The is a consequence of the overflow, not the issue being reported. ## Primitive Per scanline: a contiguous write of bytes immediately past a block, where for mode and 4 for RGB (RGBX) and CMYK; repeated for rows over the same region. The buffer size class is chosen by the attacker through , and for grayscale the overflowing content is an arbitrary attacker-chosen byte string. Measured in the reproducer below: 1200x1100 mode , — a 600-byte allocation, 600 bytes written past it, ASan reporting the whole 1200-byte row write as one . Threshold: must select , i.e. and . For with the default that means . ## Reproduction Self-contained Docker reproducer (Ubuntu 24.04, clang 20, libjpeg-turbo 3.1.4 and Pillow both built f

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.

  • Bitnami pillow0 → 13.0.0
  • PyPI pillow0 → 13.0.0
  • pip Pillow<= 12.3.0
  • vendor python-pillowversion unspecified

How to fix CVE-2026-112403

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-112403. EPSS is 0.95%. Act only if a listed version of Pillow is a Python is installed.

Which versions are affected?

Compare what you have installed with Pillow <= 12.3.0. Compare the installed version with the linked vendor advisory before you change production.

What should an analyst verify?

CWE-122: Heap-based Buffer Overflow. EPSS 0.95%. 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 · EUVD

    Detected

    Pillow is a Python imaging library. Prior to 13.0.0, Pillow's JPEG decoder can write a full-width scanline into a buffer sized for a requested draft scale. ImagingJpegDecode does not verify libjpeg's actual output width and component count after scaling is requested, and an 8-bit lossless SOF3 JPEG decoded by a build linked to libjpeg-turbo 3.x can ignore the requested downscaling geometry. An att

  2. Oct 20, 2026 · NIST NVD

    Updated

    Pillow is a Python imaging library. Prior to 13.0.0, Pillow's JPEG decoder can write a full-width scanline into a buffer sized for a requested draft scale. ImagingJpegDecode does not verify libjpeg's actual output width and component count after scaling is requested, and an 8-bit lossless SOF3 JPEG decoded by a build linked to libjpeg-turbo 3.x can ignore the requested downscaling geometry. An att

  3. Oct 20, 2026 · GitHub Advisory Database

    Updated

    ## Summary — which calls automatically — requests 1/2, 1/4 or 1/8 scaled JPEG output and shrinks and the tile extents to match, so allocates a single-row decode buffer of samples. sets / , calls , and then reads scanlines into that buffer without ever comparing , or against , and . libjpeg-turbo 3.x decodes lossless (SOF3) JPEG, but hardwires lossless streams to no scaling — the requested is silen

  4. Oct 26, 2026 · PyPA Advisory Database

    Fix available

    pillow fixed in 13.0.0

  5. Oct 26, 2026 · PyPA Advisory Database

    Fix available

    pillow fixed in 13.0.0

  6. Oct 26, 2026 · PyPA Advisory Database

    Updated

    ## Summary — which calls automatically — requests 1/2, 1/4 or 1/8 scaled JPEG output and shrinks and the tile extents to match, so allocates a single-row decode buffer of samples. sets / , calls , and then reads scanlines into that buffer without ever comparing , or against , and . libjpeg-turbo 3.x decodes lossless (SOF3) JPEG, but hardwires lossless streams to no scaling — the requested is silen

  7. Oct 28, 2026 · PyPA Advisory Database

    Updated

    ## Summary — which calls automatically — requests 1/2, 1/4 or 1/8 scaled JPEG output and shrinks and the tile extents to match, so allocates a single-row decode buffer of samples. sets / , calls , and then reads scanlines into that buffer without ever comparing , or against , and . libjpeg-turbo 3.x decodes lossless (SOF3) JPEG, but hardwires lossless streams to no scaling — the requested is silen

Sources

  • CVE.orgVulnerability recordCVE-2026-112403

    Official CVE identifier

    cve.org
  • FIRST EPSSExploitation probabilityCVE-2026-112403

    30-day exploitation probability 0.95%

    first.org
  • EUVDVulnerability recordEUVD-2026-104642

    Pillow is a Python imaging library. Prior to 13.0.0, Pillow's JPEG decoder can write a full-width scanline into a buffer sized for a requested draft scale. ImagingJpegDecode does not verify libjpeg's actual output width and component count after scaling is requested, and an 8-bit

    euvd.enisa.europa.eu
  • GitHub Advisory DatabasePackage advisoryGHSA-8g5g-8vmr-9782

    GitHub Advisory Database record mirrored by OSV.

    github.com
  • NIST NVDVulnerability recordCVE-2026-112403

    Pillow is a Python imaging library. Prior to 13.0.0, Pillow's JPEG decoder can write a full-width scanline into a buffer sized for a requested draft scale. ImagingJpegDecode does not verify libjpeg's actual output width and component count after scaling is requested, and an 8-bit

    nvd.nist.gov
  • OpenSSF OSV / OSV ScannerPackage advisoryBIT-pillow-2026-112403

    Pillow: Heap buffer overflow in ImagingJpegDecode

    osv.dev
  • PyPA Advisory DatabasePackage advisoryGHSA-8g5g-8vmr-9782

    Pillow: Heap buffer overflow in ImagingJpegDecode

    osv.dev
  • PyPA Advisory DatabasePackage advisoryPYSEC-2026-4332

    Pillow is a Python imaging library. Prior to 13.0.0, Pillow's JPEG decoder can write a full-width scanline into a buffer sized for a requested draft scale. ImagingJpegDecode does not verify libjpeg's actual output width and component count after scaling is requested, and an 8-bit

    osv.dev

References

Freshness

Last verified in this catalog Oct 31, 2026. Significant claims (KEV, EPSS, CVSS, affected ranges) come from the source rows above — open the original publisher for the authoritative advisory.

  • FIRST EPSSOct 31, 2026
  • GitHub Advisory DatabaseOct 29, 2026
  • OpenSSF OSV / OSV ScannerOct 29, 2026
  • PyPA Advisory DatabaseOct 28, 2026
  • PyPA Advisory DatabaseOct 28, 2026
  • CVE.orgOct 21, 2026
  • NIST NVDOct 21, 2026
  • EUVDOct 20, 2026