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

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

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

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

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

Категории

Все категории
Loading categories
practice-22-23 — CVE-2017-9608 анализ | Kitploit
Инструменты/GitHubGitHub/lacinquette/practice-22-23
Безопасность контейнеровАнализ уязвимостейЭксплуатацияФаззингАнализ Бинарных ФайловОбучение и Образование
GitHublacinquette/practice-22-23

practice-22-23

CVE-2017-9608 анализ

Репозиторий
173 лет назадЕщё не проверено

Популярное

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

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

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

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

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

Проект

Для запуска: ./script.sh

Репозиторий на гитхаб - https://github.com/LaCinquette/practice-22-23

Ход выполнения

  1. Для поиска уязвимости я выбрал проект FFmpeg. Нашел в нем коммит, который соответствовал требованиям, а именно:

    • Соответствовал типу CWE-476 - разыменование нулевого указателя
  2. Создал докерфайл, в котором:

    1. Выбрал в качестве базового образа Ubuntu 22.04
    2. Уствновил DEBIAN_FRONTEND=nointeractive для исключения взаимодействия с командной строкой во время установки пакетов и других команд
    3. Установил необходимые зависимости указанные в официальной вики
    4. Подготавливаю рабочее место (папка workdir)
    5. Скачиваю, распаковываю и перемещаю коммит с еще не исправленной уязвимостью в рабочее место
    6. Запускаю билд программы с помощью утилиты make
    7. Создаю скрипт copy_out.sh, который занимается поиском необходимого объектного файла с ошибкой и копированием его в директорию workspace/out
    8. Оставляю инструкцию на выполнение скрипта copy_out.sh, которая должна выполниться при запуске контейнера
  3. Для автоматизации создаю скрипт script.sh, который собирает образ и запускает контейнер из которого затем забирает файл и перемещает его в текущую директорию:

    1. Удаляю текущую папку out (если она есть)
    2. Собираю образ с именем ffmpeg_image
    3. Запускаю контейнер на основе собранного образа, в котором передаю следующие параметры:
      • --rm для автоматического удаления контейнера по завершению
      • -v $PWD/out:/workspace/out для монтирования временной директории, через которую обЪектный файл передается на хост
    4. Копирую нужный файл из папки out
    5. Удаляю папку out

Анализ уязвимости

Источники:

  • Коммит с исправленной ошибкой
  • Страница на Github об уязвимости
  • Письмо исследователя безопасности об уязвимости

Анализ:

Проблема:

  1. С помощью команды ffmpeg -c:v dnxhd -i poc.mov -y output.ts на вход программе подается специально созданный .mov файл
  2. Для парсинга формата DNxHD вызывается функция dnxhd_parse в файле dnxhd_parser
  3. Она в свою очередь вызывает функцию dnxhd_find_frame_end (в том же файле), которая при определенных условиях не находит конец и выдает отрицательное число, не являющееся кодом ошибки
  4. Это число вместе с другими параметрами затем передается в функцию ff_combine_frame (находящуюся в файле parser) для соединения фреймов
  5. Так как это число не является кодом ошибки, то ff_combine_frame распознает это как сдвиг и пытается заново прочитать эти байты в буфере, а так как буфер в этот момент пустой, происходит разыменование нулевого указателя, что приводит к Segmentation fault

В ассемблере:

0x08000d4e - начало секции

  1. movsxd rcx, dword [rbx + 0xc]

    В регистре rcx получаем ссылку на pc->buffer

  2. add rcx, rdi

    Добавляем next к pc->buffer

  3. add rcx, qword [rbx]

    Добавляем pc->last_index к next и pc->buffer

  4. movzx edi, byte [rcx]

    Вычисляем байт по адресу rcx, но так как pc->buffer изначально null - ловим Segmentation fault

Решение:

Предотвратить обращение к невыделенному участку памяти, путем коректной обработки исключительного случая. При обнаружении отрицательного числа оставшихся байтов, продолжить обработку файла путем пропускания цикла.

Скачать инструмент