CVE-2026-33416

HIGH CVSS 3.1: 7,5 EPSS 0.04%
Обновлено 30 марта 2026
Libpng
Параметр Значение
CVSS 7,5 (HIGH)
Уязвимые версии 1.2.1 — 1.6.55
Тип уязвимости CWE-416 (Использование памяти после освобождения)
Поставщик Libpng
Публичный эксплойт Нет

LIBPNG — это справочная библиотека для использования в приложениях, которые читают, создают и манипулируют файлами растровых изображений PNG (Portable Network Graphics). В версиях с 1.2.1 по 1.6.55 каждый из `png_set_tRNS` и `png_set_PLTE` является псевдонимом буфера, выделенного в куче между `png_struct` и `png_info`, разделяя одно распределение между двумя структурами с независимым временем жизни. Псевдоним `trans_alpha` присутствует, по крайней мере, начиная с libpng 1.0, а псевдоним `palette`, по крайней мере, начиная с версии 1.2.1.

Оба влияют на все строки предыдущих выпусков. `png_set_tRNS` устанавливает `png_ptr->trans_alpha = info_ptr->trans_alpha` (буфер 256 байт), а `png_set_PLTE` устанавливает `info_ptr->palette = png_ptr->palette` (буфер 768 байт). В обоих случаях вызов `png_free_data` (с `PNG_FREE_TRNS` или `PNG_FREE_PLTE`) освобождает буфер через `info_ptr`, в то время как соответствующий указатель `png_ptr` остается висящим. Последующие функции преобразования строк разыменовывают и, в некоторых путях кода, записывают в освобожденную память.

Второй вызов `png_set_tRNS` или `png_set_PLTE` имеет тот же эффект, поскольку обе функции вызывают `png_free_data` внутри себя перед перераспределением буфера `info_ptr`. Версия 1.6.56 устраняет проблему.

Показать оригинальное описание (EN)

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.

Характеристики атаки

Способ атаки
По сети
Атака возможна удалённо
Сложность
Высокая
Сложно эксплуатировать
Нужны права
Не требуются
Права не нужны
Участие пользователя
Требуется
Нужно действие пользователя

Последствия

Конфиденциальность
Высокое
Полная утечка данных
Целостность
Высокое
Полная модификация данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1

Связанные уязвимости