Pillow: Dostęp poza granicami bufora w _imagingmorph przy obrazie o zerowej szerokości
Podsumowanie
Plik PPM lub PGM może zadeklarować szerokość równą 0, co jest akceptowane przez bibliotekę Pillow i prowadzi do wygenerowania obrazu o rozmiarze (0, N). Przekazanie tego obrazu do ImageMorph.MorphOp.apply() powoduje, że natywny kod morfologii odwołuje się do bufora wiersza pod indeksem outrow[width - 1], który wynosi outrow[-1], gdy szerokość to 0. W rezultacie proces ulega awarii.
Szczegóły
Parser PPM odczytuje szerokość i wysokość bez sprawdzania dolnej granicy:
src/PIL/PpmImagePlugin.py:119
Natywna funkcja apply() zapisuje krawędzie wierszy bez zabezpieczenia weryfikującego, czy szerokość jest dodatnia:
src/_imagingmorph.c:81ustawiaoutrow[0] = outrow[width - 1] = 0;
match() oraz get_on_pixels() korzystają z tego samego wzorca indeksowania krawędzi.
PoC
from PIL import Image, ImageMorph
# A width-0 image (also producible from a crafted PPM header). apply() indexes
# outrow[width - 1] == outrow[-1] in native code.
im = Image.new("L", (0, 5))
ImageMorph.MorphOp(op_name="dilation4").apply(im)
Uruchomienie:
$ python 03_poc.py
Segmentation fault (core dumped)
Zaobserwowano na kompilacji ze źródeł commita 3e2ab96.
Pod AddressSanitizer:
==ERROR: AddressSanitizer: SEGV on unknown address (pc ... in apply)
#0 apply src/_imagingmorph.c:81
SUMMARY: AddressSanitizer: SEGV src/_imagingmorph.c:81 in apply
Przy szerokości 0 zapis pod adresem outrow[width - 1] trafia na niezmapowaną stronę pamięci, przez co objawia się jako błąd SEGV przypisany do linii zapisu krawędzi, a nie jako przepełnienie strefy ochronnej (redzone).
Wpływ
Zapis poza granicami bufora w rozszerzeniu C. Dotyczy każdej aplikacji wykonującej operacje morfologii na obrazach otwartych z niezaufanych źródeł. Skutkiem jest awaria procesu oraz możliwe uszkodzenie pamięci.
Co trzeba zrobić
Zaktualizuj pakiet 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 | < 13.0.0 | 13.0.0 |
Odnośniki
- https://github.com/python-pillow/Pillow/security/advisories/GHSA-58r4-6rv3-gfh8
- https://nvd.nist.gov/vuln/detail/CVE-2026-112397
- https://github.com/python-pillow/Pillow/commit/18f7c0dfee93063c51db6ed0ca8c4da2999dcb64
- 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-787- Platforma
- Python (PyPI)
- Paczka
pillow- Ujawniono
- 20.10.2026
- Aktualizacja
- 20.10.2026 23:29
Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.
OSV / GitHub Advisory Database - GHSA-58r4-6rv3-gfh8 - 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
- 81
- Pierwsza → ostatnia
- 04.2014 10.2026
- Bez poprawki
- 0
- Wykorzystywana w atakach
- 1
Rozkład istotności
- Krytyczna 10
- Wysoka 53
- Średnia 16
- 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: 23
wcześniej: 12
-
Pillow: Dostęp poza granicami bufora w _imagingmorph przy obrazie o zerowej szerokości 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.