CVE-2026-33023

HIGH CVSS 3.1: 7,8
Обновлено 17 апреля 2026
libsixel
Параметр Значение
CVSS 7,8 (HIGH)
Устранено в версии 1.8.7
Тип уязвимости CWE-416 (Использование памяти после освобождения)
Поставщик libsixel
Публичный эксплойт Нет

libsixel — это реализация кодера/декодера SIXEL, созданная на основе Sixel компании kmiya. В версиях 1.8.7 и более ранних при сборке с опцией --with-gdk-pixbuf2 существует уязвимость использования после освобождения в load_with_gdkpixbuf() в loader.c. Путь очистки вручную освобождает объект Sixel_frame_t и его внутренние буферы без учета счетчика ссылок, даже если объект был создан с помощью конструктора с подсчетом ссылок Sixel_frame_new() и открыт для публичного обратного вызова.

Обратный вызов, который вызывает Sixel_frame_ref(frame) для сохранения логически допустимой ссылки, будет удерживать висячий указатель после возврата Sixel_helper_load_image_file(), и любой последующий доступ к кадру или его полям запускает использование после освобождения, подтвержденное AddressSanitizer. Основной причиной является нарушение согласованности между двумя стратегиями очистки в одной и той же базе кода: Sixel_frame_unref() используется в load_with_builtin(), а необработанный free() используется в load_with_gdkpixbuf(). Злоумышленник, предоставляющий созданный образ любому приложению, созданному на основе libsixel с поддержкой gdk-pixbuf2, может надежно инициировать это, что потенциально может привести к раскрытию информации, повреждению памяти или выполнению кода.

Эта проблема исправлена ​​в версии 1.8.7-r1.

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

libsixel is a SIXEL encoder/decoder implementation derived from kmiya's sixel. In versions 1.8.7 and prior, when built with the --with-gdk-pixbuf2 option, a use-after-free vulnerability exists in load_with_gdkpixbuf() in loader.c. The cleanup path manually frees the sixel_frame_t object and its internal buffers without consulting the reference count, even though the object was created via the refcounted constructor sixel_frame_new() and exposed to the public callback. A callback that calls sixel_frame_ref(frame) to retain a logically valid reference will hold a dangling pointer after sixel_helper_load_image_file() returns, and any subsequent access to the frame or its fields triggers a use-after-free confirmed by AddressSanitizer. The root cause is a consistency failure between two cleanup strategies in the same codebase: sixel_frame_unref() is used in load_with_builtin() but raw free() is used in load_with_gdkpixbuf(). An attacker supplying a crafted image to any application built against libsixel with gdk-pixbuf2 support can trigger this reliably, potentially leading to information disclosure, memory corruption, or code execution. This issue has been fixed in version 1.8.7-r1.

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

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

Последствия

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

Строка CVSS v3.1