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
  6. Wysoka · 7.5 CVE-2026-40192 >= 10.3.0, < 12.2.0 12.2.0
  7. Wysoka CVE-2026-25990 >= 10.3.0, < 12.1.1 12.1.1
  8. Wysoka · 7.1 CVE-2025-48379 >= 11.2.0, < 11.3.0 11.3.0
  9. Wysoka · 6.7 CVE-2024-28219 < 10.3.0 10.3.0
  10. Krytyczna · 8.1 CVE-2023-50447 < 10.2.0 10.2.0
  11. Wysoka · 8.8 Wykorzystywana w atakach CVE-2023-4863 < 10.0.1 10.0.1
  12. Wysoka · 7.5 CVE-2022-45199 >= 9.2.0, < 9.3.0 9.3.0
  13. Wysoka · 7.5 CVE-2022-30595 >= 9.1.0, < 9.1.1 9.1.1
  14. Wysoka · 9.1 CVE-2022-24303 < 9.0.1 9.0.1
  15. Krytyczna · 9.8 CVE-2022-22817 < 9.0.1 9.0.1
  16. Wysoka · 7.5 CVE-2021-23437 >= 5.2.0, < 8.3.2 8.3.2
  17. Krytyczna · 9.8 CVE-2021-34552 < 8.3.0 8.3.0
  18. Wysoka · 7.5 CVE-2021-28677 < 8.2.0 8.2.0
  19. Wysoka · 7.5 CVE-2021-28676 < 8.2.0 8.2.0
  20. Wysoka · 9.1 CVE-2021-25288 >= 2.4.0, < 8.2.0 8.2.0
  21. Wysoka · 9.1 CVE-2021-25287 >= 2.4.0, < 8.2.0 8.2.0
  22. Wysoka · 5.5 CVE-2021-28675 < 8.2.0 8.2.0
  23. Wysoka · 7.5 CVE-2021-25293 >= 4.3.0, < 8.1.1 8.1.1
  24. Wysoka · 7.5 CVE-2021-25291 < 8.2.0 8.2.0
  25. Wysoka · 7.5 CVE-2021-25290 < 8.1.1 8.1.1
  26. Krytyczna · 9.8 CVE-2021-25289 < 8.1.1 8.1.1
  27. Wysoka · 7.5 CVE-2021-27923 < 8.1.2 8.1.2
  28. Wysoka · 7.5 CVE-2021-27922 < 8.1.2 8.1.2
  29. Wysoka · 7.5 CVE-2021-27921 < 8.1.2 8.1.2
  30. Wysoka · 8.8 CVE-2020-35654 < 8.1.0 8.1.0
  31. Wysoka · 7.1 CVE-2020-35653 < 8.1.0 8.1.0
  32. Krytyczna · 8.1 CVE-2020-11538 < 7.1.0 7.1.0
  33. Wysoka · 5.5 CVE-2020-10994 < 7.1.0 7.1.0
  34. Wysoka · 5.5 CVE-2020-10177 < 7.1.0 7.1.0
  35. Wysoka · 7.5 CVE-2019-19911 < 6.2.2 6.2.2
  36. Wysoka · 7.1 CVE-2020-5313 < 6.2.2 6.2.2
  37. Krytyczna · 9.8 CVE-2020-5312 < 6.2.2 6.2.2
  38. Krytyczna · 9.8 CVE-2020-5311 < 6.2.2 6.2.2
  39. Krytyczna · 8.8 CVE-2020-5310 < 6.2.2 6.2.2
  40. Wysoka · 7.5 CVE-2019-16865 < 6.2.0 6.2.0
  41. Wysoka · 6.5 CVE-2016-2533 < 3.1.1 3.1.1
  42. Krytyczna · 9.8 CVE-2016-4009 < 3.1.1 3.1.1
  43. Wysoka · 6.5 CVE-2016-0775 < 3.1.1 3.1.1

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.