Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-5201 — CVE-2026-5201: переполнение буфера в куче в загрузчике JPEG gdk-pixbuf (CWE-122, CVSS 7.5) | Kitploit
Инструменты/GitHubGitHub/kagancapar/cve-2026-5201
Криминалистика памятиАнализ уязвимостейЭксплуатацияАнализ Бинарных ФайловСтатьи и ИсследованияОбучение и Образование
GitHubkagancapar/cve-2026-5201

CVE-2026-5201

CVE-2026-5201: переполнение буфера в куче в загрузчике JPEG gdk-pixbuf (CWE-122, CVSS 7.5)

Репозиторий
134151 месяц назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-5201

Переполнение буфера в куче в JPEG-загрузчике gdk-pixbuf

Привет, я Kağan Çapar. Я обнаружил уязвимость переполнения буфера в куче в JPEG-загрузчике изображений gdk-pixbuf, которая затрагивает практически все десктопные окружения Linux. Уязвимости присвоен идентификатор CVE-2026-5201, и она подтверждена компанией Red Hat с оценкой CVSS 7.5 (Important).

Этот репозиторий содержит мой полный анализ, написанный с нуля репродуктор, а также доказательства аварийного завершения на живой системе Ubuntu 24.04 LTS.

CVECVE-2026-5201
CWECWE-122 — переполнение буфера в куче
CVSS v37.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)
Затронутоgdk-pixbuf (все версии до исправления)
ВендорGNOME
Исправлениеgdk-pixbuf@6cce931
ТрекерGNOME #304
BugzillaRed Hat #2453291

Краткое описание

Я обнаружил переполнение буфера в куче в JPEG-загрузчике gdk-pixbuf (io-jpeg.c). Прямой путь загрузки файла (gdk_pixbuf__jpeg_image_load) не проверяет количество цветовых компонентов перед выделением буфера пикселей. Специально подготовленный JPEG-файл размером 122 байта с 9 компонентами, объявленными в заголовке SOF, но только 3 сканируемыми в SOS, заставляет gdk-pixbuf выделить буфер для 3 каналов, тогда как libjpeg записывает 9 каналов на пиксель — что приводит к переполнению кучи объёмом до ~49 КБ данных, контролируемых атакующим.

Инкрементальный путь загрузки уже содержал точно такую же проверку, но в прямом пути загрузки она отсутствовала.

Влияние

  • Отказ в обслуживании: 100% надёжное аварийное завершение любого приложения, использующего gdk_pixbuf_new_from_file()
  • Повреждение кучи: указатель на vtable GObject (g_class) перезаписывается данными пикселей
  • Выполнение кода: продемонстрировано на 32-битной Linux через перехват vtable
  • Затронутые системы: все Linux-десктопы — Ubuntu, Fedora, Debian, Arch, RHEL 7–10

Затронутые продукты Red Hat

Корневая причина

В gdk-pixbuf/io-jpeg.c, функция gdk_pixbuf__jpeg_image_load():

1. Недостаточное выделение памяти (строка 633):

root@kitploit:~
pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB,
                        cinfo->out_color_components == 4 ? TRUE : FALSE,
                        8, cinfo->output_width, cinfo->output_height);

2. Избыточная запись (строка 696):

root@kitploit:~
jpeg_read_scanlines(cinfo, lines, cinfo->rec_outbuf_height);
// writes output_components (9) bytes per pixel into a 3-byte buffer

3. Отсутствующая проверка — инкрементальный загрузчик уже проверяет output_components в строке 1142, но эта проверка отсутствовала в прямом пути загрузки.

Воспроизведение

Создание репродуктора

root@kitploit:~
python3 reproducer/craft_cve_2026_5201.py

Эта команда создаёт JPEG-файл размером 122 байта с 9 компонентами в заголовке SOF10 и только 3 сканируемыми в SOS.

Запуск аварийного завершения

root@kitploit:~
# Compile
gcc -o crash_test reproducer/crash_test.c \
    $(pkg-config --cflags --libs gdk-pixbuf-2.0) -fsanitize=address -g

# Run
./crash_test cve_2026_5201.jpg

Ожидаемый результат (AddressSanitizer)

root@kitploit:~
==PID==ERROR: AddressSanitizer: SEGV on unknown address 0x52b000020006
==PID==The signal is caused by a WRITE memory access.
    #0  libjpeg.so.8  (null_convert)
    #1  libjpeg.so.8  (sep_upsample)
    #2  libjpeg.so.8  (process_data_context_main)
    #3  libjpeg.so.8  jpeg_read_scanlines
    #4  libgdk_pixbuf-2.0.so.0  (JPEG loader)
    #5  libgdk_pixbuf-2.0.so.0  gdk_pixbuf_new_from_file

Вывод GDB (без ASAN)

root@kitploit:~
Program received signal SIGSEGV, Segmentation fault.
g_type_check_instance_is_fundamentally_a ()
  → g_object_unref()
  → gdk_pixbuf_new_from_file()

rax = 0x808080808080ffff    ← corrupted GObject vtable pointer

Исправление

Исправление добавляет ту же проверку output_components, которая уже существует в инкрементальном загрузчике:

root@kitploit:~
jpeg_start_decompress(cinfo);

if (cinfo->output_components != 3 && cinfo->output_components != 4 &&
    !(cinfo->output_components == 1 &&
      cinfo->out_color_space == JCS_GRAYSCALE)) {
    g_set_error(error, GDK_PIXBUF_ERROR, GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
                "Unsupported number of color components (%d)",
                cinfo->output_components);
    goto out;
}

Применено в gdk-pixbuf@6cce931.

Протестированная среда

ОСUbuntu 24.04.1 LTS
gdk-pixbuf2.42.10+dfsg-3ubuntu3.2
libjpeglibjpeg-turbo 2.1.5 (libjpeg.so.8.2.2)
GCC13.3.0

Ссылки

  • https://www.cve.org/CVERecord?id=CVE-2026-5201
  • https://nvd.nist.gov/vuln/detail/CVE-2026-5201
  • https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/issues/304
  • https://access.redhat.com/security/cve/CVE-2026-5201
  • https://bugzilla.redhat.com/show_bug.cgi?id=2453291

Исторический прецедент

CVE-2017-2862 (Cisco Talos TALOS-2017-0366) — CVSS 8.8 — тот же класс ошибки несоответствия буфера null_convert в gdk-pixbuf, классифицированный как удалённое выполнение кода.

Автор

Kağan Çapar — GitHub · LinkedIn · X

Подтверждено Red Hat в уведомлении CVE-2026-5201.

Скачать инструмент
ПродуктКомпонентСтатус
Red Hat Enterprise Linux 10gdk-pixbuf2Затронут
Red Hat Enterprise Linux 10loupeЗатронут
Red Hat Enterprise Linux 10snapshotЗатронут
Red Hat Enterprise Linux 9gdk-pixbuf2Затронут
Red Hat Enterprise Linux 8gdk-pixbuf2Затронут
Red Hat Enterprise Linux 7gdk-pixbuf2Затронут