Pillow: NULL-Zeiger-Dereferenzierung in Image.merge durch ein ungeprüftes Band 0
Zusammenfassung
Image.merge() prüft den Modus jedes Eingabebandes mit Ausnahme von Band 0. Wenn Band 0 ein Einzelband-I- oder -F-Bild ist, liest die native Merge-Routine einen Pixel-Zeiger, der für diese Modi NULL ist, was zum Absturz des Prozesses führt. Das IPTC-Plugin erreicht diesen Pfad über ein einfaches Image.open(), gefolgt von einem Ladevorgang. Da IPTC über keinen Magic-Byte-Vorfilter verfügt, kann eine manipulierte Datei ohne erkennbaren Header dies auslösen.
Details
Die Validierungsschleife überspringt Band 0:
src/PIL/Image.py:3795iteriert überfor band in bands[1:]und überprüft Modus sowie Größe ausschließlich für diese.
Für ein I- oder F-Bild ist die 8-Bit-Ebene image8 NULL (nur image32 ist gesetzt). ImagingMerge dereferenziert bands[0]->image8[y] für die Mehrband-Ausgabemodi:
src/libImaging/Bands.c:302,:311,:321
Der IPTC-Loader erstellt die Bandliste aus einem vom Angreifer definierten Teilbild und übergibt sie an merge mit dem Teilbild bei Index 0:
src/PIL/IptcImagePlugin.py:156-160src/PIL/IptcImagePlugin.py:169registriert den Opener ohne accept-Funktion.
PoC
from PIL import Image
# Band 0 is a single-band "I" image: its image8 plane is NULL. merge() validates only
# bands[1:], so the native ImagingMerge dereferences the NULL plane for band 0.
band0 = Image.new("I", (4, 4))
Image.merge("RGB", [band0, Image.new("L", (4, 4)), Image.new("L", (4, 4))])
Ausführung:
$ python 02_poc.py
Segmentation fault (core dumped)
Beobachtet bei einem Quell-Build des Commits 3e2ab96.
Unter AddressSanitizer:
==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000
#0 ImagingMerge src/libImaging/Bands.c:311
#1 _merge src/_imaging.c:2492
SUMMARY: AddressSanitizer: SEGV src/libImaging/Bands.c:311 in ImagingMerge
Die Null-Adresse bestätigt die Dereferenzierung der fehlenden image8-Ebene für Band 0.
Auswirkungen
NULL-Zeiger-Dereferenzierung in einer C-Erweiterung. Eine manipulierte Datei, die über den IPTC-Pfad geöffnet und geladen wird, bringt den Worker-Prozess zum Absturz. Hierbei handelt es sich um einen harten Absturz und nicht um eine Python-Exception, die von einer Anwendung abgefangen werden kann.
Was zu tun ist
Aktualisieren Sie Pillow auf Version 13.0.0 oder höher.
Betroffene Software
Klicken Sie auf eine Technologie, um alle zugehörigen Schwachstellen anzuzeigen.
| Plattform | Paket | Anfällige Versionen | Behoben in |
|---|---|---|---|
| Python (PyPI) | pillow | >= 12.0.0, < 13.0.0 | 13.0.0 |
Verweise
- https://github.com/python-pillow/Pillow/security/advisories/GHSA-cp9v-662q-vvx9
- https://nvd.nist.gov/vuln/detail/CVE-2026-112405
- https://github.com/python-pillow/Pillow/commit/b6ee66e8b2c2c0932bdf65f963268d9f2927ef86
- https://github.com/python-pillow/Pillow
- https://github.com/python-pillow/Pillow/releases/tag/13.0.0
- CVSS-Vektor
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N- Schwäche (CWE)
CWE-476- Plattform
- Python (PyPI)
- Paket
pillow- Veröffentlicht
- 21.10.2026
- Aktualisiert
- 22.10.2026 00:04
Quellen und Lizenzen · Von DockRay bearbeitet oder übersetzt; Rechte und Lizenzen der Quellen bleiben erhalten.
OSV / GitHub Advisory Database - GHSA-cp9v-662q-vvx9 - CC BY 4.0
Schwachstellenhistorie: pillow
Alle veröffentlichten Schwachstellen dieses Pakets (Python (PyPI)), neueste zuerst. Zeigt, ob es ein einmaliger Ausrutscher ist oder ein Paket, das man im Auge behalten muss.
- Einträge insgesamt
- 89
- Erste → letzte
- 04.2014 10.2026
- Ohne Fix
- 0
- In Angriffen ausgenutzt
- 1
Verteilung nach Schweregrad
- Kritisch 12
- Hoch 57
- Mittel 18
- Niedrig 1
- Nicht bewertet 1
Veröffentlichungen pro Jahr
- 2017: 1
- 2018: 0
- 2019: 1
- 2020: 10
- 2021: 20
- 2022: 8
- 2023: 3
- 2024: 2
- 2025: 1
- 2026: 31
früher: 12
-
Pillow: NULL-Zeiger-Dereferenzierung in Image.merge durch ein ungeprüftes Band 0 dieser Eintrag
Erkennen Sie Schwachstellen in Ihrer Anwendung
Mit der DockRay-Integration und aktivierter Softwareinventarisierung prüft DockRay gemeldete Komponentenversionen auf bekannte Schwachstellen und benachrichtigt Sie über bestätigte Treffer. Die Abdeckung hängt von der unterstützten Technologie und den verfügbaren Meldungen ab.