CVE-2026-112392
Pillow: NULL dereference in ImagingExpand via rank filters on zero-size images
Pillow is a Python imaging library. Prior to 13.0.0, Pillow's rank-based filters can dereference invalid image storage for a zero-size image. ImagingExpand() allocates a non-empty output and then faults while replicating edges by reading the first pixel from empty input storage; ImagingRankFilter is never reached. An attacker can supply or cause creation of a zero-size image to an application that applies a rank, median, minimum, or maximum filter. This causes a native process crash. This issue 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
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
8.2
Pillow: NULL dereference in ImagingExpand via rank filters on zero-size images
Pillow is a Python imaging library. Prior to 13.0.0, Pillow's rank-based filters can dereference invalid image storage for a zero-size image. ImagingExpand() allocates a non-empty output and then faults while replicating edges by reading the first pixel from empty input storage; ImagingRankFilter is never reached. An attacker can supply or cause creation of a zero-size image to an application that applies a rank, median, minimum, or maximum filter. This causes a native process crash. This issue is fixed in version 13.0.0.
- Record
CVE-2026-112392- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-476
- Updated
- 2026-11-02
EUVDEUVD-2026-104639
8.2
Pillow is a Python imaging library. Prior to 13.0.0, Pillow's rank-based filters can dereference invalid image storage for a zero-size image. ImagingExpand() allocates a non-empty output and then faults while replicating edges by reading the first pixel from empty input storage; ImagingRankFilter is never reached. An attacker can supply or cause creation of a zero-size image to an application that applies a rank, median, minimum, or maximum filter. This causes a native process crash. This issue is fixed in version 13.0.0.
- Record
EUVD-2026-104639- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-27h8-gf7j-v5hc
8.2
Pillow: NULL dereference in ImagingExpand via rank filters on zero-size images
============================================================================
NULL dereference in ImagingExpand via rank filters on zero-size images
Location: src/libImaging/Filter.c:79 in ImagingExpand()
Commit: a707c6b21c313880d0771e54965d142dd42358b6
============================================================================
Applying Pillow's median, minimum, maximum or rank filter to an image with zero width or zero height crashes the whole Python process instead of raising an error. Empty images like this are easy to produce with ordinary calls, for example a crop box whose left and right edges (or top and bottom edges) are equal, or the second page of a crafted multi-page image file. An attacker who can supply crop coordinates or an uploaded file to an application that runs one of these filters can kill its worker process. The effect is a crash only, with no memory disclosure or corruption.
The fault is in ImagingExpand() in src/libImaging/Filter.c. This is the edge-padding step that RankFilter.filter() always runs through the core expand() method, so MedianFilter, MinFilter and MaxFilter go through it too. It fills the margin by copying the input's edge pixels, reading imIn->image[y][0] and rows 0 / ysize-1, and never checks that the input has any pixels. For an empty image, ImagingAllocateArray leaves the line pointers NULL, so the first read dereferences NULL and the process dies with SIGSEGV, in every mode.
Zero-size images reach this point through public API alone:
Image.crop(),ImageOps.crop()andImage.new();- a multi-page TIFF opened by path whose second IFD declares
ImageLength = 0, on whichseek(1)andload()succeed.
Every other ImageFilter returns an empty image for the same inputs. The zero-height case has crashed since the original PIL import, and the zero-width case since Pillow 4.3.0. This is separate from the margin == 0 fix in #9755: the path is the same, but here the degenerate value is the image size rather than the kernel size. It has the same shape as the zero-dimension ImagingOffset crash fixed under GHSA-f87v-9578-p47w.
The attached reproducer shows a one-pixel-wide control crop filtering normally, while four empty crops passed through the rank filters are each killed by SIGSEGV. A patch that returns early in ImagingExpand for empty input is included.
Details
ImagingExpand() (src/libImaging/Filter.c), the edge-padding helper that ImageFilter.RankFilter runs before the actual rank filter, reads the first pixel of each input line without checking that the input has any pixels. For an image with width 0 or height 0 the line pointers are NULL, so Image.filter() with MedianFilter, MinFilter, MaxFilter or RankFilter kills the interpreter with SIGSEGV instead of returning or raising:
from PIL import Image, ImageFilter
im = Image.new("L", (10, 10)).crop((3, 0, 3, 10)) # size (0, 10); crop() accepts left == right
im.filter(ImageFilter.MedianFilter(3)) # SIGSEGV
Under gdb on the stock build the fault is at ImagingExpand (imIn=…, margin=1) at src/libImaging/Filter.c:105 (the EXPAND(UINT8, image8) expansion), called from _expand_image at src/_imaging.c:1151, with imIn->xsize = 0 and imIn->image[0] = 0x0. The same happens for every mode the rank filters accept (L, RGB, RGBA, I, F), and the core expand(m) method with m >= 1 crashes the same way in any mode, including P. The same input through BoxBlur, GaussianBlur, Kernel, ModeFilter and UnsharpMask returns a (0, 10) image; a (1, 10) crop through MedianFilter also returns normally.
The unchecked edge reads date from the PIL import (9a640e315, 2010, so every Pillow release): the zero-height case has crashed since then, and the zero-width case since fd907fbdc ("Fix 0-width and 0-height images other way", Pillow 4.3.0), which stopped backing zero-width images with a dummy block and left their row…
- Record
GHSA-27h8-gf7j-v5hc- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-476
- Updated
- 2026-11-02
NVD
8.2
Pillow is a Python imaging library. Prior to 13.0.0, Pillow's rank-based filters can dereference invalid image storage for a zero-size image. ImagingExpand() allocates a non-empty output and then faults while replicating edges by reading the first pixel from empty input storage; ImagingRankFilter is never reached. An attacker can supply or cause creation of a zero-size image to an application that applies a rank, median, minimum, or maximum filter. This causes a native process crash. This issue is fixed in version 13.0.0.
- Record
CVE-2026-112392- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/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 - CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-476
- Updated
- 2026-11-02
OSV
8.2
Pillow: NULL dereference in ImagingExpand via rank filters on zero-size images
Pillow is a Python imaging library. Prior to 13.0.0, Pillow's rank-based filters can dereference invalid image storage for a zero-size image. ImagingExpand() allocates a non-empty output and then faults while replicating edges by reading the first pixel from empty input storage; ImagingRankFilter is never reached. An attacker can supply or cause creation of a zero-size image to an application that applies a rank, median, minimum, or maximum filter. This causes a native process crash. This issue is fixed in version 13.0.0.
- Record
CVE-2026-112392- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-476
- Updated
- 2026-11-03
OSVDEBIAN-CVE-2026-112392
7.5
Pillow is a Python imaging library. Prior to 13.0.0, Pillow's rank-based filters can dereference invalid image storage for a zero-size image. ImagingExpand() allocates a non-empty output and then faults while replicating edges by reading the first pixel from empty input storage; ImagingRankFilter is never reached. An attacker can supply or cause creation of a zero-size image to an application that applies a rank, median, minimum, or maximum filter. This causes a native process crash. This issue is fixed in version 13.0.0.
- Record
DEBIAN-CVE-2026-112392- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
Show 15 moreShow less
OSVGHSA-27h8-gf7j-v5hc
8.2
Pillow: NULL dereference in ImagingExpand via rank filters on zero-size images
============================================================================
NULL dereference in ImagingExpand via rank filters on zero-size images
Location: src/libImaging/Filter.c:79 in ImagingExpand()
Commit: a707c6b21c313880d0771e54965d142dd42358b6
============================================================================
Applying Pillow's median, minimum, maximum or rank filter to an image with zero width or zero height crashes the whole Python process instead of raising an error. Empty images like this are easy to produce with ordinary calls, for example a crop box whose left and right edges (or top and bottom edges) are equal, or the second page of a crafted multi-page image file. An attacker who can supply crop coordinates or an uploaded file to an application that runs one of these filters can kill its worker process. The effect is a crash only, with no memory disclosure or corruption.
The fault is in ImagingExpand() in src/libImaging/Filter.c. This is the edge-padding step that RankFilter.filter() always runs through the core expand() method, so MedianFilter, MinFilter and MaxFilter go through it too. It fills the margin by copying the input's edge pixels, reading imIn->image[y][0] and rows 0 / ysize-1, and never checks that the input has any pixels. For an empty image, ImagingAllocateArray leaves the line pointers NULL, so the first read dereferences NULL and the process dies with SIGSEGV, in every mode.
Zero-size images reach this point through public API alone:
Image.crop(),ImageOps.crop()andImage.new();- a multi-page TIFF opened by path whose second IFD declares
ImageLength = 0, on whichseek(1)andload()succeed.
Every other ImageFilter returns an empty image for the same inputs. The zero-height case has crashed since the original PIL import, and the zero-width case since Pillow 4.3.0. This is separate from the margin == 0 fix in #9755: the path is the same, but here the degenerate value is the image size rather than the kernel size. It has the same shape as the zero-dimension ImagingOffset crash fixed under GHSA-f87v-9578-p47w.
The attached reproducer shows a one-pixel-wide control crop filtering normally, while four empty crops passed through the rank filters are each killed by SIGSEGV. A patch that returns early in ImagingExpand for empty input is included.
Details
ImagingExpand() (src/libImaging/Filter.c), the edge-padding helper that ImageFilter.RankFilter runs before the actual rank filter, reads the first pixel of each input line without checking that the input has any pixels. For an image with width 0 or height 0 the line pointers are NULL, so Image.filter() with MedianFilter, MinFilter, MaxFilter or RankFilter kills the interpreter with SIGSEGV instead of returning or raising:
from PIL import Image, ImageFilter
im = Image.new("L", (10, 10)).crop((3, 0, 3, 10)) # size (0, 10); crop() accepts left == right
im.filter(ImageFilter.MedianFilter(3)) # SIGSEGV
Under gdb on the stock build the fault is at ImagingExpand (imIn=…, margin=1) at src/libImaging/Filter.c:105 (the EXPAND(UINT8, image8) expansion), called from _expand_image at src/_imaging.c:1151, with imIn->xsize = 0 and imIn->image[0] = 0x0. The same happens for every mode the rank filters accept (L, RGB, RGBA, I, F), and the core expand(m) method with m >= 1 crashes the same way in any mode, including P. The same input through BoxBlur, GaussianBlur, Kernel, ModeFilter and UnsharpMask returns a (0, 10) image; a (1, 10) crop through MedianFilter also returns normally.
The unchecked edge reads date from the PIL import (9a640e315, 2010, so every Pillow release): the zero-height case has crashed since then, and the zero-width case since fd907fbdc ("Fix 0-width and 0-height images other way", Pillow 4.3.0), which stopped backing zero-width images with a dummy block and left their row…
- Record
GHSA-27h8-gf7j-v5hc- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-476
- Updated
- 2026-11-02
OSVPYSEC-2026-4326
7.5
Pillow is a Python imaging library. Prior to 13.0.0, Pillow's rank-based filters can dereference invalid image storage for a zero-size image. ImagingExpand() allocates a non-empty output and then faults while replicating edges by reading the first pixel from empty input storage; ImagingRankFilter is never reached. An attacker can supply or cause creation of a zero-size image to an application that applies a rank, median, minimum, or maximum filter. This causes a native process crash. This issue is fixed in version 13.0.0.
- Record
PYSEC-2026-4326- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVRLSA-2026:92639
7.5
Important: python-pillow security update
Python is an interpreted, interactive, object-oriented programming language, which includes modules, classes, exceptions, very high level dynamic data types and dynamic typing. Python supports interfaces to many system calls and libraries, as well as to various windowing systems.
Security Fix(es):
-
pillow: Pillow: Denial of Service via unbounded recursion in PDF parser (CVE-2026-112391)
-
pillow: pillow: Denial of service via double free during image transformation (CVE-2026-112402)
-
pillow: pillow: Denial of Service via zero-size images in rank filters (CVE-2026-112392)
-
pillow: pillow: Denial of Service via out-of-bounds memory access on zero-width images (CVE-2026-112397)
-
pillow: Pillow: Denial of Service via null pointer dereference in Image.merge() (CVE-2026-112405)
-
pillow: pillow: Denial of Service via crafted multi-frame image conversion (CVE-2026-112894)
-
pillow: pillow: Denial of service via crafted PDF during append operations (CVE-2026-112895)
-
pillow: pillow: Denial of Service via infinite loop during PDF page rewriting (CVE-2026-112406)
-
pillow: pillow: Denial of Service via duplicate page references in PDF files (CVE-2026-96640)
-
pillow: pillow: Denial of Service via unbounded memory expansion in MSP image decoder (CVE-2026-112892)
For more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.
- Record
RLSA-2026:92639- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-112392
8.2
Pillow is a Python imaging library. Prior to 13.0.0, Pillow's rank-based filters can dereference invalid image storage for a zero-size image. ImagingExpand() allocates a non-empty output and then faults while replicating edges by reading the first pixel from empty input storage; ImagingRankFilter is never reached. An attacker can supply or cause creation of a zero-size image to an application that applies a rank, median, minimum, or maximum filter. This causes a native process crash. This issue is fixed in version 13.0.0.
- Record
UBUNTU-CVE-2026-112392- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-04
OSVALSA-2026:92639 No score
Important: python-pillow security update
Python is an interpreted, interactive, object-oriented programming language, which includes modules, classes, exceptions, very high level dynamic data types and dynamic typing. Python supports interfaces to many system calls and libraries, as well as to various windowing systems.
Security Fix(es):
- pillow: Pillow: Denial of Service via unbounded recursion in PDF parser (CVE-2026-112391)
- pillow: pillow: Denial of service via double free during image transformation (CVE-2026-112402)
- pillow: pillow: Denial of Service via zero-size images in rank filters (CVE-2026-112392)
- pillow: pillow: Denial of Service via out-of-bounds memory access on zero-width images (CVE-2026-112397)
- pillow: Pillow: Denial of Service via null pointer dereference in Image.merge() (CVE-2026-112405)
- pillow: pillow: Denial of Service via crafted multi-frame image conversion (CVE-2026-112894)
- pillow: pillow: Denial of service via crafted PDF during append operations (CVE-2026-112895)
- pillow: pillow: Denial of Service via infinite loop during PDF page rewriting (CVE-2026-112406)
- pillow: pillow: Denial of Service via duplicate page references in PDF files (CVE-2026-96640)
- pillow: pillow: Denial of Service via unbounded memory expansion in MSP image decoder (CVE-2026-112892)
For more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.
- Record
ALSA-2026:92639- Updated
- 2026-11-02
OSVBIT-pillow-2026-112392 No score
Pillow: NULL dereference in ImagingExpand via rank filters on zero-size images
Pillow is a Python imaging library. Prior to 13.0.0, Pillow's rank-based filters can dereference invalid image storage for a zero-size image. ImagingExpand() allocates a non-empty output and then faults while replicating edges by reading the first pixel from empty input storage; ImagingRankFilter is never reached. An attacker can supply or cause creation of a zero-size image to an application that applies a rank, median, minimum, or maximum filter. This causes a native process crash. This issue is fixed in version 13.0.0.
- Record
BIT-pillow-2026-112392- Updated
- 2026-11-02
OSVCLSA-2026-1792652081 No score
TuxCare security update for pillow (10 CVEs)
TuxCare rebuilt pillow to address 10 CVEs. Fixed in 11.3.0.post8+tuxcare.
- Record
CLSA-2026-1792652081- Updated
- 2026-11-02
OSVCLSA-2026-1792741691 No score
TuxCare security update for pillow (10 CVEs)
TuxCare rebuilt pillow to address 10 CVEs. Fixed in 11.2.1.post10+tuxcare.
- Record
CLSA-2026-1792741691- Updated
- 2026-11-02
OSVCLSA-2026-1792753381 No score
TuxCare security update for pillow (10 CVEs)
TuxCare rebuilt pillow to address 10 CVEs. Fixed in 10.4.0.post12+tuxcare.
- Record
CLSA-2026-1792753381- Updated
- 2026-11-02
OSVCLSA-2026-1792756028 No score
TuxCare security update for pillow (9 CVEs)
TuxCare rebuilt pillow to address 9 CVEs. Fixed in 9.5.0.post10+tuxcare.
- Record
CLSA-2026-1792756028- Updated
- 2026-11-02
OSVCLSA-2026-1792815256 No score
TuxCare security update for pillow (9 CVEs)
TuxCare rebuilt pillow to address 9 CVEs. Fixed in 9.4.0.post11+tuxcare.
- Record
CLSA-2026-1792815256- Updated
- 2026-11-02
OSVCLSA-2026-1793015509 No score
TuxCare security update for pillow (9 CVEs)
TuxCare rebuilt pillow to address 9 CVEs. Fixed in 8.4.0.post11+tuxcare.
- Record
CLSA-2026-1793015509- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:12230-1 No score
python313-Pillow-13.0.0-1.1 on GA media
These are all security issues fixed in the python313-Pillow-13.0.0-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:12230-1- Updated
- 2026-11-02
OSVROOT-APP-PYPI-CVE-2026-112392 No score
CVE-2026-112392 in pillow - Patched by Root
Root has patched CVE-2026-112392 in the pillow package for Root:PyPI. Multiple fixed versions available.
- Record
ROOT-APP-PYPI-CVE-2026-112392- 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 |
python3-pillowAlmaLinux:8 From an advisory covering 10 CVEs |
before 5.1.1-33.el8_10 | 5.1.1-33.el8_10 |
python3-pillow-develAlmaLinux:8 From an advisory covering 10 CVEs |
before 5.1.1-33.el8_10 | 5.1.1-33.el8_10 |
python3-pillow-docAlmaLinux:8 From an advisory covering 10 CVEs |
before 5.1.1-33.el8_10 | 5.1.1-33.el8_10 |
python3-pillow-tkAlmaLinux:8 From an advisory covering 10 CVEs |
before 5.1.1-33.el8_10 | 5.1.1-33.el8_10 |
pillowBitnami |
before 13.0.0 | 13.0.0 |
pillowTuxCare:PyPI From an advisory covering 10 CVEs |
11.3.0 up to 11.3.0.post8+tuxcare, plus listed versions 11.3.0.post1+tuxcare11.3.0.post2+tuxcare11.3.0.post3+tuxcare11.3.0.post4+tuxcare11.3.0.post5+tuxcare11.3.0.post6+tuxcare11.3.0.post7+tuxcare |
11.3.0.post8+tuxcare |
pillowTuxCare:PyPI From an advisory covering 10 CVEs |
11.2.1 up to 11.2.1.post10+tuxcare, plus listed versions 11.2.1.post1+tuxcare11.2.1.post2+tuxcare11.2.1.post3+tuxcare11.2.1.post4+tuxcare11.2.1.post5+tuxcare Show 4 moreShow less11.2.1.post6+tuxcare11.2.1.post7+tuxcare11.2.1.post8+tuxcare11.2.1.post9+tuxcare |
11.2.1.post10+tuxcare |
pillowTuxCare:PyPI From an advisory covering 10 CVEs |
10.4.0 up to 10.4.0.post12+tuxcare, plus listed versions 10.4.0.post1+tuxcare10.4.0.post10+tuxcare10.4.0.post11+tuxcare10.4.0.post2+tuxcare10.4.0.post3+tuxcare Show 6 moreShow less10.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.post12+tuxcare |
pillowTuxCare:PyPI From an advisory covering 9 CVEs |
9.5.0 up to 9.5.0.post10+tuxcare, plus listed versions 9.5.0.post1+tuxcare9.5.0.post2+tuxcare9.5.0.post3+tuxcare9.5.0.post4+tuxcare9.5.0.post5+tuxcare Show 4 moreShow less9.5.0.post6+tuxcare9.5.0.post7+tuxcare9.5.0.post8+tuxcare9.5.0.post9+tuxcare |
9.5.0.post10+tuxcare |
Show 19 moreShow less
| Package | Affected | Fixed |
|---|---|---|
pillowTuxCare:PyPI From an advisory covering 9 CVEs |
9.4.0 up to 9.4.0.post11+tuxcare, plus listed versions 9.4.0.post1+tuxcare9.4.0.post10+tuxcare9.4.0.post2+tuxcare9.4.0.post3+tuxcare9.4.0.post4+tuxcare Show 5 moreShow less9.4.0.post5+tuxcare9.4.0.post6+tuxcare9.4.0.post7+tuxcare9.4.0.post8+tuxcare9.4.0.post9+tuxcare |
9.4.0.post11+tuxcare |
pillowTuxCare:PyPI From an advisory covering 9 CVEs |
8.4.0 up to 8.4.0.post11+tuxcare, plus listed versions 8.4.0.post1+tuxcare8.4.0.post10+tuxcare8.4.0.post2+tuxcare8.4.0.post3+tuxcare8.4.0.post4+tuxcare Show 5 moreShow less8.4.0.post5+tuxcare8.4.0.post6+tuxcare8.4.0.post7+tuxcare8.4.0.post8+tuxcare8.4.0.post9+tuxcare |
8.4.0.post11+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 |
python-pillowRocky Linux:8 From an advisory covering 10 CVEs |
before 0:5.1.1-33.el8_10 | 0:5.1.1-33.el8_10 |
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.0.0+aikido.19.0.0+aikido.211.0.0+aikido.1412.2.0+aikido.99.5.0+aikido.169.5.0+aikido.179.5.0+aikido.189.5.0+aikido.1910.4.0+aikido.18 |
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 14 CVEs |
before 13.0.0-1.1 | 13.0.0-1.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected | OSV | |
| affected | ||
| affected | OSV | |
| affected | OSV | |
| affected | OSV | |
| affected | OSV | |
| affected, facts | OSV | |
| affected, aliases, references | OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-112392 is a high vulnerability (CVSS 8.2) in Python Pillow, published October 19, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.59%, the 48th percentile. Fixed in pillow 13.0.0.
References
github.com/python-pillow/Pillow/security/advisories/GHSA-27h8-gf7j-v5hc
github.com/python-pillow/Pillow/commit/443e3130a8c11594fd0e296afad497e11e678961
github.com/python-pillow/Pillow/releases/tag/13.0.0
nvd.nist.gov/vuln/detail/CVE-2026-112392
github.com/advisories/GHSA-27h8-gf7j-v5hc
access.redhat.com/errata/RHSA-2026:92639
Show 99 moreShow less
access.redhat.com/security/cve/CVE-2026-112391
access.redhat.com/security/cve/CVE-2026-112392
access.redhat.com/security/cve/CVE-2026-112397
access.redhat.com/security/cve/CVE-2026-112402
access.redhat.com/security/cve/CVE-2026-112405
access.redhat.com/security/cve/CVE-2026-112406
access.redhat.com/security/cve/CVE-2026-112892
access.redhat.com/security/cve/CVE-2026-112894
access.redhat.com/security/cve/CVE-2026-112895
access.redhat.com/security/cve/CVE-2026-96640
bugzilla.redhat.com/2555851
bugzilla.redhat.com/2555859
bugzilla.redhat.com/2555866
bugzilla.redhat.com/2555868
bugzilla.redhat.com/2555873
bugzilla.redhat.com/2555875
bugzilla.redhat.com/2555879
bugzilla.redhat.com/2556322
bugzilla.redhat.com/2558576
bugzilla.redhat.com/2559393
errata.almalinux.org/8/ALSA-2026-92639.html
github.com/CVEProject/cvelistV5/tree/main/cves/2026/112xxx/CVE-2026-112392.json
security-tracker.debian.org/tracker/CVE-2026-112392
github.com/python-pillow/Pillow
errata.rockylinux.org/RLSA-2026:92639
bugzilla.redhat.com/show_bug.cgi?id=2555851
bugzilla.redhat.com/show_bug.cgi?id=2555859
bugzilla.redhat.com/show_bug.cgi?id=2555866
bugzilla.redhat.com/show_bug.cgi?id=2555868
bugzilla.redhat.com/show_bug.cgi?id=2555873
bugzilla.redhat.com/show_bug.cgi?id=2555875
bugzilla.redhat.com/show_bug.cgi?id=2555879
bugzilla.redhat.com/show_bug.cgi?id=2556322
bugzilla.redhat.com/show_bug.cgi?id=2558576
bugzilla.redhat.com/show_bug.cgi?id=2559393
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-112392
cve.org/CVERecord?id=CVE-2026-112392
suse.com/security/cve/CVE-2026-112396
suse.com/security/cve/CVE-2026-112404
suse.com/security/cve/CVE-2026-112898
Left out here: 57 versions and the rest of 2 source descriptions. The JSON record has them.