CVE-2026-43996
ŚrednieCVSS 5.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 7 - wyżej niż 7% wszystkich znanych CVE
Streszczenie
W bibliotece OpenImageIO w wersjach przed 3.0.18.0 i 3.1.13.0 występuje błąd przepełnienia arytmetyki 32-bitowej w funkcji TGAInput::decode_pixel. Sprawdzenie granic oblicza k + palbytespp jako unsigned 32-bit, co przy k = 0xFFFFFFFC i palbytespp = 4 zawija się do 0 i przechodzi walidację, po czym następuje odczyt około 4 GB poza bufor palety, powodując SEGV.
Ocena ryzyka
Podatność może być wykorzystana do zdalnego wywołania awarii (odmowa usługi) aplikacji przetwarzającej złośliwe pliki TGA, co może przerwać działanie usług przetwarzania obrazów.
Rekomendacja
Zaktualizuj OpenImageIO do wersji 3.0.18.0 lub 3.1.13.0. Do czasu aktualizacji unikaj przetwarzania niezaufanych plików TGA.
Inne podatności w OpenImageIO
Zobacz wszystkie- CVE-2026-113681Średnie
OpenImageIO w wersjach przed 3.0.20.0, 3.1.x przed 3.1.15.0 i 3.2.x przed 3.2.0.3-beta1 zawiera przepełnienie liczb całkowitych w cineon::Codec::Read, które zaniża rozmiar bufora linii skanowania, powodując odczyt poza granicami sterty. Atakujący może dostarczyć spreparowany plik Cineon z ogromną zadeklarowaną szerokością, która zawija obliczenie rozmiaru do zera, przez co UnPackPacked czyta poza 4-bajtowym buforem i powoduje awarię aplikacji.
- CVE-2026-67549Wysokie
OpenImageIO to zestaw narzędzi do odczytu, zapisu i manipulacji plikami graficznymi. Przed wersją 3.1.16.0, specjalnie spreparowany 1-bitowy ciągły obraz TIFF w trybie CMYK jest udostępniany przez natywny specyfikator obrazu uint1, więc wywołujący alokuje bufor bitowy. Funkcja tiffinput::read_native_scanline_locked() wywołuje jednak tiffinput::bit_convert() z 8-bitowym wyjściem i zapisuje jeden rozwinięty bajt na wartość do mniejszego bufora, co powoduje zapis poza stertą i uszkodzenie pamięci. Problem naprawiono w wersji 3.1.16.0.
- CVE-2026-65970Średnie
W OpenImageIO przed wersją 3.1.16.0 spreparowany plik TIFF skompresowany ZIP, przetwarzany z włączonym wielowątkowym TIFF, może spowodować, że TIFFInput::read_native_scanlines() zwróci wynik przez ścieżkę błędu, podczas gdy asynchroniczne zadania dekompresji pasków pozostają w kolejce. Ponieważ task_set jest zadeklarowany przed ok i compressed_scratch, przechwycone obiekty są niszczone przed destruktorem task_set, co pozwala zadaniom roboczym używać nieaktualnej pamięci stosu i sterty.
- CVE-2026-65969Średnie
W OpenImageIO przed wersjami 3.0.21.0, 3.1.16.0 i 3.2.0.3-beta1 obcięty plik TGA może pozostawić oczekującą ramkę GIF, która jest przetwarzana podczas zamykania wyjścia. Funkcja gifsplitpalette() oblicza numpixels pomnożone przez szerokość partycji palety w 32-bitowej arytmetyce ze znakiem; duży obraz powoduje przepełnienie tego wyniku pośredniego, uszkadza subpixelsa i prowadzi do odczytu poza granicami bufora podczas budowania palety GIF.
- CVE-2026-63638Wysokie
OpenImageIO to zestaw narzędzi do odczytu, zapisu i manipulacji plikami graficznymi. Przed wersjami 3.0.21.0, 3.1.16.0 i 3.2.0.3-beta1, specjalnie spreparowany obraz Cineon może deklarować nieobsługiwaną głębię bitową 26. Funkcja cineoninput::open() mapuje ją na 32-bitowy specyfikator obrazu, ale libcineon mapuje nieobsługiwaną głębię na 8-bajtową wartość, więc cineoninput::read_native_scanline() powoduje zapis danych kontrolowanych przez atakującego poza bufor wywołującego (4 bajty na piksel), co prowadzi do zapisu poza stertą i uszkodzenia pamięci. Problem naprawiono w wersjach 3.0.21.0, 3.1.16.0 i 3.2.0.3-beta1.
- CVE-2026-63635Średnie
W OpenImageIO przed wersjami 3.0.21.0, 3.1.16.0 i 3.2.0.3-beta1 spreparowany plik PSD z nieprawidłowym color_mode omija normalną walidację, gdy włączone jest oiio:rawcolor lub psd:rawdata. Funkcja psdinput::setup() używa wartości kontrolowanej przez atakującego do indeksowania stałych tablic trybów kolorów, powodując globalny odczyt poza granicami i potencjalnie fałszywą alokację.
- CVE-2026-63422Wysokie
OpenImageIO to zestaw narzędzi do odczytu, zapisu i manipulacji plikami graficznymi. Przed wersjami 3.0.21.0, 3.1.16.0 i 3.2.0.3-beta1, prawidłowy kafelkowy obraz OpenEXR, którego szerokość nie jest wielokrotnością szerokości kafelka, może wywołać przepełnienie przy odczycie częściowego prostokąta krawędziowego. Funkcja openexrinput::read_native_tiles() kopiuje każdy wiersz do bufora wywołującego, używając dopełnionego całego kafelka scanline_stride zamiast user_scanline_bytes dla żądanego prostokąta, co prowadzi do zapisu poza stertą i uszkodzenia pamięci. Problem naprawiono w wersjach 3.0.21.0, 3.1.16.0 i 3.2.0.3-beta1.
- CVE-2026-63420Średnie
W OpenImageIO przed wersjami 3.0.21.0, 3.1.16.0 i 3.2.0.3-beta1 indeksowany plik PSD z metadanymi przezroczystości tworzy mniej buforów channel_buffers niż wartość spec.nchannels reklamowana przez ścieżkę rawcolor. Gdy włączone jest oiio:rawcolor lub psd:rawdata, funkcja psdinput::read_native_scanline() przekazuje spec.nchannels do psdinput::interleave_row(), co indeksuje poza channel_buffers.
- CVE-2026-63419Wysokie
OpenImageIO to zestaw narzędzi do odczytu, zapisu i manipulacji plikami graficznymi. Przed wersjami 3.0.21.0, 3.1.16.0 i 3.2.0.3-beta1, kafelkowy obraz IFF tylko z buforem Z jest udostępniany z 16-bitowym publicznym specyfikatorem obrazu, podczas gdy dekoder zachowuje 32-bitowy wewnętrzny rozmiar piksela. Funkcja iffinput::read_native_tile() kopiuje zgodnie z m_header.pixel_bytes() zamiast imagespec::tile_bytes(true), a nieudany odczyt może pozostawić m_buf niepusty, więc późniejsze wywołanie kopiuje częściowo zainicjowane dane do zbyt małego bufora, co prowadzi do zapisu poza stertą i uszkodzenia pamięci. Problem naprawiono w wersjach 3.0.21.0, 3.1.16.0 i 3.2.0.3-beta1.
- CVE-2026-59956Średnie
W OpenImageIO przed wersjami 3.0.20.0, 3.1.15.0 i 3.2.0.3-beta1 nieskompresowany 16-bitowy obraz IFF z buforem Z powoduje, że iffinput::readimg() alokuje tymczasową linię skanowania na podstawie m_header.rgba_count, ale kopiuje z niej przy użyciu m_header.pixel_bytes(), którego krok obejmuje również bajty bufora Z. Zbyt duże memcpy odczytuje poza tymczasowy bufor sterty i kopiuje sąsiednią pamięć do obrazu wyjściowego.
Oryginalny opis (angielski, źródło NVD)
OpenImageIO is a toolset for reading, writing, and manipulating image files of any image file format relevant to VFX / animation. Prior to 3.0.18.0 and 3.1.13.0, the bounds check in TGAInput::decode_pixel computes k + palbytespp as unsigned 32-bit arithmetic. When k = 0xFFFFFFFC and palbytespp = 4, the addition wraps to 0, which compares less than palette_alloc_size and passes the check. The subsequent palette access uses the unwrapped k (0xFFFFFFFC) as the index, reading ~4 GB past the start of the palette buffer — SEGV. This vulnerability is fixed in 3.0.18.0 and 3.1.13.0.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

