CVE-2026-112404
8.8HighPublished 19 Oct 2026 · NVD status: Received · AI triage by gemini-3.8-flash
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
- Impact
- High impact on availability
- Weakness
- CWE-126
Impact
Remote attackers can crash your service or leak heap memory into rendered image outputs by supplying a crafted TIFF file without authentication.
Root cause
The TIFF tile and RGBA decoding paths fail to verify that the required input row fits within the buffer provided by libtiff when handling duplicated PhotometricInterpretation or BitsPerSample tags, causing an out-of-bounds heap read.
Affected systems
Pillow 8.1.0 through versions prior to 13.0.0
CVSS v4.0 · CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Fix & remediation
Upgrade Pillow to version 13.0.0 or higher. If upgrading must wait, reject or avoid decoding untrusted TIFF images using tile or RGBA paths.
$ pip install --upgrade 'Pillow>=13.0.0'AI-suggested. Run it in staging first and check it against the vendor advisory. Why?
NVD description
Pillow is a Python imaging library. From 8.1.0 until 13.0.0, Pillow's TIFF tile and RGBA decode paths can read beyond row data produced by libtiff. In _decodeTile and the RGBA unpacker path, when Pillow and libtiff interpret duplicated PhotometricInterpretation or BitsPerSample tags differently, Pillow does not verify that the required input row fits inside the row libtiff produced, while the strip path has this validation. Loading pixels from such a crafted TIFF can expose adjacent heap data in output pixels or crash the process. This issue is fixed in version 13.0.0.