Новости · Безопасность

FFmpeg: найдена утечка памяти в декодере формата CDXL (CVE-2026-120246)

31 октября 2026 опубликована CVE-2026-120246 — уязвимость в декодере формата CDXL в FFmpeg версий с 4.4 по 9.0.2. Специально подготовленный CDXL-файл с незаполненными записями HAM-палитры заставляет декодер скопировать в кадр неинициализированные байты из памяти стека вместо корректных пикселей. Патч уже готов в основной ветке проекта.

4 ноября 2026 Редакция Loadfile Чтение 5 мин
Абстрактная визуализация повреждённых пикселей и утечки данных из памяти — уязвимость CVE-2026-120246 в декодере CDXL FFmpeg

Коротко: CVE-2026-120246 — уязвимость класса «использование неинициализированной переменной» (CWE-457) в декодере CDXL библиотеки libavcodec FFmpeg, затрагивающая версии с 4.4 по 9.0.2. Функции cdxl_decode_ham6() и cdxl_decode_ham8() при обработке специально сконструированного CDXL-файла типа 0 обращаются к незаполненным записям HAM-палитры — в результате в декодированное изображение попадают случайные байты из памяти стека процесса, включая фрагменты указателей. CVSS-оценка — 6.8 (средняя), эксплуатация требует локального запуска файла и минимального взаимодействия пользователя. Исправление уже внесено в основную ветку проекта (commit 47313ad3), отдельного релиза с патчем на момент публикации не было.

Что такое CDXL и почему это редкий случай

CDXL — старый формат анимации, разработанный для платформы Commodore CDTV в начале 1990-х. Кадры CDXL могут кодироваться в режиме HAM (Hold-And-Modify) — техникой экономии палитры, которая позволяла компьютерам Amiga и CDTV показывать больше оттенков, чем позволяло ограниченное число слотов палитры: каждый новый пиксель может «изменять» один канал цвета предыдущего пикселя вместо хранения полного значения.

FFmpeg поддерживает CDXL ради совместимости и архивной расшифровки старых файлов — формат не используется в современном производстве видео. Именно поэтому уязвимость не затрагивает рядовых пользователей конвертеров и видеоредакторов в их обычных сценариях: риск касается в первую очередь архивных пайплайнов, музейных и эмуляционных проектов, а также любых сервисов, которые декодируют пользовательские файлы через FFmpeg без ограничения допустимых форматов.

Механика уязвимости: откуда берётся утечка

По данным технического описания VulnCheck, декодер CDXL хранит палитру HAM-режима в массиве new_palette. При разборе кадра он должен заполнить все используемые записи этого массива из данных файла. Уязвимость в том, что специально сформированный CDXL-файл типа 0 может указать на индекс палитры, который декодер не заполнил — такую запись можно оставить «пустой» заранее подготовленным заголовком кадра.

Функции cdxl_decode_ham6() (6-битный HAM, Amiga) и cdxl_decode_ham8() (8-битный HAM) используют значение из незаполненной записи как есть, без проверки инициализации. Поскольку память на стеке переиспользуется между вызовами функций, в «пустой» записи может оказаться остаток чужих данных — в том числе байты указателей или фрагменты других структур процесса. Результат утечки записывается прямо в выходной кадр BGR24 — то есть теоретически потенциально чувствительные байты памяти можно извлечь обратно, просмотрев или сохранив декодированное изображение.

!
Важная оговорка

Это утечка информации (CWE-457), а не выполнение произвольного кода: прочитанные байты становятся частью картинки кадра, их нельзя использовать напрямую для захвата процесса. Практическая опасность — раскрытие случайных фрагментов памяти процесса через визуальный артефакт в выходном видео или снятом кадре.

Кто в зоне риска

Прямого риска для большинства пользователей FFmpeg нет: атака требует, чтобы жертва открыла или обработала чужой CDXL-файл именно через затронутые функции декодера. На практике это актуально для:

  • архивных и эмуляционных проектов, конвертирующих старые файлы Amiga/CDTV через FFmpeg;
  • автоматизированных пайплайнов транскодирования, которые принимают файлы от посторонних пользователей без белого списка допустимых контейнеров и кодеков;
  • приложений, встраивающих libavcodec как библиотеку и позволяющих загружать произвольные медиафайлы без проверки формата.

Рядовые сценарии — конвертация MOV, MKV, AVI и подобных современных контейнеров — декодер CDXL не затрагивают и опасности не несут.

Как закрыть уязвимость

Исправление внесено в основную ветку (master) репозитория FFmpeg на GitHub соответствующим патчем в функции разбора HAM-палитры; на момент публикации новости отдельного тегированного релиза, где фикс вошёл бы в стабильную версию, не было — рекомендуем следить за официальным Changelog на предмет следующего патч-релиза ветки 9.0 или 9.1.

Если ваш сервис принимает файлы от сторонних пользователей и декодирует их через FFmpeg, снизить риск можно уже сейчас — ограничить список разрешённых форматов на входе и не пропускать файлы с контейнером CDXL, если он не нужен бизнес-логике. Такой же подход мы рекомендуем в карте опасных расширений файлов — фильтровать по белому, а не чёрному списку.

✓
Проверить версию FFmpeg

Выполните в терминале ffmpeg -version. Если версия находится в диапазоне 4.4–9.0.2 и ваш пайплайн принимает произвольные файлы — исключите CDXL из списка поддерживаемых контейнеров или дождитесь патч-релиза с фиксом.

Источники

Читайте также