CVE-2026-54058
Pillow: Out-of-bounds read via attacker-controlled row stride on Pillow's mmap path (McIdas AREA files)
Pillow is a Python imaging library. Prior to 12.3.0, when Pillow loads an uncompressed McIdas AREA image from a filename through the mmap raw codec path, attacker-controlled header words can set a row stride smaller than the natural row width, causing pixel access such as Image.tobytes(), getpixel, convert, or save to read beyond the mapped region and disclose adjacent process memory or fault. This issue is fixed in version 12.3.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: Out-of-bounds read via attacker-controlled row stride on Pillow's mmap path (McIdas AREA files)
Pillow is a Python imaging library. Prior to 12.3.0, when Pillow loads an uncompressed McIdas AREA image from a filename through the mmap raw codec path, attacker-controlled header words can set a row stride smaller than the natural row width, causing pixel access such as Image.tobytes(), getpixel, convert, or save to read beyond the mapped region and disclose adjacent process memory or fault. This issue is fixed in version 12.3.0.
- Record
CVE-2026-54058- 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-125
- Updated
- 2026-11-02
EUVDEUVD-2026-43735
8.3
Pillow is a Python imaging library. Prior to 12.3.0, when Pillow loads an uncompressed McIdas AREA image from a filename through the mmap raw codec path, attacker-controlled header words can set a row stride smaller than the natural row width, causing pixel access such as Image.tobytes(), getpixel, convert, or save to read beyond the mapped region and disclose adjacent process memory or fault. This issue is fixed in version 12.3.0.
- Record
EUVD-2026-43735- 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-02
GitHub AdvisoriesGHSA-62p4-gmf7-7g93
8.3
Pillow: Out-of-bounds read via attacker-controlled row stride on Pillow's mmap path (McIdas AREA files)
Summary
When Pillow loads an uncompressed image whose tile uses the raw codec and a mode in Image._MAPMODES, and the image was opened from a filename, it memory-maps the file and builds the image's row pointers directly into the mapping via PyImaging_MapBuffer (src/map.c). The per-row spacing (stride) is taken from the tile arguments. map.c validates offset + ysize*stride <= buffer_len but never checks that stride is at least the natural row width xsize * pixelsize.
The McIdas AREA plugin (McIdasImagePlugin.py) derives stride, offset, xsize, and ysize directly from attacker-controlled 32-bit header words with no validation. By supplying a stride far smaller than the row width, an attacker makes each row pointer read xsize*pixelsize bytes that run past the mapped region. Accessing the pixels (e.g. Image.tobytes(),
getpixel, convert, save) then reads adjacent process memory (information disclosure) or faults (SIGBUS, denial of service).
Complete Code Trace
Step 1: McIdasImageFile._open - turns attacker header words into image size, file offset, and row stride with no validation.
# src/PIL/McIdasImagePlugin.py:41-70
s = self.fp.read(256)
if not _accept(s) or len(s) != 256: # _accept: prefix == b"\x00\x00\x00\x00\x00\x00\x00\x04"
raise SyntaxError(...)
self.area_descriptor = w = [0, *struct.unpack("!64i", s)] # w[1..64] = signed BE int32, ALL attacker-controlled
if w[11] == 1:
mode = rawmode = "L" # pixelsize 1, in _MAPMODES
elif w[11] == 2:
mode = rawmode = "I;16B" # pixelsize 2, in _MAPMODES
...
self._mode = mode
self._size = w[10], w[9] # (xsize, ysize) <-- attacker
offset = w[34] + w[15] # <-- attacker
stride = w[15] + w[10] * w[11] * w[14] # <-- attacker (set w[14]=0, w[15]=1 => stride=1)
self.tile = [
ImageFile._Tile("raw", (0, 0) + self.size, offset, (rawmode, stride, 1))
]
Step 2: ImageFile.load (mmap branch) - selects mmap and delegates to map_buffer.
# src/PIL/ImageFile.py:322-348
if use_mmap: # use_mmap = self.filename and len(self.tile) == 1
decoder_name, extents, offset, args = self.tile[0]
if (decoder_name == "raw" and isinstance(args, tuple) and len(args) >= 3
and args[0] == self.mode and args[0] in Image._MAPMODES):
if offset < 0: # only lower-bound guard on offset
raise ValueError("Tile offset cannot be negative")
with open(self.filename) as fp:
self.map = mmap.mmap(fp.fileno(), 0, access=mmap.ACCESS_READ)
if offset + self.size[1] * args[1] > self.map.size(): # == offset + ysize*stride; NO stride>=linesize check
raise OSError("buffer is not large enough")
self.im = Image.core.map_buffer(
self.map, self.size, decoder_name, offset, args # args = ("L", stride, 1)
)
Step 3: PyImaging_MapBuffer - builds row pointers at stride spacing into the mmap; validates everything except stride >= row width.
/* src/map.c:65-140 */
if (!PyArg_ParseTuple(args, "O(ii)sn(sii)",
&target, &xsize, &ysize, &codec, &offset, &mode_name, &stride, &ystep))
return NULL;
...
const ModeID mode = findModeID(mode_name); /* "L" */
if (stride <= 0) { /* attacker sets stride=1 (>0) -> NOT recomputed */
if (mode == IMAGING_MODE_L || mode == IMAGING_MODE_P) stride = xsize;
else if (isModeI16(mode)) stride = xsize * 2;
else stride = xsize * 4;
}
if (stride > 0 && ysize > PY_SSIZE_T_MAX / stride) {/* overflow guard only */
PyErr_SetString(PyExc_MemoryError, "Integer overflow in ysize"); return NULL;
}
size = (Py_ssize_t)ysize * stride; /* = 1*1 = 1 */
if (offset > PY_SSIZE_T_MAX - size) { ... }
...
if (offset + size > view.len) { /* 1 + 1 = 2 <= 256…
- Record
GHSA-62p4-gmf7-7g93- 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-125
- Updated
- 2026-11-02
NVD
8.3
Pillow is a Python imaging library. Prior to 12.3.0, when Pillow loads an uncompressed McIdas AREA image from a filename through the mmap raw codec path, attacker-controlled header words can set a row stride smaller than the natural row width, causing pixel access such as Image.tobytes(), getpixel, convert, or save to read beyond the mapped region and disclose adjacent process memory or fault. This issue is fixed in version 12.3.0.
- Record
CVE-2026-54058- 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 - CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H - Weakness
- CWE-125
- Updated
- 2026-11-02
OSV
8.3
Pillow: Out-of-bounds read via attacker-controlled row stride on Pillow's mmap path (McIdas AREA files)
Pillow is a Python imaging library. Prior to 12.3.0, when Pillow loads an uncompressed McIdas AREA image from a filename through the mmap raw codec path, attacker-controlled header words can set a row stride smaller than the natural row width, causing pixel access such as Image.tobytes(), getpixel, convert, or save to read beyond the mapped region and disclose adjacent process memory or fault. This issue is fixed in version 12.3.0.
- Record
CVE-2026-54058- 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-125
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-54058
9.1
Pillow is a Python imaging library. Prior to 12.3.0, when Pillow loads an uncompressed McIdas AREA image from a filename through the mmap raw codec path, attacker-controlled header words can set a row stride smaller than the natural row width, causing pixel access such as Image.tobytes(), getpixel, convert, or save to read beyond the mapped region and disclose adjacent process memory or fault. This issue is fixed in version 12.3.0.
- Record
DEBIAN-CVE-2026-54058- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H - Updated
- 2026-11-02
Show 32 moreShow less
OSVGHSA-62p4-gmf7-7g93
8.3
Pillow: Out-of-bounds read via attacker-controlled row stride on Pillow's mmap path (McIdas AREA files)
Summary
When Pillow loads an uncompressed image whose tile uses the raw codec and a mode in Image._MAPMODES, and the image was opened from a filename, it memory-maps the file and builds the image's row pointers directly into the mapping via PyImaging_MapBuffer (src/map.c). The per-row spacing (stride) is taken from the tile arguments. map.c validates offset + ysize*stride <= buffer_len but never checks that stride is at least the natural row width xsize * pixelsize.
The McIdas AREA plugin (McIdasImagePlugin.py) derives stride, offset, xsize, and ysize directly from attacker-controlled 32-bit header words with no validation. By supplying a stride far smaller than the row width, an attacker makes each row pointer read xsize*pixelsize bytes that run past the mapped region. Accessing the pixels (e.g. Image.tobytes(),
getpixel, convert, save) then reads adjacent process memory (information disclosure) or faults (SIGBUS, denial of service).
Complete Code Trace
Step 1: McIdasImageFile._open - turns attacker header words into image size, file offset, and row stride with no validation.
# src/PIL/McIdasImagePlugin.py:41-70
s = self.fp.read(256)
if not _accept(s) or len(s) != 256: # _accept: prefix == b"\x00\x00\x00\x00\x00\x00\x00\x04"
raise SyntaxError(...)
self.area_descriptor = w = [0, *struct.unpack("!64i", s)] # w[1..64] = signed BE int32, ALL attacker-controlled
if w[11] == 1:
mode = rawmode = "L" # pixelsize 1, in _MAPMODES
elif w[11] == 2:
mode = rawmode = "I;16B" # pixelsize 2, in _MAPMODES
...
self._mode = mode
self._size = w[10], w[9] # (xsize, ysize) <-- attacker
offset = w[34] + w[15] # <-- attacker
stride = w[15] + w[10] * w[11] * w[14] # <-- attacker (set w[14]=0, w[15]=1 => stride=1)
self.tile = [
ImageFile._Tile("raw", (0, 0) + self.size, offset, (rawmode, stride, 1))
]
Step 2: ImageFile.load (mmap branch) - selects mmap and delegates to map_buffer.
# src/PIL/ImageFile.py:322-348
if use_mmap: # use_mmap = self.filename and len(self.tile) == 1
decoder_name, extents, offset, args = self.tile[0]
if (decoder_name == "raw" and isinstance(args, tuple) and len(args) >= 3
and args[0] == self.mode and args[0] in Image._MAPMODES):
if offset < 0: # only lower-bound guard on offset
raise ValueError("Tile offset cannot be negative")
with open(self.filename) as fp:
self.map = mmap.mmap(fp.fileno(), 0, access=mmap.ACCESS_READ)
if offset + self.size[1] * args[1] > self.map.size(): # == offset + ysize*stride; NO stride>=linesize check
raise OSError("buffer is not large enough")
self.im = Image.core.map_buffer(
self.map, self.size, decoder_name, offset, args # args = ("L", stride, 1)
)
Step 3: PyImaging_MapBuffer - builds row pointers at stride spacing into the mmap; validates everything except stride >= row width.
/* src/map.c:65-140 */
if (!PyArg_ParseTuple(args, "O(ii)sn(sii)",
&target, &xsize, &ysize, &codec, &offset, &mode_name, &stride, &ystep))
return NULL;
...
const ModeID mode = findModeID(mode_name); /* "L" */
if (stride <= 0) { /* attacker sets stride=1 (>0) -> NOT recomputed */
if (mode == IMAGING_MODE_L || mode == IMAGING_MODE_P) stride = xsize;
else if (isModeI16(mode)) stride = xsize * 2;
else stride = xsize * 4;
}
if (stride > 0 && ysize > PY_SSIZE_T_MAX / stride) {/* overflow guard only */
PyErr_SetString(PyExc_MemoryError, "Integer overflow in ysize"); return NULL;
}
size = (Py_ssize_t)ysize * stride; /* = 1*1 = 1 */
if (offset > PY_SSIZE_T_MAX - size) { ... }
...
if (offset + size > view.len) { /* 1 + 1 = 2 <= 256…
- Record
GHSA-62p4-gmf7-7g93- 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-125
- Updated
- 2026-11-02
OSVOESA-2026-3185
8.3
python-pillow security update
Pillow is the friendly PIL fork by Alex Clark and Contributors. PIL is the Python Imaging \ Library by Fredrik Lundh and Contributors. As of 2019, Pillow development is supported by Tidelift. of CVE-2022-22815,CVE-2022-22816)
Security Fix(es):
Pillow is a Python imaging library. Prior to 12.3.0, when Pillow loads an uncompressed McIdas AREA image from a filename through the mmap raw codec path, attacker-controlled header words can set a row stride smaller than the natural row width, causing pixel access such as Image.tobytes(), getpixel, convert, or save to read beyond the mapped region and disclose adjacent process memory or fault. This issue is fixed in version 12.3.0.(CVE-2026-54058)
Pillow is a Python imaging library. Prior to 12.3.0, Pillow's public rank-filter API can trigger a native heap out-of-bounds write when given a very large odd filter size because ImageFilter.RankFilter.filter() calls image.expand(size // 2, size // 2) before rank-filter size validation and ImagingExpand() computes output dimensions with unchecked signed int arithmetic. This issue is fixed in version 12.3.0.(CVE-2026-59197)
Pillow is a Python imaging library. From 5.2.0 until 12.3.0, Pillow's TGA RLE encoder reads past its packed row buffer when saving a mode 1 image with TGA RLE compression, allowing adjacent process heap bytes to be copied into the generated TGA file. This issue is fixed in version 12.3.0.(CVE-2026-59198)
Pillow is a Python imaging library. Prior to 12.3.0, Pillow public image coordinate APIs can trigger a native heap out-of-bounds write when given coordinates near the signed 32-bit integer limits in Image.paste(), Image.crop(), or Image.alpha_composite(). This issue is fixed in version 12.3.0.(CVE-2026-59199)
Pillow is a Python imaging library. Prior to 12.3.0, Pillow's ImageCms.ImageCmsTransform.apply(im, imOut) API can trigger controlled native heap corruption when the caller supplies an output image whose mode does not match the transform's declared output mode. This issue is fixed in version 12.3.0.(CVE-2026-59205)
- Record
OESA-2026-3185- 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-02
OSVOESA-2026-3186
8.3
python-pillow security update
Pillow is the friendly PIL fork by Alex Clark and Contributors. PIL is the Python Imaging \ Library by Fredrik Lundh and Contributors. As of 2019, Pillow development is supported by Tidelift. of CVE-2022-22815,CVE-2022-22816)
Security Fix(es):
Pillow is a Python imaging library. Prior to 12.3.0, when Pillow loads an uncompressed McIdas AREA image from a filename through the mmap raw codec path, attacker-controlled header words can set a row stride smaller than the natural row width, causing pixel access such as Image.tobytes(), getpixel, convert, or save to read beyond the mapped region and disclose adjacent process memory or fault. This issue is fixed in version 12.3.0.(CVE-2026-54058)
Pillow is a Python imaging library. Prior to 12.3.0, Pillow's public rank-filter API can trigger a native heap out-of-bounds write when given a very large odd filter size because ImageFilter.RankFilter.filter() calls image.expand(size // 2, size // 2) before rank-filter size validation and ImagingExpand() computes output dimensions with unchecked signed int arithmetic. This issue is fixed in version 12.3.0.(CVE-2026-59197)
Pillow is a Python imaging library. Prior to 12.3.0, Pillow public image coordinate APIs can trigger a native heap out-of-bounds write when given coordinates near the signed 32-bit integer limits in Image.paste(), Image.crop(), or Image.alpha_composite(). This issue is fixed in version 12.3.0.(CVE-2026-59199)
Pillow is a Python imaging library. From 5.1.0 until 12.3.0, PdfParser.PdfStream.decode() in PIL/PdfParser.py calls zlib.decompress() with bufsize set to the PDF stream Length field without bounding the decompressed output size, allowing a crafted FlateDecode PDF stream to exhaust memory from a small file. This issue is fixed in version 12.3.0.(CVE-2026-59200)
Pillow is a Python imaging library. Prior to 12.3.0, Pillow's ImageCms.ImageCmsTransform.apply(im, imOut) API can trigger controlled native heap corruption when the caller supplies an output image whose mode does not match the transform's declared output mode. This issue is fixed in version 12.3.0.(CVE-2026-59205)
- Record
OESA-2026-3186- 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-02
OSVOESA-2026-3187
8.3
python-pillow security update
Pillow is the friendly PIL fork by Alex Clark and Contributors. PIL is the Python Imaging \ Library by Fredrik Lundh and Contributors. As of 2019, Pillow development is supported by Tidelift. of CVE-2022-22815,CVE-2022-22816)
Security Fix(es):
Pillow is a Python imaging library. Prior to 12.3.0, when Pillow loads an uncompressed McIdas AREA image from a filename through the mmap raw codec path, attacker-controlled header words can set a row stride smaller than the natural row width, causing pixel access such as Image.tobytes(), getpixel, convert, or save to read beyond the mapped region and disclose adjacent process memory or fault. This issue is fixed in version 12.3.0.(CVE-2026-54058)
Pillow is a Python imaging library. From 5.2.0 until 12.3.0, Pillow's TGA RLE encoder reads past its packed row buffer when saving a mode 1 image with TGA RLE compression, allowing adjacent process heap bytes to be copied into the generated TGA file. This issue is fixed in version 12.3.0.(CVE-2026-59198)
Pillow is a Python imaging library. Prior to 12.3.0, Pillow public image coordinate APIs can trigger a native heap out-of-bounds write when given coordinates near the signed 32-bit integer limits in Image.paste(), Image.crop(), or Image.alpha_composite(). This issue is fixed in version 12.3.0.(CVE-2026-59199)
Pillow is a Python imaging library. Prior to 12.3.0, Pillow's ImageCms.ImageCmsTransform.apply(im, imOut) API can trigger controlled native heap corruption when the caller supplies an output image whose mode does not match the transform's declared output mode. This issue is fixed in version 12.3.0.(CVE-2026-59205)
- Record
OESA-2026-3187- 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-02
OSVOESA-2026-3188
8.3
python-pillow security update
Pillow is the friendly PIL fork by Alex Clark and Contributors. PIL is the Python Imaging \ Library by Fredrik Lundh and Contributors. As of 2019, Pillow development is supported by Tidelift. of CVE-2022-22815,CVE-2022-22816)
Security Fix(es):
Pillow is a Python imaging library. Prior to 12.3.0, when Pillow loads an uncompressed McIdas AREA image from a filename through the mmap raw codec path, attacker-controlled header words can set a row stride smaller than the natural row width, causing pixel access such as Image.tobytes(), getpixel, convert, or save to read beyond the mapped region and disclose adjacent process memory or fault. This issue is fixed in version 12.3.0.(CVE-2026-54058)
Pillow is a Python imaging library. From 5.2.0 until 12.3.0, Pillow's TGA RLE encoder reads past its packed row buffer when saving a mode 1 image with TGA RLE compression, allowing adjacent process heap bytes to be copied into the generated TGA file. This issue is fixed in version 12.3.0.(CVE-2026-59198)
Pillow is a Python imaging library. Prior to 12.3.0, Pillow public image coordinate APIs can trigger a native heap out-of-bounds write when given coordinates near the signed 32-bit integer limits in Image.paste(), Image.crop(), or Image.alpha_composite(). This issue is fixed in version 12.3.0.(CVE-2026-59199)
Pillow is a Python imaging library. Prior to 12.3.0, Pillow's ImageCms.ImageCmsTransform.apply(im, imOut) API can trigger controlled native heap corruption when the caller supplies an output image whose mode does not match the transform's declared output mode. This issue is fixed in version 12.3.0.(CVE-2026-59205)
- Record
OESA-2026-3188- 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-02
OSVOESA-2026-3189
8.3
python-pillow security update
Pillow is the friendly PIL fork by Alex Clark and Contributors. PIL is the Python Imaging \ Library by Fredrik Lundh and Contributors. As of 2019, Pillow development is supported by Tidelift. of CVE-2022-22815,CVE-2022-22816)
Security Fix(es):
Pillow is a Python imaging library. Prior to 12.3.0, when Pillow loads an uncompressed McIdas AREA image from a filename through the mmap raw codec path, attacker-controlled header words can set a row stride smaller than the natural row width, causing pixel access such as Image.tobytes(), getpixel, convert, or save to read beyond the mapped region and disclose adjacent process memory or fault. This issue is fixed in version 12.3.0.(CVE-2026-54058)
Pillow is a Python imaging library. Prior to 12.3.0, Pillow's public rank-filter API can trigger a native heap out-of-bounds write when given a very large odd filter size because ImageFilter.RankFilter.filter() calls image.expand(size // 2, size // 2) before rank-filter size validation and ImagingExpand() computes output dimensions with unchecked signed int arithmetic. This issue is fixed in version 12.3.0.(CVE-2026-59197)
Pillow is a Python imaging library. From 5.2.0 until 12.3.0, Pillow's TGA RLE encoder reads past its packed row buffer when saving a mode 1 image with TGA RLE compression, allowing adjacent process heap bytes to be copied into the generated TGA file. This issue is fixed in version 12.3.0.(CVE-2026-59198)
Pillow is a Python imaging library. Prior to 12.3.0, Pillow public image coordinate APIs can trigger a native heap out-of-bounds write when given coordinates near the signed 32-bit integer limits in Image.paste(), Image.crop(), or Image.alpha_composite(). This issue is fixed in version 12.3.0.(CVE-2026-59199)
Pillow is a Python imaging library. Prior to 12.3.0, Pillow's ImageCms.ImageCmsTransform.apply(im, imOut) API can trigger controlled native heap corruption when the caller supplies an output image whose mode does not match the transform's declared output mode. This issue is fixed in version 12.3.0.(CVE-2026-59205)
- Record
OESA-2026-3189- 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-02
OSVPYSEC-2026-3493
8.3
Pillow: Out-of-bounds read via attacker-controlled row stride on Pillow's mmap path (McIdas AREA files)
Summary
When Pillow loads an uncompressed image whose tile uses the raw codec and a mode in Image._MAPMODES, and the image was opened from a filename, it memory-maps the file and builds the image's row pointers directly into the mapping via PyImaging_MapBuffer (src/map.c). The per-row spacing (stride) is taken from the tile arguments. map.c validates offset + ysize*stride <= buffer_len but never checks that stride is at least the natural row width xsize * pixelsize.
The McIdas AREA plugin (McIdasImagePlugin.py) derives stride, offset, xsize, and ysize directly from attacker-controlled 32-bit header words with no validation. By supplying a stride far smaller than the row width, an attacker makes each row pointer read xsize*pixelsize bytes that run past the mapped region. Accessing the pixels (e.g. Image.tobytes(),
getpixel, convert, save) then reads adjacent process memory (information disclosure) or faults (SIGBUS, denial of service).
Complete Code Trace
Step 1: McIdasImageFile._open - turns attacker header words into image size, file offset, and row stride with no validation.
# src/PIL/McIdasImagePlugin.py:41-70
s = self.fp.read(256)
if not _accept(s) or len(s) != 256: # _accept: prefix == b"\x00\x00\x00\x00\x00\x00\x00\x04"
raise SyntaxError(...)
self.area_descriptor = w = [0, *struct.unpack("!64i", s)] # w[1..64] = signed BE int32, ALL attacker-controlled
if w[11] == 1:
mode = rawmode = "L" # pixelsize 1, in _MAPMODES
elif w[11] == 2:
mode = rawmode = "I;16B" # pixelsize 2, in _MAPMODES
...
self._mode = mode
self._size = w[10], w[9] # (xsize, ysize) <-- attacker
offset = w[34] + w[15] # <-- attacker
stride = w[15] + w[10] * w[11] * w[14] # <-- attacker (set w[14]=0, w[15]=1 => stride=1)
self.tile = [
ImageFile._Tile("raw", (0, 0) + self.size, offset, (rawmode, stride, 1))
]
Step 2: ImageFile.load (mmap branch) - selects mmap and delegates to map_buffer.
# src/PIL/ImageFile.py:322-348
if use_mmap: # use_mmap = self.filename and len(self.tile) == 1
decoder_name, extents, offset, args = self.tile[0]
if (decoder_name == "raw" and isinstance(args, tuple) and len(args) >= 3
and args[0] == self.mode and args[0] in Image._MAPMODES):
if offset < 0: # only lower-bound guard on offset
raise ValueError("Tile offset cannot be negative")
with open(self.filename) as fp:
self.map = mmap.mmap(fp.fileno(), 0, access=mmap.ACCESS_READ)
if offset + self.size[1] * args[1] > self.map.size(): # == offset + ysize*stride; NO stride>=linesize check
raise OSError("buffer is not large enough")
self.im = Image.core.map_buffer(
self.map, self.size, decoder_name, offset, args # args = ("L", stride, 1)
)
Step 3: PyImaging_MapBuffer - builds row pointers at stride spacing into the mmap; validates everything except stride >= row width.
/* src/map.c:65-140 */
if (!PyArg_ParseTuple(args, "O(ii)sn(sii)",
&target, &xsize, &ysize, &codec, &offset, &mode_name, &stride, &ystep))
return NULL;
...
const ModeID mode = findModeID(mode_name); /* "L" */
if (stride <= 0) { /* attacker sets stride=1 (>0) -> NOT recomputed */
if (mode == IMAGING_MODE_L || mode == IMAGING_MODE_P) stride = xsize;
else if (isModeI16(mode)) stride = xsize * 2;
else stride = xsize * 4;
}
if (stride > 0 && ysize > PY_SSIZE_T_MAX / stride) {/* overflow guard only */
PyErr_SetString(PyExc_MemoryError, "Integer overflow in ysize"); return NULL;
}
size = (Py_ssize_t)ysize * stride; /* = 1*1 = 1 */
if (offset > PY_SSIZE_T_MAX - size) { ... }
...
if (offset + size > view.len) { /* 1 + 1 = 2 <= 256…
- Record
PYSEC-2026-3493- 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-02
OSVRHSA-2026:48021
9.1
Red Hat Security Advisory: python-pillow security update
- Record
RHSA-2026:48021- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H - Updated
- 2026-11-02
OSVRHSA-2026:52551
9.1
Red Hat Security Advisory: python-pillow security update
- Record
RHSA-2026:52551- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H - Updated
- 2026-11-02
OSVRHSA-2026:54417
9.1
Red Hat Security Advisory: python-pillow security update
- Record
RHSA-2026:54417- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H - Updated
- 2026-11-02
OSVRHSA-2026:54528
9.1
Red Hat Security Advisory: python-pillow security update
- Record
RHSA-2026:54528- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H - Updated
- 2026-11-02
OSVRLSA-2026:48021
9.1
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: Native heap out-of-bounds write (CVE-2026-59197)
-
Pillow: Pillow: Memory disclosure or denial of service via crafted McIdas AREA image (CVE-2026-54058)
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:48021- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H - Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-54058
8.3
Pillow is a Python imaging library. Prior to 12.3.0, when Pillow loads an uncompressed McIdas AREA image from a filename through the mmap raw codec path, attacker-controlled header words can set a row stride smaller than the natural row width, causing pixel access such as Image.tobytes(), getpixel, convert, or save to read beyond the mapped region and disclose adjacent process memory or fault. This issue is fixed in version 12.3.0.
- Record
UBUNTU-CVE-2026-54058- 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 - CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H - Updated
- 2026-11-05
OSVALSA-2026:48021 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: Native heap out-of-bounds write (CVE-2026-59197)
- Pillow: Pillow: Memory disclosure or denial of service via crafted McIdas AREA image (CVE-2026-54058)
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:48021- Updated
- 2026-11-02
OSVBIT-pillow-2026-54058 No score
Pillow: Out-of-bounds read via attacker-controlled row stride on Pillow's mmap path (McIdas AREA files)
Pillow is a Python imaging library. Prior to 12.3.0, when Pillow loads an uncompressed McIdas AREA image from a filename through the mmap raw codec path, attacker-controlled header words can set a row stride smaller than the natural row width, causing pixel access such as Image.tobytes(), getpixel, convert, or save to read beyond the mapped region and disclose adjacent process memory or fault. This issue is fixed in version 12.3.0.
- Record
BIT-pillow-2026-54058- Updated
- 2026-11-02
OSVCLSA-2026-1786515922 No score
TuxCare security update for pillow (9 CVEs)
TuxCare rebuilt pillow to address 9 CVEs. Fixed in 11.2.1.post4+tuxcare.
- Record
CLSA-2026-1786515922- Updated
- 2026-11-02
OSVCLSA-2026-1787220453 No score
TuxCare security update for pillow (2 CVEs)
TuxCare rebuilt pillow to address 2 CVEs. Fixed in 10.4.0.post5+tuxcare.
- Record
CLSA-2026-1787220453- Updated
- 2026-11-02
OSVCLSA-2026-1787298843 No score
TuxCare security update for pillow (5 CVEs)
TuxCare rebuilt pillow to address 5 CVEs. Fixed in 9.5.0.post3+tuxcare.
- Record
CLSA-2026-1787298843- Updated
- 2026-11-02
OSVCLSA-2026-1787306626 No score
TuxCare security update for pillow (4 CVEs)
TuxCare rebuilt pillow to address 4 CVEs. Fixed in 9.4.0.post5+tuxcare.
- Record
CLSA-2026-1787306626- Updated
- 2026-11-02
OSVCLSA-2026-1790674233 No score
TuxCare security update for pillow (14 CVEs)
TuxCare rebuilt pillow to address 14 CVEs. Fixed in 11.3.0.post5+tuxcare.
- Record
CLSA-2026-1790674233- Updated
- 2026-11-02
OSVCLSA-2026-1792160910 No score
TuxCare security update for pillow (3 CVEs)
TuxCare rebuilt pillow to address 3 CVEs. Fixed in 8.4.0.post2+tuxcare.
- Record
CLSA-2026-1792160910- Updated
- 2026-11-02
OSVCLSA-2026-1792164435 No score
Fix CVE(s): CVE-2026-54058, CVE-2026-59199
- SECURITY UPDATE: heap out-of-bounds write via paste box coordinates
near the signed 32-bit integer limits (ELSCVE-233283)
- debian/patches/CVE-2026-59199.patch: compute the paste box dimensions as int64_t in ImagingPaste() and ImagingFill2() in src/libImaging/Paste.c. Adds a regression test in Tests/test_image_paste.py.
- CVE-2026-59199
- SECURITY UPDATE: out-of-bounds read when memory-mapping McIdas AREA
images with an undersized row stride (ELSCVE-233312)
- debian/patches/CVE-2026-54058.patch: raise the row stride to at least one full row of pixels in PyImaging_MapBuffer() in src/map.c. Adds a regression test in Tests/test_file_mcidas.py.
- CVE-2026-54058
- Record
CLSA-2026-1792164435- Updated
- 2026-11-02
OSVMGASA-2026-0463 No score
Updated python-pillow packages fix security vulnerabilities
Prevent decompression bomb when parsing PDF WindowsViewer.get_command injection EPS image infinite loop JPEG2000 image memory usage McIdas out-of-bounds (OOB) read Out-of-bounds (OOB) read when saving 1 mode TGA images Out-of-bounds (OOB) write from large RankFilter sizes Out-of-bounds (OOB) write from Image.paste() Out-of-bounds (OOB) write in ImageCmsTransform Prevent FontFile decompression bomb Prevent GD decompression bomb
- Record
MGASA-2026-0463- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:11283-1 No score
python313-Pillow-12.3.0-2.1 on GA media
These are all security issues fixed in the python313-Pillow-12.3.0-2.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:11283-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:11839-1 No score
python313-graphifyy-0.9.65-1.1 on GA media
These are all security issues fixed in the python313-graphifyy-0.9.65-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:11839-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:21544-1 No score
Security update for python-Pillow
This update for python-Pillow fixes the following issues
- CVE-2026-54058: out-of-bounds read via attacker-controlled row stride on
mmappath (bsc#1271419). - CVE-2026-59197: heap out-of-bounds write in
ImageFilter.RankFiltervia integer overflow inImagingExpand(bsc#1271418). - CVE-2026-59198: out-of-bounds heap data copied into file generated by TGA RLE encoder (bsc#1271420).
- CVE-2026-59199: heap out-of-bounds write in
Image.paste()andImage.crop()via signed coordinate overflow (bsc#1271421). - CVE-2026-59200: decompression bomb DoS via
PdfParser.PdfStream.decode()(bsc#1271422). - CVE-2026-59204: denial of service through memory exhaustion via JPEG2000 tiled decoder (bsc#1271424).
- CVE-2026-59205: controlled heap out-of-bounds write in
ImageCmsTransform.apply()via output mode mismatch (bsc#1271425).
- Record
openSUSE-SU-2026:21544-1- Updated
- 2026-11-02
OSVROOT-APP-PYPI-CVE-2026-54058 No score
CVE-2026-54058 in pillow - Patched by Root
Root has patched CVE-2026-54058 in the pillow package for Root:PyPI. Multiple fixed versions available.
- Record
ROOT-APP-PYPI-CVE-2026-54058- Updated
- 2026-11-06
OSVSUSE-SU-2026:23217-1 No score
Security update for python-Pillow
This update for python-Pillow fixes the following issues
- CVE-2026-54058: out-of-bounds read via attacker-controlled row stride on
mmappath (bsc#1271419). - CVE-2026-59197: heap out-of-bounds write in
ImageFilter.RankFiltervia integer overflow inImagingExpand(bsc#1271418). - CVE-2026-59198: out-of-bounds heap data copied into file generated by TGA RLE encoder (bsc#1271420).
- CVE-2026-59199: heap out-of-bounds write in
Image.paste()andImage.crop()via signed coordinate overflow (bsc#1271421). - CVE-2026-59200: decompression bomb DoS via
PdfParser.PdfStream.decode()(bsc#1271422). - CVE-2026-59204: denial of service through memory exhaustion via JPEG2000 tiled decoder (bsc#1271424).
- CVE-2026-59205: controlled heap out-of-bounds write in
ImageCmsTransform.apply()via output mode mismatch (bsc#1271425).
- Record
SUSE-SU-2026:23217-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:23228-1 No score
Security update for python-Pillow
This update for python-Pillow fixes the following issues
- CVE-2026-54058: out-of-bounds read via attacker-controlled row stride on
mmappath (bsc#1271419). - CVE-2026-59197: heap out-of-bounds write in
ImageFilter.RankFiltervia integer overflow inImagingExpand(bsc#1271418). - CVE-2026-59198: out-of-bounds heap data copied into file generated by TGA RLE encoder (bsc#1271420).
- CVE-2026-59199: heap out-of-bounds write in
Image.paste()andImage.crop()via signed coordinate overflow (bsc#1271421). - CVE-2026-59200: decompression bomb DoS via
PdfParser.PdfStream.decode()(bsc#1271422). - CVE-2026-59204: denial of service through memory exhaustion via JPEG2000 tiled decoder (bsc#1271424).
- CVE-2026-59205: controlled heap out-of-bounds write in
ImageCmsTransform.apply()via output mode mismatch (bsc#1271425).
- Record
SUSE-SU-2026:23228-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:3084-1 No score
Security update for python-Pillow
This update for python-Pillow fixes the following issues
- CVE-2026-54058: out-of-bounds read via attacker-controlled row stride on
mmappath (bsc#1271419). - CVE-2026-59197: heap out-of-bounds write in
ImageFilter.RankFiltervia integer overflow inImagingExpand(bsc#1271418). - CVE-2026-59198: out-of-bounds heap data copied into file generated by TGA RLE encoder (bsc#1271420).
- CVE-2026-59199: heap out-of-bounds write in
Image.paste()andImage.crop()via signed coordinate overflow (bsc#1271421). - CVE-2026-59200: decompression bomb DoS via
PdfParser.PdfStream.decode()(bsc#1271422). - CVE-2026-59204: denial of service through memory exhaustion via JPEG2000 tiled decoder (bsc#1271424).
- CVE-2026-59205: controlled heap out-of-bounds write in
ImageCmsTransform.apply()via output mode mismatch
- Record
SUSE-SU-2026:3084-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:3268-1 No score
Security update for python-Pillow
This update for python-Pillow fixes the following issues:
- CVE-2026-54058: out-of-bounds read via attacker-controlled row stride on
mmappath (bsc#1271419). - CVE-2026-54059: bomb protection bypass via PCF font loading due to
Image.frombytes()being called without_decompression_bomb_check()(bsc#1270409). - CVE-2026-54060: excessive allocation due to
FontFile.compile():Image.new()being called without_decompression_bomb_check()(bsc#1270410). - CVE-2026-55379: bomb protection bypass via font loading due to
Image.new()being called without_decompression_bomb_check()(bsc#1270411). - CVE-2026-55380: unchecked 4.3 GB C-heap allocation due to image dimensions being accepted without
_decompression_bomb_check()inGdImageFile._open()(bsc#1270412). - CVE-2026-59197: heap out-of-bounds write in
ImageFilter.RankFiltervia integer overflow inImagingExpand(bsc#1271418). - CVE-2026-59198: out-of-bounds heap data copied into file generated by TGA RLE encoder (bsc#1271420).
- CVE-2026-59199: heap out-of-bounds write in
Image.paste()andImage.crop()via signed coordinate overflow (bsc#1271421). - CVE-2026-59200: decompression bomb DoS via
PdfParser.PdfStream.decode()(bsc#1271422). - CVE-2026-59204: denial of service through memory exhaustion via JPEG2000 tiled decoder (bsc#1271424).
- CVE-2026-59205: controlled heap out-of-bounds write in
ImageCmsTransform.apply()via output mode mismatch (bsc#1271425).
- Record
SUSE-SU-2026:3268-1- Updated
- 2026-11-02
OSVUSN-8999-1 No score
pillow vulnerabilities
It was discovered that Pillow incorrectly handled map stride values when loading certain McIdas AREA images. An attacker could possibly use this issue to obtain sensitive information or cause a denial of service. (CVE-2026-54058)
It was discovered that Pillow did not properly check for decompression bombs when processing font files. An attacker could possibly use this issue to cause Pillow to consume excessive memory, resulting in a denial of service. (CVE-2026-54059, CVE-2026-54060, CVE-2026-55379)
It was discovered that Pillow did not properly check for decompression bombs when loading GD image files. An attacker could possibly use this issue to cause Pillow to consume excessive memory, resulting in a denial of service. (CVE-2026-55380)
It was discovered that Pillow incorrectly validated filter sizes in the rank filter implementation. An attacker could possibly use this issue to cause Pillow to crash or execute arbitrary code. (CVE-2026-59197)
It was discovered that Pillow incorrectly handled image coordinate calculations. An attacker could possibly use this issue to cause Pillow to crash. (CVE-2026-59199)
It was discovered that Pillow did not properly limit the size of decompressed PDF stream data. An attacker could possibly use this issue to cause Pillow to consume excessive memory, resulting in a denial of service. (CVE-2026-59200)
It was discovered that Pillow incorrectly parsed EPS files containing a negative byte count in the BeginBinary directive. An attacker could possibly use this issue to cause Pillow to hang, resulting in a denial of service. This issue only affected Ubuntu 26.04 LTS. (CVE-2026-59203)
It was discovered that Pillow incorrectly accumulated JPEG2000 tile component widths. An attacker could possibly use this issue to cause Pillow to consume excessive memory, resulting in a denial of service. (CVE-2026-59204)
It was discovered that Pillow incorrectly validated image mode compatibility in color management transforms. An attacker could possibly use this issue to cause Pillow to crash or execute arbitrary code. (CVE-2026-59205)
- Record
USN-8999-1- Updated
- 2026-11-05
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
pillowPyPI |
before 12.3.0 | 12.3.0 |
python3-pillowAlmaLinux:8 From an advisory covering 2 CVEs |
before 5.1.1-23.el8_10 | 5.1.1-23.el8_10 |
python3-pillow-develAlmaLinux:8 From an advisory covering 2 CVEs |
before 5.1.1-23.el8_10 | 5.1.1-23.el8_10 |
python3-pillow-docAlmaLinux:8 From an advisory covering 2 CVEs |
before 5.1.1-23.el8_10 | 5.1.1-23.el8_10 |
python3-pillow-tkAlmaLinux:8 From an advisory covering 2 CVEs |
before 5.1.1-23.el8_10 | 5.1.1-23.el8_10 |
pillowBitnami |
before 12.3.0 | 12.3.0 |
pillowTuxCare:PyPI From an advisory covering 9 CVEs |
11.2.1 up to 11.2.1.post4+tuxcare, plus listed versions 11.2.1.post1+tuxcare11.2.1.post2+tuxcare11.2.1.post3+tuxcare |
11.2.1.post4+tuxcare |
pillowTuxCare:PyPI From an advisory covering 2 CVEs |
10.4.0 up to 10.4.0.post5+tuxcare, plus listed versions 10.4.0.post1+tuxcare10.4.0.post2+tuxcare10.4.0.post3+tuxcare10.4.0.post4+tuxcare |
10.4.0.post5+tuxcare |
pillowTuxCare:PyPI From an advisory covering 5 CVEs |
9.5.0 up to 9.5.0.post3+tuxcare, plus listed versions 9.5.0.post1+tuxcare9.5.0.post2+tuxcare |
9.5.0.post3+tuxcare |
pillowTuxCare:PyPI From an advisory covering 4 CVEs |
9.4.0 up to 9.4.0.post5+tuxcare, plus listed versions 9.4.0.post1+tuxcare9.4.0.post2+tuxcare9.4.0.post3+tuxcare9.4.0.post4+tuxcare |
9.4.0.post5+tuxcare |
Show 97 moreShow less
| Package | Affected | Fixed |
|---|---|---|
pillowTuxCare:PyPI From an advisory covering 14 CVEs |
11.3.0 up to 11.3.0.post5+tuxcare, plus listed versions 11.3.0.post1+tuxcare11.3.0.post2+tuxcare11.3.0.post3+tuxcare11.3.0.post4+tuxcare |
11.3.0.post5+tuxcare |
pillowTuxCare:PyPI From an advisory covering 3 CVEs |
8.4.0 up to 8.4.0.post2+tuxcare, plus listed versions 8.4.0.post1+tuxcare |
8.4.0.post2+tuxcare |
python-pilTuxCare:Ubuntu:18.04 From an advisory covering 2 CVEs |
before 5.1.0-1ubuntu0.8+tuxcare.els2 | 5.1.0-1ubuntu0.8+tuxcare.els2 |
python-pil-docTuxCare:Ubuntu:18.04 From an advisory covering 2 CVEs |
before 5.1.0-1ubuntu0.8+tuxcare.els2 | 5.1.0-1ubuntu0.8+tuxcare.els2 |
python-pil.imagetkTuxCare:Ubuntu:18.04 From an advisory covering 2 CVEs |
before 5.1.0-1ubuntu0.8+tuxcare.els2 | 5.1.0-1ubuntu0.8+tuxcare.els2 |
python3-pilTuxCare:Ubuntu:18.04 From an advisory covering 2 CVEs |
before 5.1.0-1ubuntu0.8+tuxcare.els2 | 5.1.0-1ubuntu0.8+tuxcare.els2 |
python3-pil.imagetkTuxCare:Ubuntu:18.04 From an advisory covering 2 CVEs |
before 5.1.0-1ubuntu0.8+tuxcare.els2 | 5.1.0-1ubuntu0.8+tuxcare.els2 |
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 |
before 12.3.0-1, plus listed versions 11.1.0-511.2.1-111.3.0-112.0.0-112.1.0-112.1.1-112.1.1-212.2.0-1 |
12.3.0-1 |
pillowPyPI |
before 12.3.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.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.12.8.2 |
12.3.0 |
python-pillowMageia:10 From an advisory covering 11 CVEs |
before 12.3.0-1.mga10 | 12.3.0-1.mga10 |
python-pillowopenEuler:24.03-LTS-SP3 From an advisory covering 5 CVEs |
before 10.3.0-13.oe2403sp3 | 10.3.0-13.oe2403sp3 |
python-pillowopenEuler:24.03-LTS-SP4 From an advisory covering 5 CVEs |
before 10.3.0-13.oe2403sp4 | 10.3.0-13.oe2403sp4 |
python-pillowopenEuler:20.03-LTS-SP4 From an advisory covering 4 CVEs |
before 9.0.1-16.oe2003sp4 | 9.0.1-16.oe2003sp4 |
python-pillowopenEuler:22.03-LTS-SP4 From an advisory covering 4 CVEs |
before 9.0.1-16.oe2203sp4 | 9.0.1-16.oe2203sp4 |
python-pillowopenEuler:24.03-LTS-SP1 From an advisory covering 5 CVEs |
before 10.3.0-13.oe2403sp1 | 10.3.0-13.oe2403sp1 |
python-pillowRed Hat:enterprise_linux:8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-23.el8_10 | 0:5.1.1-23.el8_10 |
python-pillow-debuginfoRed Hat:enterprise_linux:8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-23.el8_10 | 0:5.1.1-23.el8_10 |
python-pillow-debugsourceRed Hat:enterprise_linux:8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-23.el8_10 | 0:5.1.1-23.el8_10 |
python3-pillowRed Hat:enterprise_linux:8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-23.el8_10 | 0:5.1.1-23.el8_10 |
python3-pillow-debuginfoRed Hat:enterprise_linux:8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-23.el8_10 | 0:5.1.1-23.el8_10 |
python3-pillow-tk-debuginfoRed Hat:enterprise_linux:8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-23.el8_10 | 0:5.1.1-23.el8_10 |
python-pillow-debuginfoRed Hat:enterprise_linux:8::crb From an advisory covering 2 CVEs |
before 0:5.1.1-23.el8_10 | 0:5.1.1-23.el8_10 |
python-pillow-debugsourceRed Hat:enterprise_linux:8::crb From an advisory covering 2 CVEs |
before 0:5.1.1-23.el8_10 | 0:5.1.1-23.el8_10 |
python3-pillowRed Hat:enterprise_linux:8::crb From an advisory covering 2 CVEs |
before 0:5.1.1-23.el8_10 | 0:5.1.1-23.el8_10 |
python3-pillow-debuginfoRed Hat:enterprise_linux:8::crb From an advisory covering 2 CVEs |
before 0:5.1.1-23.el8_10 | 0:5.1.1-23.el8_10 |
python3-pillow-develRed Hat:enterprise_linux:8::crb From an advisory covering 2 CVEs |
before 0:5.1.1-23.el8_10 | 0:5.1.1-23.el8_10 |
python3-pillow-docRed Hat:enterprise_linux:8::crb From an advisory covering 2 CVEs |
before 0:5.1.1-23.el8_10 | 0:5.1.1-23.el8_10 |
python3-pillow-tkRed Hat:enterprise_linux:8::crb From an advisory covering 2 CVEs |
before 0:5.1.1-23.el8_10 | 0:5.1.1-23.el8_10 |
python3-pillow-tk-debuginfoRed Hat:enterprise_linux:8::crb From an advisory covering 2 CVEs |
before 0:5.1.1-23.el8_10 | 0:5.1.1-23.el8_10 |
python-pillowRed Hat:rhel_aus:8.4::appstream From an advisory covering 6 CVEs |
before 0:5.1.1-15.el8_4.2 | 0:5.1.1-15.el8_4.2 |
python-pillow-debuginfoRed Hat:rhel_aus:8.4::appstream From an advisory covering 6 CVEs |
before 0:5.1.1-15.el8_4.2 | 0:5.1.1-15.el8_4.2 |
python-pillow-debugsourceRed Hat:rhel_aus:8.4::appstream From an advisory covering 6 CVEs |
before 0:5.1.1-15.el8_4.2 | 0:5.1.1-15.el8_4.2 |
python3-pillowRed Hat:rhel_aus:8.4::appstream From an advisory covering 6 CVEs |
before 0:5.1.1-15.el8_4.2 | 0:5.1.1-15.el8_4.2 |
python3-pillow-debuginfoRed Hat:rhel_aus:8.4::appstream From an advisory covering 6 CVEs |
before 0:5.1.1-15.el8_4.2 | 0:5.1.1-15.el8_4.2 |
python3-pillow-tk-debuginfoRed Hat:rhel_aus:8.4::appstream From an advisory covering 6 CVEs |
before 0:5.1.1-15.el8_4.2 | 0:5.1.1-15.el8_4.2 |
python-pillowRed Hat:rhel_eus_long_life:8.4::appstream From an advisory covering 6 CVEs |
before 0:5.1.1-15.el8_4.2 | 0:5.1.1-15.el8_4.2 |
python-pillow-debuginfoRed Hat:rhel_eus_long_life:8.4::appstream From an advisory covering 6 CVEs |
before 0:5.1.1-15.el8_4.2 | 0:5.1.1-15.el8_4.2 |
python-pillow-debugsourceRed Hat:rhel_eus_long_life:8.4::appstream From an advisory covering 6 CVEs |
before 0:5.1.1-15.el8_4.2 | 0:5.1.1-15.el8_4.2 |
python3-pillowRed Hat:rhel_eus_long_life:8.4::appstream From an advisory covering 6 CVEs |
before 0:5.1.1-15.el8_4.2 | 0:5.1.1-15.el8_4.2 |
python3-pillow-debuginfoRed Hat:rhel_eus_long_life:8.4::appstream From an advisory covering 6 CVEs |
before 0:5.1.1-15.el8_4.2 | 0:5.1.1-15.el8_4.2 |
python3-pillow-tk-debuginfoRed Hat:rhel_eus_long_life:8.4::appstream From an advisory covering 6 CVEs |
before 0:5.1.1-15.el8_4.2 | 0:5.1.1-15.el8_4.2 |
python-pillowRed Hat:rhel_e4s:8.8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_8.1 | 0:5.1.1-20.el8_8.1 |
python-pillow-debuginfoRed Hat:rhel_e4s:8.8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_8.1 | 0:5.1.1-20.el8_8.1 |
python-pillow-debugsourceRed Hat:rhel_e4s:8.8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_8.1 | 0:5.1.1-20.el8_8.1 |
python3-pillowRed Hat:rhel_e4s:8.8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_8.1 | 0:5.1.1-20.el8_8.1 |
python3-pillow-debuginfoRed Hat:rhel_e4s:8.8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_8.1 | 0:5.1.1-20.el8_8.1 |
python3-pillow-tk-debuginfoRed Hat:rhel_e4s:8.8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_8.1 | 0:5.1.1-20.el8_8.1 |
python-pillowRed Hat:rhel_tus:8.8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_8.1 | 0:5.1.1-20.el8_8.1 |
python-pillow-debuginfoRed Hat:rhel_tus:8.8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_8.1 | 0:5.1.1-20.el8_8.1 |
python-pillow-debugsourceRed Hat:rhel_tus:8.8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_8.1 | 0:5.1.1-20.el8_8.1 |
python3-pillowRed Hat:rhel_tus:8.8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_8.1 | 0:5.1.1-20.el8_8.1 |
python3-pillow-debuginfoRed Hat:rhel_tus:8.8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_8.1 | 0:5.1.1-20.el8_8.1 |
python3-pillow-tk-debuginfoRed Hat:rhel_tus:8.8::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_8.1 | 0:5.1.1-20.el8_8.1 |
python-pillowRed Hat:rhel_aus:8.6::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_6.1 | 0:5.1.1-20.el8_6.1 |
python-pillow-debuginfoRed Hat:rhel_aus:8.6::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_6.1 | 0:5.1.1-20.el8_6.1 |
python-pillow-debugsourceRed Hat:rhel_aus:8.6::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_6.1 | 0:5.1.1-20.el8_6.1 |
python3-pillowRed Hat:rhel_aus:8.6::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_6.1 | 0:5.1.1-20.el8_6.1 |
python3-pillow-debuginfoRed Hat:rhel_aus:8.6::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_6.1 | 0:5.1.1-20.el8_6.1 |
python3-pillow-tk-debuginfoRed Hat:rhel_aus:8.6::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_6.1 | 0:5.1.1-20.el8_6.1 |
python-pillowRed Hat:rhel_eus_long_life:8.6::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_6.1 | 0:5.1.1-20.el8_6.1 |
python-pillow-debuginfoRed Hat:rhel_eus_long_life:8.6::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_6.1 | 0:5.1.1-20.el8_6.1 |
python-pillow-debugsourceRed Hat:rhel_eus_long_life:8.6::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_6.1 | 0:5.1.1-20.el8_6.1 |
python3-pillowRed Hat:rhel_eus_long_life:8.6::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_6.1 | 0:5.1.1-20.el8_6.1 |
python3-pillow-debuginfoRed Hat:rhel_eus_long_life:8.6::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_6.1 | 0:5.1.1-20.el8_6.1 |
python3-pillow-tk-debuginfoRed Hat:rhel_eus_long_life:8.6::appstream From an advisory covering 2 CVEs |
before 0:5.1.1-20.el8_6.1 | 0:5.1.1-20.el8_6.1 |
python-pillowRocky Linux:8 From an advisory covering 2 CVEs |
before 0:5.1.1-23.el8_10 | 0:5.1.1-23.el8_10 |
pillowRoot:PyPI |
before 9.3.0+aikido.9 | 9.3.0+aikido.911.1.0+aikido.812.1.0+aikido.912.1.0+aikido.109.3.0+aikido.109.3.0+aikido.1111.1.0+aikido.99.5.0+aikido.912.1.0+aikido.119.5.0+aikido.1011.1.0+aikido.1011.0.0+aikido.911.2.1+aikido.59.3.0+aikido.129.5.0+aikido.1112.2.0+aikido.59.3.0+aikido.1310.4.0+aikido.1112.1.0+aikido.1211.2.1+aikido.611.1.0+aikido.1110.3.0+aikido.1311.0.0+aikido.1011.2.1+aikido.79.3.0+aikido.1411.1.0+aikido.129.5.0+aikido.1212.2.0+aikido.610.4.0+aikido.129.3.0+aikido.1511.1.0+aikido.1312.1.0+aikido.1310.3.0+aikido.1411.0.0+aikido.119.3.0+aikido.1610.3.0+aikido.1510.4.0+aikido.139.3.0+aikido.179.5.0+aikido.1311.2.1+aikido.811.0.0+aikido.1211.1.0+aikido.1412.1.0+aikido.1412.2.0+aikido.710.3.0+aikido.1610.4.0+aikido.1411.1.0+aikido.1511.2.1+aikido.910.2.0+aikido.112.2.0+aikido.89.0.1+aikido.110.4.0+aikido.1512.1.0+aikido.159.0.1+aikido.210.3.0+aikido.178.0.1+aikido.111.0.0+aikido.139.5.0+aikido.148.1.2+aikido.18.0.1+aikido.210.4.0+aikido.1610.1.0+aikido.110.0.0+aikido.110.3.0+aikido.1810.2.0+aikido.210.3.0+aikido.1910.4.0+aikido.1710.3.0+aikido.208.2.0+aikido.19.4.0+aikido.19.0.0+aikido.211.0.0+aikido.147.0.0+aikido.27.0.0+aikido.312.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 |
python-PillowSUSE:Linux Enterprise Server 16.0 From an advisory covering 7 CVEs |
before 11.3.0-160000.8.1 | 11.3.0-160000.8.1 |
python-PillowSUSE:Linux Enterprise Server for SAP applications 16.0 From an advisory covering 7 CVEs |
before 11.3.0-160000.8.1 | 11.3.0-160000.8.1 |
python-PillowSUSE:Linux Enterprise Module for Package Hub 15 SP7 From an advisory covering 7 CVEs |
before 7.2.0-150300.3.30.1 | 7.2.0-150300.3.30.1 |
python-PillowSUSE:Linux Enterprise Module for Python 3 15 SP7 From an advisory covering 11 CVEs |
before 9.5.0-150400.5.25.1 | 9.5.0-150400.5.25.1 |
python-PillowSUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS From an advisory covering 11 CVEs |
before 9.5.0-150400.5.25.1 | 9.5.0-150400.5.25.1 |
python-PillowSUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS From an advisory covering 11 CVEs |
before 9.5.0-150400.5.25.1 | 9.5.0-150400.5.25.1 |
python-PillowSUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS From an advisory covering 11 CVEs |
before 9.5.0-150400.5.25.1 | 9.5.0-150400.5.25.1 |
python-PillowSUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS From an advisory covering 11 CVEs |
before 9.5.0-150400.5.25.1 | 9.5.0-150400.5.25.1 |
python-PillowSUSE:Linux Enterprise Server 15 SP4-LTSS From an advisory covering 11 CVEs |
before 9.5.0-150400.5.25.1 | 9.5.0-150400.5.25.1 |
python-PillowSUSE:Linux Enterprise Server 15 SP5-LTSS From an advisory covering 11 CVEs |
before 9.5.0-150400.5.25.1 | 9.5.0-150400.5.25.1 |
python-PillowSUSE:Linux Enterprise Server 15 SP6-LTSS From an advisory covering 11 CVEs |
before 9.5.0-150400.5.25.1 | 9.5.0-150400.5.25.1 |
python-PillowSUSE:Linux Enterprise Server for SAP Applications 15 SP4 From an advisory covering 11 CVEs |
before 9.5.0-150400.5.25.1 | 9.5.0-150400.5.25.1 |
python-PillowSUSE:Linux Enterprise Server for SAP Applications 15 SP5 From an advisory covering 11 CVEs |
before 9.5.0-150400.5.25.1 | 9.5.0-150400.5.25.1 |
python-PillowSUSE:Linux Enterprise Server for SAP Applications 15 SP6 From an advisory covering 11 CVEs |
before 9.5.0-150400.5.25.1 | 9.5.0-150400.5.25.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 |
before 9.0.1-1ubuntu0.6, plus listed versions 8.1.2+dfsg-0.39.0.0-19.0.1-19.0.1-1build19.0.1-1ubuntu0.1 Show 4 moreShow less9.0.1-1ubuntu0.29.0.1-1ubuntu0.39.0.1-1ubuntu0.49.0.1-1ubuntu0.5 |
9.0.1-1ubuntu0.6 |
pillowUbuntu:24.04:LTS |
before 10.2.0-1ubuntu1.4, 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.3 |
10.2.0-1ubuntu1.4 |
pillowUbuntu:26.04:LTS |
before 12.1.1-2ubuntu1.4, plus listed versions 11.3.0-1ubuntu111.3.0-1ubuntu212.0.0-1ubuntu112.1.1-1ubuntu112.1.1-2ubuntu112.1.1-2ubuntu1.112.1.1-2ubuntu1.212.1.1-2ubuntu1.3 |
12.1.1-2ubuntu1.4 |
pillowUbuntu:22.04:LTS From an advisory covering 11 CVEs |
before 9.0.1-1ubuntu0.6, plus listed versions 8.1.2+dfsg-0.39.0.0-19.0.1-19.0.1-1build19.0.1-1ubuntu0.1 Show 4 moreShow less9.0.1-1ubuntu0.29.0.1-1ubuntu0.39.0.1-1ubuntu0.49.0.1-1ubuntu0.5 |
9.0.1-1ubuntu0.6 |
pillowUbuntu:24.04:LTS From an advisory covering 11 CVEs |
before 10.2.0-1ubuntu1.4, 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.3 |
10.2.0-1ubuntu1.4 |
pillowUbuntu:26.04:LTS From an advisory covering 11 CVEs |
before 12.1.1-2ubuntu1.4, plus listed versions 11.3.0-1ubuntu111.3.0-1ubuntu212.0.0-1ubuntu112.1.1-1ubuntu112.1.1-2ubuntu112.1.1-2ubuntu1.112.1.1-2ubuntu1.212.1.1-2ubuntu1.3 |
12.1.1-2ubuntu1.4 |
python-PillowopenSUSE:Tumbleweed From an advisory covering 6 CVEs |
before 12.3.0-2.1 | 12.3.0-2.1 |
python-graphifyyopenSUSE:Tumbleweed |
before 0.9.65-1.1 | 0.9.65-1.1 |
python-PillowopenSUSE:Leap 16.0 From an advisory covering 7 CVEs |
before 11.3.0-160000.8.1 | 11.3.0-160000.8.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected | OSV | |
| affected | ||
| affected, aliases, references | OSV | |
| affected | OSV | |
| affected | OSV | |
| affected | OSV | |
| affected | OSV | |
| affected, facts | OSV | |
| affected | 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-54058 is a high vulnerability (CVSS 8.3) in Python Pillow, published July 14, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.52%, the 44th percentile. Fixed in pillow 12.3.0.
References
github.com/python-pillow/Pillow/security/advisories/GHSA-62p4-gmf7-7g93
github.com/python-pillow/Pillow/pull/9719
github.com/python-pillow/Pillow/commit/6a8de891fb00968e5ea79bfa84368ed90b3cfc1d
github.com/python-pillow/Pillow/releases/tag/12.3.0
nvd.nist.gov/vuln/detail/CVE-2026-54058
github.com/advisories/GHSA-62p4-gmf7-7g93
Show 100 moreShow less
access.redhat.com/errata/RHSA-2026:48021
access.redhat.com/security/cve/CVE-2026-54058
access.redhat.com/security/cve/CVE-2026-59197
bugzilla.redhat.com/2500043
bugzilla.redhat.com/2500057
errata.almalinux.org/8/ALSA-2026-48021.html
errata.tuxcare.com/els_os/ubuntu18.04els/CLSA-2026-1792164435.html
nvd.nist.gov/vuln/detail/CVE-2026-59199
github.com/CVEProject/cvelistV5/tree/main/cves/2026/54xxx/CVE-2026-54058.json
security-tracker.debian.org/tracker/CVE-2026-54058
github.com/python-pillow/Pillow
advisories.mageia.org/MGASA-2026-0463.html
bugs.mageia.org/show_bug.cgi?id=35909
github.com/python-pillow/Pillow/blob/main/docs/releasenotes/12.3.0.rst
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-3185
nvd.nist.gov/vuln/detail/CVE-2026-59197
nvd.nist.gov/vuln/detail/CVE-2026-59198
nvd.nist.gov/vuln/detail/CVE-2026-59205
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-3186
nvd.nist.gov/vuln/detail/CVE-2026-59200
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-3187
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-3188
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-3189
pypi.org/project/pillow
access.redhat.com/security/updates/classification
bugzilla.redhat.com/show_bug.cgi?id=2500043
bugzilla.redhat.com/show_bug.cgi?id=2500057
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_48021.json
cve.org/CVERecord?id=CVE-2026-54058
cve.org/CVERecord?id=CVE-2026-59197
github.com/python-pillow/Pillow/commit/cce3bdb867c77a3420261ed1bfdb6b0787ec8fc1
github.com/python-pillow/Pillow/pull/9695
github.com/python-pillow/Pillow/security/advisories/GHSA-xj96-63gp-2gmr
access.redhat.com/errata/RHSA-2026:52551
bugzilla.redhat.com/show_bug.cgi?id=2497452
bugzilla.redhat.com/show_bug.cgi?id=2497455
bugzilla.redhat.com/show_bug.cgi?id=2497464
bugzilla.redhat.com/show_bug.cgi?id=2497466
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_52551.json
access.redhat.com/security/cve/CVE-2026-54059
cve.org/CVERecord?id=CVE-2026-54059
nvd.nist.gov/vuln/detail/CVE-2026-54059
github.com/python-pillow/Pillow/commit/0a263e6264aa5399988d9acd3bbfbca2ca3ec77d
github.com/python-pillow/Pillow/security/advisories/GHSA-8v84-f9pq-wr9x
access.redhat.com/security/cve/CVE-2026-54060
cve.org/CVERecord?id=CVE-2026-54060
nvd.nist.gov/vuln/detail/CVE-2026-54060
github.com/python-pillow/Pillow/security/advisories/GHSA-5x94-69rx-g8h2
access.redhat.com/security/cve/CVE-2026-55379
cve.org/CVERecord?id=CVE-2026-55379
nvd.nist.gov/vuln/detail/CVE-2026-55379
github.com/python-pillow/Pillow/security/advisories/GHSA-45hq-cxwh-f6vc
access.redhat.com/security/cve/CVE-2026-55380
cve.org/CVERecord?id=CVE-2026-55380
nvd.nist.gov/vuln/detail/CVE-2026-55380
github.com/python-pillow/Pillow/commit/f39b0ae6624eb2d7c5c5d651d9bb5fdbd96a8675
github.com/python-pillow/Pillow/security/advisories/GHSA-phj9-mv4w-65pm
access.redhat.com/errata/RHSA-2026:54417
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_54417.json
access.redhat.com/errata/RHSA-2026:54528
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_54528.json
errata.rockylinux.org/RLSA-2026:48021
suse.com/support/update/announcement/2026/suse-su-202623217-1
bugzilla.suse.com/1271418
bugzilla.suse.com/1271419
bugzilla.suse.com/1271420
bugzilla.suse.com/1271421
bugzilla.suse.com/1271422
bugzilla.suse.com/1271424
bugzilla.suse.com/1271425
suse.com/security/cve/CVE-2026-54058
suse.com/security/cve/CVE-2026-59197
suse.com/security/cve/CVE-2026-59198
suse.com/security/cve/CVE-2026-59199
suse.com/security/cve/CVE-2026-59200
suse.com/security/cve/CVE-2026-59204
suse.com/security/cve/CVE-2026-59205
suse.com/support/update/announcement/2026/suse-su-202623228-1
suse.com/support/update/announcement/2026/suse-su-20263084-1
suse.com/support/update/announcement/2026/suse-su-20263268-1
bugzilla.suse.com/1270409
bugzilla.suse.com/1270410
bugzilla.suse.com/1270411
bugzilla.suse.com/1270412
suse.com/security/cve/CVE-2026-54059
suse.com/security/cve/CVE-2026-54060
suse.com/security/cve/CVE-2026-55379
suse.com/security/cve/CVE-2026-55380
ubuntu.com/security/CVE-2026-54058
ubuntu.com/security/notices/USN-8999-1
ubuntu.com/security/CVE-2026-54059
ubuntu.com/security/CVE-2026-54060
ubuntu.com/security/CVE-2026-55379
ubuntu.com/security/CVE-2026-55380
ubuntu.com/security/CVE-2026-59197
ubuntu.com/security/CVE-2026-59199
ubuntu.com/security/CVE-2026-59200
ubuntu.com/security/CVE-2026-59203
ubuntu.com/security/CVE-2026-59204
ubuntu.com/security/CVE-2026-59205
Left out here: 56 versions and the rest of 3 source descriptions. The JSON record has them.