Wysoka

Pillow: Dereferencja wskaźnika NULL w Image.merge z powodu niesprawdzonego pasma 0

  • Ujawniono: 21.10.2026
  • Aktualizacja: 22.10.2026 00:04

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:3795 iteruje po for 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-160
  • src/PIL/IptcImagePlugin.py:169 rejestruje procedurę otwierania bez funkcji accept.

PoC

python
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:

bash
$ 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.

PlatformaPaczkaPodatne wersjePoprawka w wersji
Python (PyPI) pillow >= 12.0.0, < 13.0.0 13.0.0

Odnośniki

Ocena CVSS -
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ć.

Wszystkie (89) w archiwum
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

  1. 2017: 1
  2. 2018: 0
  3. 2019: 1
  4. 2020: 10
  5. 2021: 20
  6. 2022: 8
  7. 2023: 3
  8. 2024: 2
  9. 2025: 1
  10. 2026: 31

wcześniej: 12

Istotność:
  1. Wysoka CVE-2026-112390 >= 7.2.0, < 13.0.0 13.0.0
  2. Pillow: Dereferencja wskaźnika NULL w Image.merge z powodu niesprawdzonego pasma 0 ten wpis
    Wysoka CVE-2026-112405 >= 12.0.0, < 13.0.0 13.0.0
  3. Krytyczna CVE-2026-112403 < 13.0.0 13.0.0
  4. Wysoka · 7.5 CVE-2026-59200 >= 5.1.0, < 12.3.0 12.3.0
  5. Wysoka CVE-2026-42311 >= 10.3.0, < 12.2.0 12.2.0
Pokaż więcej (20) Widać 20 z 69

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.

Podłącz swoją aplikację
Newsletter DockRay

Bezpieczeństwo aplikacji w Twojej skrzynce

Najważniejsze podatności, konkretne zalecenia i praktyczne wskazówki dla Twoich aplikacji. Wybierz technologie i śledź to, co ma znaczenie dla Twojego projektu.

  • Codzienne zestawienie nowych podatności, także krytycznych.
  • Powiadomienia o ważnych aktualizacjach.
  • Praktyczne porady o bezpieczeństwie i monitoringu aplikacji.

Pozostaw puste, aby otrzymywać informacje o wszystkich technologiach.

Zapis jest bezpłatny. Wypiszesz się jednym kliknięciem w wiadomości.