CVE-2026-112393: Pillow: Heap buffer overflow in _tiffWriteProc when saving TIFF to BytesIO
Pillow is a Python imaging library. From 2.0.0 until 13.0.0, Pillow has a heap buffer overflow and stale-heap disclosure in tiffWriteProc when saving compressed TIFF data through libtiff to a target without a usable fileno(), such as BytesIO. The callback sizes its allocation from the prior buffer size instead of the current write position, allowing an attacker-controlled out-of-line TIFF tag or retained ICC profile to be copied beyond the allocation after libtiff seeks forward. This overflow can crash the process and may allow code execution. Independently, unwritten alignment gaps in compressed TIFF output larger than 64 KiB can disclose stale heap bytes without a crafted tag. File paths and targets with real file descriptors are unaffected. This issue is fixed in version 13.0.0.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
Pillowto a version that resolves this vulnerability.Fixed in 13.0.0
Event History
Frequently Asked Questions
Which applications are exposed to this issue?
Applications using Pillow versions 2.0.0 through versions before 13.0.0 are exposed when they save compressed TIFF output through libtiff to a target without a usable file descriptor, such as a BytesIO object. Saving to file paths or targets with real file descriptors is unaffected.
What conditions are needed to trigger the overflow?
The overflow requires compressed TIFF output to a no-fileno target and attacker-controlled out-of-line TIFF tag data or a retained ICC profile. It occurs after libtiff seeks forward and the callback allocates based on the previous buffer size rather than the current write position.
Can data be disclosed without a crafted TIFF tag?
Yes. Compressed TIFF output with unwritten alignment gaps larger than 64 KiB can disclose stale heap bytes independently of the crafted-tag overflow condition.
What should be done if upgrading cannot happen immediately?
Avoid saving compressed TIFF data to BytesIO or other targets without a usable fileno(). Use file paths or output targets backed by real file descriptors until Pillow can be updated to version 13.0.0.