CVE-2026-112902
Pillow: Memory disclosure and segfault in libtiff encoder via crafted TIFF tags
Pillow is a Python imaging library. In versions through 12.3.0, the libtiff TIFF encoder can pass arguments to TIFFSetField() that do not match libtiff’s definition of the corresponding tag. When an application saves attacker-controlled image metadata through this encoder, crafted tag values can cause invalid memory reads, copying process memory into the encoded output or crashing the process. Applications that return the encoded output to an attacker can disclose that memory. The issue is reachable when re-saving compressed TIFF images and through certain conversions that preserve EXIF metadata into compressed TIFF output. This vulnerability is fixed in version 13.0.0.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
8.3
Pillow: Memory disclosure and segfault in libtiff encoder via crafted TIFF tags
Pillow is a Python imaging library. In versions through 12.3.0, the libtiff TIFF encoder can pass arguments to TIFFSetField() that do not match libtiff’s definition of the corresponding tag. When an application saves attacker-controlled image metadata through this encoder, crafted tag values can cause invalid memory reads, copying process memory into the encoded output or crashing the process. Applications that return the encoded output to an attacker can disclose that memory. The issue is reachable when re-saving compressed TIFF images and through certain conversions that preserve EXIF metadata into compressed TIFF output. This vulnerability is fixed in version 13.0.0.
- Record
CVE-2026-112902- CVSS 4.0
- 8.3 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-686
- Updated
- 2026-11-05
EUVDEUVD-2026-117793
8.3
Pillow is a Python imaging library. In versions through 12.3.0, the libtiff TIFF encoder can pass arguments to TIFFSetField() that do not match libtiff’s definition of the corresponding tag. When an application saves attacker-controlled image metadata through this encoder, crafted tag values can cause invalid memory reads, copying process memory into the encoded output or crashing the process. Applications that return the encoded output to an attacker can disclose that memory. The issue is reachable when re-saving compressed TIFF images and through certain conversions that preserve EXIF metadata into compressed TIFF output. This vulnerability is fixed in version 13.0.0.
- Record
EUVD-2026-117793- CVSS 4.0
- 8.3 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:H/SC:N/SI:N/SA:N - Updated
- 2026-11-05
GitHub AdvisoriesGHSA-xvh5-g6gv-559v
8.8
Pillow: Memory disclosure and segfault in libtiff encoder via crafted TIFF tags
============================================================================
Memory disclosure and segfault in libtiff encoder via crafted TIFF tags
Location: src/encode.c:1014 in PyImaging_LibTiffEncoderNew()
Commit: a707c6b21c313880d0771e54965d142dd42358b6
============================================================================
A crafted TIFF file of a few hundred bytes makes Pillow copy an attacker-chosen amount of its own process memory into the TIFF it writes back out, or crash the process outright. The trigger is an ordinary Image.open() followed by a bare im.save(fp, "TIFF"). The only precondition is that the application re-saves images as TIFF. When the uploaded file is compressed, Pillow routes that save through libtiff automatically, with no options from the application. The attached reproducer does this with a 356-byte LZW TIFF: one crafted tag comes back holding 65536 bytes taken from _imaging.so's read-only data, and a second crafted tag makes the worker die with SIGSEGV on every run.
The bug is in PyImaging_LibTiffEncoderNew (src/encode.c). It decides what arguments to pass to the variadic TIFFSetField() from the shape of the Python value (scalar, tuple or bytes). It assumes its ImagingLibTiffMergeFieldInfo() call defined how libtiff will read them. But TIFFMergeFieldInfo() never overrides libtiff's built-in field table, so libtiff reads the arguments according to its own definition of the tag:
- For a counted array tag such as DNGPrivateData (50740), a count-1 integer in the source file is taken as the byte count. The data pointer is then read from an argument slot Pillow never wrote, and that many bytes are copied into the output.
- For a fixed-size array tag such as ActiveArea (50829), the integer itself is used as the source address.
Where that unwritten slot points depends on the compiler. In the tested clang build it points into _imaging.so, and a larger count returned thousands of pointers into libpython, libc and libtiff, which defeats address-space randomisation for anyone chaining another bug. When the application preserves metadata with tiffinfo=im.tag_v2, a 64-bit entry turns ActiveArea into a 16-byte read from an address the attacker chooses. All observed memory errors are reads; no out-of-bounds write was found.
Other branches of the same loop share the defect and are reachable from crafted TIFFs or from EXIF in JPEG/PNG/WebP re-saved as compressed TIFF. These are the bytes, RATIONAL-tuple and typed-tuple branches, and a BYTE-typed ColorMap. The file-reachable forwarding was introduced in a3d45e9cefd0 ("Added custom int and float TIFF tags") and first released in 5.4.0.
Details
PyImaging_LibTiffEncoderNew (src/encode.c:777-1060) chooses the argument
list it hands to the variadic TIFFSetField() from the Python value of each
tag — scalar vs. tuple vs. bytes, and a type that is either autodetected or
copied from the source file's IFD — and assumes that its own
ImagingLibTiffMergeFieldInfo() registration defines how libtiff will read the
va_list. It does not: libtiff keeps its built-in definition for every tag it
already knows, and core tags are never registered at all. libtiff therefore
consumes the varargs as (count, pointer), (pointer) or three pointers
according to its field table, whatever Pillow actually pushed. The encoder
never consults that table (TIFFFindField / TIFFFieldPassCount /
TIFFFieldWriteCount / TIFFFieldDataType) before the call.
The most severe instance, and the one the attached reproducer exercises: when a
TIFF is re-saved through the libtiff writer, every tag of the source IFD that
Pillow does not recognise is forwarded to libtiff with TIFFSetField(). A
count-1 integer entry is passed as a single scalar vararg. If libtiff's own
field table defines that tag number as an array field, libtiff consumes the
varargs as (count, pointer) or (pointer) instead, so the attacker's integer
becomes either…
- Record
GHSA-xvh5-g6gv-559v- CVSS 4.0
- 8.8 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-686
- Updated
- 2026-11-02
NVD
8.3
Pillow is a Python imaging library. In versions through 12.3.0, the libtiff TIFF encoder can pass arguments to TIFFSetField() that do not match libtiff’s definition of the corresponding tag. When an application saves attacker-controlled image metadata through this encoder, crafted tag values can cause invalid memory reads, copying process memory into the encoded output or crashing the process. Applications that return the encoded output to an attacker can disclose that memory. The issue is reachable when re-saving compressed TIFF images and through certain conversions that preserve EXIF metadata into compressed TIFF output. This vulnerability is fixed in version 13.0.0.
- Record
CVE-2026-112902- CVSS 4.0
- 8.3 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/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 - Weakness
- CWE-686
- Updated
- 2026-11-06
OSV
8.3
Pillow: Memory disclosure and segfault in libtiff encoder via crafted TIFF tags
Pillow is a Python imaging library. In versions through 12.3.0, the libtiff TIFF encoder can pass arguments to TIFFSetField() that do not match libtiff’s definition of the corresponding tag. When an application saves attacker-controlled image metadata through this encoder, crafted tag values can cause invalid memory reads, copying process memory into the encoded output or crashing the process. Applications that return the encoded output to an attacker can disclose that memory. The issue is reachable when re-saving compressed TIFF images and through certain conversions that preserve EXIF metadata into compressed TIFF output. This vulnerability is fixed in version 13.0.0.
- Record
CVE-2026-112902- CVSS 4.0
- 8.3 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-686
- Updated
- 2026-11-07
OSVDEBIAN-CVE-2026-112902
8.3
Pillow is a Python imaging library. In versions through 12.3.0, the libtiff TIFF encoder can pass arguments to TIFFSetField() that do not match libtiff’s definition of the corresponding tag. When an application saves attacker-controlled image metadata through this encoder, crafted tag values can cause invalid memory reads, copying process memory into the encoded output or crashing the process. Applications that return the encoded output to an attacker can disclose that memory. The issue is reachable when re-saving compressed TIFF images and through certain conversions that preserve EXIF metadata into compressed TIFF output. This vulnerability is fixed in version 13.0.0.
- Record
DEBIAN-CVE-2026-112902- CVSS 4.0
- 8.3 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/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 - Updated
- 2026-11-06
Show 9 moreShow less
OSVGHSA-xvh5-g6gv-559v
8.8
Pillow: Memory disclosure and segfault in libtiff encoder via crafted TIFF tags
============================================================================
Memory disclosure and segfault in libtiff encoder via crafted TIFF tags
Location: src/encode.c:1014 in PyImaging_LibTiffEncoderNew()
Commit: a707c6b21c313880d0771e54965d142dd42358b6
============================================================================
A crafted TIFF file of a few hundred bytes makes Pillow copy an attacker-chosen amount of its own process memory into the TIFF it writes back out, or crash the process outright. The trigger is an ordinary Image.open() followed by a bare im.save(fp, "TIFF"). The only precondition is that the application re-saves images as TIFF. When the uploaded file is compressed, Pillow routes that save through libtiff automatically, with no options from the application. The attached reproducer does this with a 356-byte LZW TIFF: one crafted tag comes back holding 65536 bytes taken from _imaging.so's read-only data, and a second crafted tag makes the worker die with SIGSEGV on every run.
The bug is in PyImaging_LibTiffEncoderNew (src/encode.c). It decides what arguments to pass to the variadic TIFFSetField() from the shape of the Python value (scalar, tuple or bytes). It assumes its ImagingLibTiffMergeFieldInfo() call defined how libtiff will read them. But TIFFMergeFieldInfo() never overrides libtiff's built-in field table, so libtiff reads the arguments according to its own definition of the tag:
- For a counted array tag such as DNGPrivateData (50740), a count-1 integer in the source file is taken as the byte count. The data pointer is then read from an argument slot Pillow never wrote, and that many bytes are copied into the output.
- For a fixed-size array tag such as ActiveArea (50829), the integer itself is used as the source address.
Where that unwritten slot points depends on the compiler. In the tested clang build it points into _imaging.so, and a larger count returned thousands of pointers into libpython, libc and libtiff, which defeats address-space randomisation for anyone chaining another bug. When the application preserves metadata with tiffinfo=im.tag_v2, a 64-bit entry turns ActiveArea into a 16-byte read from an address the attacker chooses. All observed memory errors are reads; no out-of-bounds write was found.
Other branches of the same loop share the defect and are reachable from crafted TIFFs or from EXIF in JPEG/PNG/WebP re-saved as compressed TIFF. These are the bytes, RATIONAL-tuple and typed-tuple branches, and a BYTE-typed ColorMap. The file-reachable forwarding was introduced in a3d45e9cefd0 ("Added custom int and float TIFF tags") and first released in 5.4.0.
Details
PyImaging_LibTiffEncoderNew (src/encode.c:777-1060) chooses the argument
list it hands to the variadic TIFFSetField() from the Python value of each
tag — scalar vs. tuple vs. bytes, and a type that is either autodetected or
copied from the source file's IFD — and assumes that its own
ImagingLibTiffMergeFieldInfo() registration defines how libtiff will read the
va_list. It does not: libtiff keeps its built-in definition for every tag it
already knows, and core tags are never registered at all. libtiff therefore
consumes the varargs as (count, pointer), (pointer) or three pointers
according to its field table, whatever Pillow actually pushed. The encoder
never consults that table (TIFFFindField / TIFFFieldPassCount /
TIFFFieldWriteCount / TIFFFieldDataType) before the call.
The most severe instance, and the one the attached reproducer exercises: when a
TIFF is re-saved through the libtiff writer, every tag of the source IFD that
Pillow does not recognise is forwarded to libtiff with TIFFSetField(). A
count-1 integer entry is passed as a single scalar vararg. If libtiff's own
field table defines that tag number as an array field, libtiff consumes the
varargs as (count, pointer) or (pointer) instead, so the attacker's integer
becomes either…
- Record
GHSA-xvh5-g6gv-559v- CVSS 4.0
- 8.8 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-686
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-112902
8.3
Pillow is a Python imaging library. In versions through 12.3.0, the libtiff TIFF encoder can pass arguments to TIFFSetField() that do not match libtiff’s definition of the corresponding tag. When an application saves attacker-controlled image metadata through this encoder, crafted tag values can cause invalid memory reads, copying process memory into the encoded output or crashing the process. Applications that return the encoded output to an attacker can disclose that memory. The issue is reachable when re-saving compressed TIFF images and through certain conversions that preserve EXIF metadata into compressed TIFF output. This vulnerability is fixed in version 13.0.0.
- Record
UBUNTU-CVE-2026-112902- CVSS 4.0
- 8.3 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:H/SC:N/SI:N/SA:N - Updated
- 2026-11-07
OSVCLSA-2026-1793017750 No score
TuxCare security update for pillow (9 CVEs)
TuxCare rebuilt pillow to address 9 CVEs. Fixed in 11.3.0.post11+tuxcare.
- Record
CLSA-2026-1793017750- Updated
- 2026-11-02
OSVCLSA-2026-1793085879 No score
TuxCare security update for pillow (9 CVEs)
TuxCare rebuilt pillow to address 9 CVEs. Fixed in 11.2.1.post13+tuxcare.
- Record
CLSA-2026-1793085879- Updated
- 2026-11-02
OSVCLSA-2026-1793101844 No score
TuxCare security update for pillow (1 CVE)
TuxCare rebuilt pillow to address 1 CVE. Fixed in 10.4.0.post16+tuxcare.
- Record
CLSA-2026-1793101844- Updated
- 2026-11-02
OSVCLSA-2026-1793346161 No score
TuxCare security update for pillow (7 CVEs)
TuxCare rebuilt pillow to address 7 CVEs. Fixed in 9.5.0.post13+tuxcare.
- Record
CLSA-2026-1793346161- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:12251-1 No score
python313-Pillow-13.0.0-2.1 on GA media
These are all security issues fixed in the python313-Pillow-13.0.0-2.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:12251-1- Updated
- 2026-11-02
OSVROOT-APP-PYPI-CVE-2026-112902 No score
CVE-2026-112902 in pillow - Patched by Root
Root has patched CVE-2026-112902 in the pillow package for Root:PyPI. Multiple fixed versions available.
- Record
ROOT-APP-PYPI-CVE-2026-112902- Updated
- 2026-11-06
OSVSUSE-SU-2026:5038-1 No score
Security update for python-Pillow
This update for python-Pillow fixes the following issues:
- CVE-2026-96636: decompression-bomb protection bypass via multi-frame
seek()in MPO and DCX (bsc#1286802). - CVE-2026-96637: decompression bomb check bypass in
SpiderImagePlugin.seek()leads to unbounded allocation DoS (bsc#1286801). - CVE-2026-96640: PDF append accepts malformed shared page-tree DAG, which can cause resource exhaustion (bsc#1286798).
- CVE-2026-96641: reachable undefined behavior in native integer operations can lead to denial of service or logic integrity compromise (bsc#1286797).
- CVE-2026-96642:
TarIOnegative size field causes infinite CPU-spin loop (bsc#1286796). - CVE-2026-112390: Denial of Service via infinite loop during crafted MIC image parsing (bsc#1286256).
- CVE-2026-112391: Denial of Service via unbounded recursion in PDF parser (bsc#1286273).
- CVE-2026-112392: Denial of Service via zero-size images in rank filters (bsc#1286287).
- CVE-2026-112393: heap buffer overflow and stale-heap disclosure in _tiffWriteProc when saving compressed TIFF data (bsc#1286325).
- CVE-2026-112394:
P;2LandP;4Ldecoders may read 1 to 3 bytes past the passed buffer size (bsc#1286311). - CVE-2026-112397: out-of-bounds access in
_imagingmorphon a zero-width image (bsc#1286314). - CVE-2026-112398: heap buffer overflow in FPX JPEG decoding can lead to code execution (bsc#1286406).
- CVE-2026-112399: Denial of service via crafted APNG image (bsc#1286368).
- CVE-2026-112400: Denial of Service via memory exhaustion from crafted GIF image (bsc#1286370).
- CVE-2026-112401: Denial of Service via crafted GIF comments (bsc#1286372).
- CVE-2026-112402: Denial of service via double free during image transformation (bsc#1286381).
- CVE-2026-112403: heap buffer overflow in
ImagingJpegDecodeallows for code execution (bsc#1286405). - CVE-2026-112405: NULL pointer dereference in
Image.mergevia an unvalidated band 0 (bsc#1286404). - CVE-2026-112406: infinite loop in
PdfParser.rewrite_pageson page treeParentcycle (bsc#1286403). - CVE-2026-112891: quadratic GIF comment copying during save (bsc#1286402).
- CVE-2026-112892: MSP RLE decoder expands a tiny file into unbounded memory (bsc#1286401).
- CVE-2026-112894: Denial of Service via crafted multi-frame image conversion (bsc#1286408).
- CVE-2026-112895: Denial of service via crafted PDF during append operations (bsc#1286411).
- CVE-2026-112896: TIFF encoder
ColorMapplane-size mismatch causes a heap out-of-bounds read (bsc#1286400). - CVE-2026-112897:
TiffDecodereturns uninitialized memory as pixels for short JPEG strips (bsc#1286398). - CVE-2026-112899: EPS
load(scale)lets Ghostscript render past the decompression bomb limit (bsc#1286489). - CVE-2026-112900: argument Injection in Ghostscript call can lead to remote code execution (bsc#1286397).
- CVE-2026-112901: ReDoS in
XbmImagePlugincan be triggered by 512-byte file (bsc#1286396). - CVE-2026-112902: memory disclosure and segfault in libtiff encoder via crafted TIFF tags (bsc#1286804).
- Record
SUSE-SU-2026:5038-1- Updated
- 2026-11-03
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
pillowPyPI |
through 12.3.0 | 13.0.0 |
pillowTuxCare:PyPI From an advisory covering 9 CVEs |
11.3.0 up to 11.3.0.post11+tuxcare, plus listed versions 11.3.0.post1+tuxcare11.3.0.post10+tuxcare11.3.0.post2+tuxcare11.3.0.post3+tuxcare11.3.0.post4+tuxcare Show 5 moreShow less11.3.0.post5+tuxcare11.3.0.post6+tuxcare11.3.0.post7+tuxcare11.3.0.post8+tuxcare11.3.0.post9+tuxcare |
11.3.0.post11+tuxcare |
pillowTuxCare:PyPI From an advisory covering 9 CVEs |
11.2.1 up to 11.2.1.post13+tuxcare, plus listed versions 11.2.1.post1+tuxcare11.2.1.post10+tuxcare11.2.1.post11+tuxcare11.2.1.post12+tuxcare11.2.1.post2+tuxcare Show 7 moreShow less11.2.1.post3+tuxcare11.2.1.post4+tuxcare11.2.1.post5+tuxcare11.2.1.post6+tuxcare11.2.1.post7+tuxcare11.2.1.post8+tuxcare11.2.1.post9+tuxcare |
11.2.1.post13+tuxcare |
pillowTuxCare:PyPI |
10.4.0 up to 10.4.0.post16+tuxcare, plus listed versions 10.4.0.post1+tuxcare10.4.0.post10+tuxcare10.4.0.post11+tuxcare10.4.0.post12+tuxcare10.4.0.post13+tuxcare Show 10 moreShow less10.4.0.post14+tuxcare10.4.0.post15+tuxcare10.4.0.post2+tuxcare10.4.0.post3+tuxcare10.4.0.post4+tuxcare10.4.0.post5+tuxcare10.4.0.post6+tuxcare10.4.0.post7+tuxcare10.4.0.post8+tuxcare10.4.0.post9+tuxcare |
10.4.0.post16+tuxcare |
pillowTuxCare:PyPI From an advisory covering 7 CVEs |
9.5.0 up to 9.5.0.post13+tuxcare, plus listed versions 9.5.0.post1+tuxcare9.5.0.post10+tuxcare9.5.0.post11+tuxcare9.5.0.post12+tuxcare9.5.0.post2+tuxcare Show 7 moreShow less9.5.0.post3+tuxcare9.5.0.post4+tuxcare9.5.0.post5+tuxcare9.5.0.post6+tuxcare9.5.0.post7+tuxcare9.5.0.post8+tuxcare9.5.0.post9+tuxcare |
9.5.0.post13+tuxcare |
pillowDebian:12 |
All versions, plus listed versions 10.0.0-110.1.0-110.2.0-110.3.0-110.3.0-2 Show 19 moreShow less10.4.0-110.4.0-1.111.1.0-111.1.0-211.1.0-311.1.0-411.1.0-511.2.1-111.3.0-112.0.0-112.1.0-112.1.1-112.1.1-212.2.0-112.3.0-113.0.0-19.4.0-1.19.4.0-1.1+deb12u19.5.0-1 |
None known |
pillowDebian:13 |
All versions, plus listed versions 11.1.0-511.1.0-5+deb13u111.1.0-5+deb13u211.1.0-5+deb13u311.1.0-5+deb13u4 Show 9 moreShow less11.2.1-111.3.0-112.0.0-112.1.0-112.1.1-112.1.1-212.2.0-112.3.0-113.0.0-1 |
None known |
pillowDebian:14 |
All versions, plus listed versions 11.1.0-511.2.1-111.3.0-112.0.0-112.1.0-1 Show 5 moreShow less12.1.1-112.1.1-212.2.0-112.3.0-113.0.0-1 |
None known |
pillowPyPI |
before 13.0.0, plus listed versions 1.01.11.21.31.4 Show 45 moreShow less1.51.61.7.01.7.11.7.21.7.31.7.41.7.51.7.61.7.71.7.810.0.010.0.110.1.010.2.010.3.010.4.011.0.011.1.011.2.111.3.012.0.012.1.012.1.112.2.012.3.02.0.02.1.02.2.02.2.12.2.22.3.02.3.12.3.22.4.02.5.02.5.12.5.22.5.32.6.02.6.12.6.22.7.02.8.02.8.1 |
13.0.0 |
pillowRoot:PyPI |
before 10.4.0+aikido.16 | 10.4.0+aikido.1612.3.0+aikido.310.3.0+aikido.1912.3.0+aikido.410.4.0+aikido.1710.3.0+aikido.209.2.0+aikido.111.0.0+aikido.1412.2.0+aikido.99.5.0+aikido.159.5.0+aikido.169.5.0+aikido.179.5.0+aikido.189.5.0+aikido.1910.4.0+aikido.18 |
Show 11 moreShow less
| Package | Affected | Fixed |
|---|---|---|
python-PillowSUSE:Linux Enterprise Module for Package Hub 15 SP7 From an advisory covering 29 CVEs |
before 7.2.0-150300.3.33.1 | 7.2.0-150300.3.33.1 |
pillowUbuntu:Pro:14.04:LTS |
All versions, plus listed versions 2.2.1-1ubuntu22.2.1-2ubuntu12.2.1-3ubuntu22.2.1-3ubuntu32.2.1-3ubuntu4 Show 12 moreShow less2.2.1-3ubuntu62.3.0-1ubuntu12.3.0-1ubuntu22.3.0-1ubuntu32.3.0-1ubuntu3.22.3.0-1ubuntu3.32.3.0-1ubuntu3.42.3.0-1ubuntu3.4+esm12.3.0-1ubuntu3.4+esm22.3.0-1ubuntu3.4+esm32.3.0-1ubuntu3.4+esm42.3.0-1ubuntu3.4+esm5 |
None known |
pillowUbuntu:Pro:16.04:LTS |
All versions, plus listed versions 2.9.0-13.0.0-13.0.0-1build13.1.0-13.1.1-1 Show 9 moreShow less3.1.2-0ubuntu13.1.2-0ubuntu1.13.1.2-0ubuntu1.33.1.2-0ubuntu1.43.1.2-0ubuntu1.53.1.2-0ubuntu1.63.1.2-0ubuntu1.6+esm13.1.2-0ubuntu1.6+esm23.1.2-0ubuntu1.6+esm3 |
None known |
pillowUbuntu:Pro:18.04:LTS |
All versions, plus listed versions 4.1.1-3build24.3.0-2ubuntu15.0.0-15.1.0-15.1.0-1ubuntu0.2 Show 8 moreShow less5.1.0-1ubuntu0.35.1.0-1ubuntu0.45.1.0-1ubuntu0.55.1.0-1ubuntu0.65.1.0-1ubuntu0.75.1.0-1ubuntu0.85.1.0-1ubuntu0.8+esm15.1.0-1ubuntu0.8+esm2 |
None known |
pillowUbuntu:Pro:20.04:LTS |
All versions, plus listed versions 6.1.0-16.1.0-1build16.2.1-27.0.0-47.0.0-4build1 Show 10 moreShow less7.0.0-4ubuntu0.17.0.0-4ubuntu0.27.0.0-4ubuntu0.37.0.0-4ubuntu0.47.0.0-4ubuntu0.57.0.0-4ubuntu0.67.0.0-4ubuntu0.77.0.0-4ubuntu0.87.0.0-4ubuntu0.97.0.0-4ubuntu0.9+esm1 |
None known |
pillow-python2Ubuntu:Pro:20.04:LTS |
All versions, plus listed versions 6.2.1-3~build16.2.1-36.2.1-3ubuntu0.1~esm16.2.1-3ubuntu0.1~esm2 |
None known |
pillowUbuntu:22.04:LTS |
All versions, plus listed versions 8.1.2+dfsg-0.39.0.0-19.0.1-19.0.1-1build19.0.1-1ubuntu0.1 Show 5 moreShow less9.0.1-1ubuntu0.29.0.1-1ubuntu0.39.0.1-1ubuntu0.49.0.1-1ubuntu0.59.0.1-1ubuntu0.6 |
None known |
pillowUbuntu:24.04:LTS |
All versions, plus listed versions 10.0.0-110.1.0-110.2.0-110.2.0-1build110.2.0-1ubuntu110.2.0-1ubuntu1.210.2.0-1ubuntu1.310.2.0-1ubuntu1.4 |
None known |
pillowUbuntu:26.10 |
All versions, plus listed versions 12.1.1-2ubuntu112.3.0-1ubuntu1 |
None known |
pillowUbuntu:26.04:LTS |
All versions, plus listed versions 11.3.0-1ubuntu111.3.0-1ubuntu212.0.0-1ubuntu112.1.1-1ubuntu112.1.1-2ubuntu1 Show 4 moreShow less12.1.1-2ubuntu1.112.1.1-2ubuntu1.212.1.1-2ubuntu1.312.1.1-2ubuntu1.4 |
None known |
python-PillowopenSUSE:Tumbleweed From an advisory covering 6 CVEs |
before 13.0.0-2.1 | 13.0.0-2.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, aliases, references | NVD, OSV | |
| affected, aliases, references | OSV | |
| affected | OSV | |
| references | OSV | |
| affected | NVD | |
| aliases | EUVD | |
| description, products, references, severity | CVE List | |
| affected | OSV | |
| affected, facts | OSV | |
| affected | OSV | |
| affected, aliases, references | OSV | |
| first indexed | GitHub Advisories, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-112902 is a high vulnerability (CVSS 8.3) in Python-pillow Pillow, published October 21, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.50%, the 42nd percentile. Fixed in pillow 13.0.0.
References
github.com/python-pillow/Pillow/security/advisories/GHSA-xvh5-g6gv-559v
github.com/python-pillow/Pillow/pull/10227
github.com/python-pillow/Pillow/commit/570df030c0d30c2bf5336b2ab59f3902d8ab0b6d
github.com/python-pillow/Pillow/releases/tag/13.0.0
github.com/python-pillow/Pillow/commit/af56ace297b0991d02988fcc2ea933e4824b4fb3
github.com/advisories/GHSA-xvh5-g6gv-559v
Show 67 moreShow less
github.com/CVEProject/cvelistV5/tree/main/cves/2026/112xxx/CVE-2026-112902.json
nvd.nist.gov/vuln/detail/CVE-2026-112902
security-tracker.debian.org/tracker/CVE-2026-112902
github.com/python-pillow/Pillow
suse.com/support/update/announcement/2026/suse-su-20265038-1
bugzilla.suse.com/1286256
bugzilla.suse.com/1286273
bugzilla.suse.com/1286287
bugzilla.suse.com/1286311
bugzilla.suse.com/1286314
bugzilla.suse.com/1286325
bugzilla.suse.com/1286368
bugzilla.suse.com/1286370
bugzilla.suse.com/1286372
bugzilla.suse.com/1286381
bugzilla.suse.com/1286396
bugzilla.suse.com/1286397
bugzilla.suse.com/1286398
bugzilla.suse.com/1286400
bugzilla.suse.com/1286401
bugzilla.suse.com/1286402
bugzilla.suse.com/1286403
bugzilla.suse.com/1286404
bugzilla.suse.com/1286405
bugzilla.suse.com/1286406
bugzilla.suse.com/1286408
bugzilla.suse.com/1286411
bugzilla.suse.com/1286489
bugzilla.suse.com/1286796
bugzilla.suse.com/1286797
bugzilla.suse.com/1286798
bugzilla.suse.com/1286801
bugzilla.suse.com/1286802
bugzilla.suse.com/1286804
suse.com/security/cve/CVE-2026-112390
suse.com/security/cve/CVE-2026-112391
suse.com/security/cve/CVE-2026-112392
suse.com/security/cve/CVE-2026-112393
suse.com/security/cve/CVE-2026-112394
suse.com/security/cve/CVE-2026-112397
suse.com/security/cve/CVE-2026-112398
suse.com/security/cve/CVE-2026-112399
suse.com/security/cve/CVE-2026-112400
suse.com/security/cve/CVE-2026-112401
suse.com/security/cve/CVE-2026-112402
suse.com/security/cve/CVE-2026-112403
suse.com/security/cve/CVE-2026-112405
suse.com/security/cve/CVE-2026-112406
suse.com/security/cve/CVE-2026-112891
suse.com/security/cve/CVE-2026-112892
suse.com/security/cve/CVE-2026-112894
suse.com/security/cve/CVE-2026-112895
suse.com/security/cve/CVE-2026-112896
suse.com/security/cve/CVE-2026-112897
suse.com/security/cve/CVE-2026-112899
suse.com/security/cve/CVE-2026-112900
suse.com/security/cve/CVE-2026-112901
suse.com/security/cve/CVE-2026-112902
suse.com/security/cve/CVE-2026-96636
suse.com/security/cve/CVE-2026-96637
suse.com/security/cve/CVE-2026-96640
suse.com/security/cve/CVE-2026-96641
suse.com/security/cve/CVE-2026-96642
ubuntu.com/security/CVE-2026-112902
cve.org/CVERecord?id=CVE-2026-112902
suse.com/security/cve/CVE-2026-96638
suse.com/security/cve/CVE-2026-96778
Left out here: 57 versions and the rest of 2 source descriptions. The JSON record has them.