CVE-2026-33416
WysokieCVSS 7.5Streszczenie
W bibliotece libpng w wersjach 1.2.1 do 1.6.55 funkcje `png_set_tRNS` i `png_set_PLTE` aliasują bufor alokowany na stercie między `png_struct` a `png_info`, współdzieląc jedną alokację między dwiema strukturami o niezależnych cyklach życia. Wywołanie `png_free_data` (z `PNG_FREE_TRNS` lub `PNG_FREE_PLTE`) zwalnia bufor przez `info_ptr`, podczas gdy odpowiedni wskaźnik `png_ptr` pozostaje wiszący, a kolejne funkcje transformacji wierszy dereferencjonują i w niektórych ścieżkach zapisują do zwolnionej pamięci. Drugie wywołanie `png_set_tRNS` lub `png_set_PLTE` ma ten sam efekt, ponieważ obie funkcje wewnętrznie wywołują `png_free_data` przed realokacją bufora `info_ptr`. Wersja 1.6.56 naprawia problem.
Ocena ryzyka
Podatność use-after-free może prowadzić do uszkodzenia pamięci, awarii aplikacji lub potencjalnie do wykonania dowolnego kodu w kontekście procesu przetwarzającego złośliwe obrazy PNG. Ryzyko dotyczy wszystkich aplikacji korzystających z libpng do przetwarzania niezaufanych obrazów.
Rekomendacja
Zaktualizuj libpng do wersji 1.6.56 lub nowszej. W aplikacjach przetwarzających niezaufane obrazy rozważ dodatkowe mechanizmy izolacji (sandboxing) do czasu wdrożenia aktualizacji.
Inne podatności w libpng
Zobacz wszystkie- CVE-2026-58936Nieznane
W funkcji png_set_tRNS pliku pngset.c występuje możliwe uszkodzenie pamięci spowodowane użyciem po zwolnieniu (use-after-free). Może to doprowadzić do zdalnego wykonania kodu bez potrzeby dodatkowych uprawnień wykonawczych.
- CVE-2026-33636Wysokie
W libpng w wersjach 1.6.36–1.6.55 ścieżka ekspansji palety zoptymalizowana dla ARM/AArch64 Neon zawiera błąd odczytu i zapisu poza granicami bufora. Przy przetwarzaniu końcowego fragmentu wiersza 8-bitowej palety następuje dereferencja wskaźników przed początkiem bufora i zapis poza zakresem, co jest osiągalne przy dekodowaniu złośliwego pliku PNG, gdy Neon jest włączony. Wersja 1.6.56 naprawia problem.
- CVE-2016-10087Wysokie
Funkcja png_set_text_2 w libpng przed wersją 1.0.67, 1.2.57, 1.4.20, 1.5.28 i 1.6.27 pozwala na ataki zależne od kontekstu, które mogą prowadzić do dereferencji wskaźnika NULL. Problem ten występuje podczas ładowania fragmentu tekstowego do struktury png, usuwania tekstu, a następnie dodawania innego fragmentu tekstowego.
- CVE-2016-3751Wysokie
Nieokreślona podatność w libpng przed wersją 1.6.20, używana w systemach Android 4.x przed 4.4.4, 5.0.x przed 5.0.2, 5.1.x przed 5.1.1 oraz 6.x przed 1 lipca 2016 roku, pozwala atakującym na uzyskanie uprawnień poprzez spreparowaną aplikację.
- CVE-2015-8540Wysokie
W funkcji png_check_keyword w pliku pngwutil.c w libpng występuje problem z niedoborem całkowitym, który może być wykorzystany przez zdalnych atakujących. Umożliwia to wywołanie odczytu poza dozwolonym zakresem poprzez użycie znaku spacji jako słowa kluczowego w obrazie PNG.
- CVE-2015-8472Wysokie
Przepełnienie bufora w funkcji png_set_PLTE w libpng przed wersją 1.0.65 oraz w wersjach 1.1.x, 1.2.x przed 1.2.55, 1.3.x, 1.4.x przed 1.4.18, 1.5.x przed 1.5.25 i 1.6.x przed 1.6.20 pozwala zdalnym atakującym na spowodowanie awarii aplikacji lub potencjalnie innych nieokreślonych skutków poprzez małą wartość głębokości bitowej w kawałku IHDR (nagłówek obrazu) w obrazie PNG.
- CVE-2015-0973Wysokie
Przepełnienie bufora w funkcji png_read_IDAT_data w pliku pngrutil.c w libpng przed wersją 1.5.21 oraz 1.6.x przed wersją 1.6.16 umożliwia atakującym, zależnie od kontekstu, wykonanie dowolnego kodu poprzez dane IDAT o dużej szerokości.
- CVE-2014-9495Wysokie
W funkcji png_combine_row w libpng przed wersją 1.5.21 oraz 1.6.x przed wersją 1.6.16 występuje przepełnienie bufora oparte na stercie, które może pozwolić atakującym na wykonanie dowolnego kodu poprzez 'bardzo szeroki przeplatany' obraz PNG na systemach 64-bitowych.
- CVE-2015-8126Wysokie
Wielokrotne przepełnienia bufora w funkcjach png_set_PLTE i png_get_PLTE w libpng przed wersją 1.0.64 oraz w wersjach 1.1.x, 1.2.x, 1.3.x, 1.4.x, 1.5.x i 1.6.x przed odpowiednimi wersjami, mogą pozwolić zdalnym atakującym na spowodowanie awarii aplikacji lub potencjalnie innych nieokreślonych skutków poprzez małą wartość głębi bitowej w kawałku IHDR (nagłówek obrazu) w obrazie PNG.
- CVE-2026-40930Średnie
LIBPNG w wersji 1.8.0 zawiera błąd w parserze APNG w trybie push: trzy ścieżki usuwania ramek międzyklatkowych nie konsumują treści ramki i CRC, co pozwala atakującemu na wstrzyknięcie bajtów w ignorowanej ramce pomocniczej, które są interpretowane jako nowy nagłówek ramki przy następnym wywołaniu png_process_data.
Oryginalny opis (angielski, źródło NVD)
LIBPNG is a reference library for use in applications that read, create, and manipulate PNG (Portable Network Graphics) raster image files. In versions 1.2.1 through 1.6.55, `png_set_tRNS` and `png_set_PLTE` each alias a heap-allocated buffer between `png_struct` and `png_info`, sharing a single allocation across two structs with independent lifetimes. The `trans_alpha` aliasing has been present since at least libpng 1.0, and the `palette` aliasing since at least 1.2.1. Both affect all prior release lines `png_set_tRNS` sets `png_ptr->trans_alpha = info_ptr->trans_alpha` (256-byte buffer) and `png_set_PLTE` sets `info_ptr->palette = png_ptr->palette` (768-byte buffer). In both cases, calling `png_free_data` (with `PNG_FREE_TRNS` or `PNG_FREE_PLTE`) frees the buffer through `info_ptr` while the corresponding `png_ptr` pointer remains dangling. Subsequent row-transform functions dereference and, in some code paths, write to the freed memory. A second call to `png_set_tRNS` or `png_set_PLTE` has the same effect, because both functions call `png_free_data` internally before reallocating the `info_ptr` buffer. Version 1.6.56 fixes the issue.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

