CVE-2026-91186
WysokieCVSS 8.4Streszczenie
Czytnik chunków PNG w GUIX nie egzekwuje kolejności chunków i pozwala na ponowne odczytanie IHDR po IDAT. Drugi IHDR nadpisuje wymiary i głębię bitową po alokacji bufora danych, a etap odwracania filtrów wierszy operuje na nowych wymiarach, wychodząc poza starą alokację i powodując zapis poza buforem sterty.
Ocena ryzyka
Spreparowany plik PNG może wywołać przepełnienie sterty w aplikacji korzystającej z dekodera GUIX, potencjalnie umożliwiając wykonanie kodu lub awarię.
Rekomendacja
Zaktualizuj GUIX do wersji z poprawką walidacji kolejności chunków PNG. Do czasu aktualizacji unikaj dekodowania niezaufanych obrazów PNG.
Inne podatności w GUIX
Zobacz wszystkie- CVE-2026-91057Średnie
Funkcja _gx_multi_line_text_view_display_info_get() odczytuje jeden bajt poza końcem bufora tekstu aplikacji, gdy podany ciąg kończy się znakiem powrotu karetki (\r). Nadmiarowy odczyt może też spowodować przesunięcie indeksu wywołującego poza koniec ciągu, co prowadzi do drugiego nadmiarowego odczytu w _gx_multi_line_text_view_string_total_rows_compute() i wiersza tekstu, którego nie ma w źródle.
- CVE-2026-92454Średnie
Dekoder JPEG GUIX odczytuje cztery rodzaje segmentów znaczników bez sprawdzenia, czy każdy z nich jest wystarczająco długi. Obcięty segment powoduje odczyt poza bufor obrazu wywołującego, a zerowy współczynnik próbkowania chrominancji powoduje nieskończoną pętlę dekodowania bloków.
- CVE-2026-92449Średnie
Funkcja _gx_binres_pixelmap_table_load() w loaderze zasobów binarnych GUIX indeksuje tablicę pixelmap wartością odczytaną wprost z pliku zasobu, bez sprawdzenia granic. Spreparowany motyw powoduje zapis do około 256 KB poza koniec tablicy, uszkadzając własny obszar pamięci GUIX.
- CVE-2026-92446Średnie
Funkcje gx_binres_theme_load() i gx_binres_font_load() przyjmują zasób jako wskaźnik GX_UBYTE * bez długości, a struktura GX_BINRES_DATA_INFO nie ma pola na rozmiar. Zasób deklarujący więcej danych niż zawiera jest odczytywany poza swój koniec, a przesunięcie z pliku jest zamieniane na wskaźnik bez sprawdzenia granic.
- CVE-2026-91189Wysokie
Loader zasobów binarnych GUIX nie sprawdza poprawności zakresu glifów strony czcionki. Strona deklarująca first_glyph > last_glyph powoduje niedomiar licznika, a niekontrolowane mnożenie prowadzi do alokacji zbyt małego bufora, do którego zapisywane są kontrolowane przez atakującego rekordy glifów — co skutkuje przepełnieniem sterty.
- CVE-2026-91059Średnie
Dekoder JPEG GUIX nie wymusza kolejności znaczników JPEG. Plik umieszczający drugi nagłówek ramki SOF0 po SOS powoduje ponowne uruchomienie parsera nagłówka po przydzieleniu bufora wyjściowego, a dekoder zwraca GX_SUCCESS i publikuje GX_PIXELMAP o wymiarach i data_size przekraczających alokację.
- CVE-2026-102729Średnie
Funkcja `gx_binres_theme_load()` określa rozmiar bufora motywu na podstawie żądanego motywu i przydziela go nawet wtedy, gdy zasób nie zawiera motywu o tym identyfikatorze. Identyfikator motywu równy lub większy od liczby motywów zadeklarowanych w zasobie otrzymuje bufor o zerowym rozmiarze. Następnie przebieg ładowania przechodzi poza koniec tabeli motywów, traktuje to, co następuje, jako nagłówek motywu i zapisuje strukturę `GX_THEME` oraz jej tabele do tego zerowego bufora.
- CVE-2026-103414Wysokie
Loader zasobów binarnych GUIX (motywów) rozmiaruje arenę i wypełnia ją w dwóch oddzielnych przebiegach, które przechodzą przez plik zasobu z niezależną arytmetyką kursora. Ponieważ `gx_page_header_data_size` nigdy nie jest walidowany względem danych glifów faktycznie zawartych na stronie, oba przebiegi mogą odczytać różne nagłówki stron dla tej samej strony czcionki, wyliczyć różne liczby glifów i zarezerwować mniej, niż zapisuje przebieg ładujący. Nadmiar jest zapisywany poza końcem areny, z treścią pobraną dosłownie z pliku. Przepełniony bufor jest alokowany przez sam GUIX poprzez `_gx_system_memory_allocator`, a nie dostarczany przez wywołującego. Publiczne API `gx_binres_theme_load()` nie przyjmuje parametru rozmiaru, więc żadna staranność wywołującego nie zapobiega temu. Problem reprodukuje się w domyślnej konfiguracji; `GX_BINARY_RESOURCE_SUPPORT` jest domyślnie włączone.
Oryginalny opis (angielski, źródło NVD)
The PNG chunk reader has no notion of chunk ordering. It records whether an IDAT has been seen and whether a tRNS has already supplied transparency, but nothing prevents an IHDR being read a second time. A PNG carries exactly one IHDR and it is the first chunk. A file that places a second one after IDAT rewrites the image width, height, bit depth and pixel depth *after* the decoded-data buffer has already been allocated and filled from the original values. The pass that reverses the PNG row filters then derives its own extent from the new dimensions and walks the old allocation, moving image bytes past the end of it. The buffer is allocated by GUIX rather than supplied by the caller, so the application has no way to size it defensively. The decoder is compiled in by default.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

