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

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

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

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

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

Категории

Все категории
Loading categories
tmux-fuzzing — Улучшенный фаззинг для tmux с использованием OSS-Fuzz. Включает пользовательские обвязки `cmd-fuzzer` и `argument-fuzzer` для улучшенного покрытия кода и PoC для `CVE-2020-27347`. | Kitploit
Инструменты/GitHubGitHub/lucadibello/tmux-fuzzing
Анализ уязвимостейАнализ КодаФаззингАнализ Бинарных ФайловОбучение и ОбразованиеЛаборатории и Практика
GitHublucadibello/tmux-fuzzing

tmux-fuzzing

Улучшенный фаззинг для tmux с использованием OSS-Fuzz. Включает пользовательские обвязки `cmd-fuzzer` и `argument-fuzzer` для улучшенного покрытия кода и PoC для `CVE-2020-27347`.

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

Популярное

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

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

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

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

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

Лаборатория фаззинга: Улучшение фаззинга для tmux

Безопасность программного обеспечения @ EPFL, весна 2025

Абстракт

В этой лабораторной работе мы улучшили усилия по фаззингу для терминального мультиплексора tmux в рамках инфраструктуры OSS-Fuzz от Google. Сначала мы установили базовый уровень, оценив покрытие строк существующего харнесса input-fuzzer, как с предоставленным начальным корпусом, так и без него, отметив сопоставимое начальное покрытие. Затем мы выявили две значительные области кода в tmux, плохо покрываемые базовым фаззером. Для устранения этих пробелов в покрытии мы разработали и оценили два новых целевых харнесса фаззинга: cmd-fuzzer и argument-fuzzer, продемонстрировав их способность улучшить покрытие в этих ранее недостаточно тестируемых областях. Поскольку эти улучшения фаззинга не выявили новых критических уязвимостей в рамках временных рамок проекта, наш анализ сбоев сосредоточился на известной исторической уязвимости. Мы разработали доказательство концепции (PoC) для CVE-2020-27347 (стековое переполнение буфера), проанализировали её первопричину, обсудили применённое исправление и оценили её последствия для безопасности.

Обзор проекта и цели

Этот проект был направлен на применение и улучшение методов фаззинга для открытого терминального мультиплексора tmux с использованием фреймворка OSS-Fuzz. Проект включал несколько ключевых этапов:

  1. Базовая оценка (Часть 1):

    • Понять и оценить существующий харнесс input-fuzzer для tmux.
    • Сравнить его производительность по покрытию кода при запуске с корпусом по умолчанию и с пустым корпусом.
  2. Анализ пробелов в покрытии (Часть 2):

    • Проанализировать отчёты о покрытии из Части 1, чтобы выявить значительные области кода в tmux, недостаточно покрываемые input-fuzzer.
    • Сосредоточиться на разборе аргументов (arguments.c), логике разбора и выполнения команд (cmd-parse.c, модули cmd-*.c) как на ключевых областях для улучшения.
  3. Улучшение фаззера (Часть 3):

    • Разработать два новых целевых харнесса фаззинга:
      • argument-fuzzer: специально предназначен для тестирования логики разбора аргументов командной строки в arguments.c.
      • cmd-fuzzer: предназначен для тестирования путей разбора и выполнения команд, нацелен на и различные модули .

Структура репозитория

Финальная версия организована следующим образом (внутри каталога submission/):

root@kitploit:~
submission/
├── README.md                   # Этот файл
├── part_1/                     # Файлы для Части 1: Базовая оценка
│   ├── oss-fuzz.diff           # Diff для удаления корпуса семян для input-fuzzer
│   ├── project.diff            # (Вероятно, пустой или незначительный для Части 1)
│   ├── remove_seed_corpus.patch # Фактический файл патча, который использовался
│   ├── report/                 # HTML-отчёты о покрытии для input-fuzzer
│   │   ├── w_corpus/
│   │   └── wo_corpus/
│   ├── run.w_corpus.sh         # Скрипт для запуска input-fuzzer с корпусом
│   └── run.wo_corpus.sh        # Скрипт для запуска input-fuzzer без корпуса
├── part_3/                     # Файлы для Части 3: Улучшения фаззера
│   ├── coverage_noimprove/     # Базовое покрытие (например, от input-fuzzer без корпуса)
│   │   └── ...
│   ├── improve1/               # Улучшение 1: argument-fuzzer
│   │   ├── coverage_improve1/  # Отчёт о покрытии для argument-fuzzer
│   │   ├── oss-fuzz.diff       # Изменения конфигурации OSS-Fuzz для argument-fuzzer
│   │   ├── project.diff        # Изменения Tmux для argument-fuzzer (например, новый .cc, Makefile.am)
│   │   └── run.improve1.sh     # Скрипт для запуска argument-fuzzer
│   └── improve2/               # Улучшение 2: cmd-fuzzer
│       ├── coverage_improve2/  # Отчёт о покрытии для cmd-fuzzer
│       ├── oss-fuzz.diff       # Изменения конфигурации OSS-Fuzz для cmd-fuzzer
│       ├── project.diff        # Изменения Tmux для cmd-fuzzer
│       └── run.improve2.sh     # Скрипт для запуска cmd-fuzzer
├── part_4/                     # Файлы для Части 4: Анализ сбоев (CVE-2020-27347)
│   ├── environment/            # Docker-окружение для PoC
│   │   ├── Dockerfile
│   │   ├── run_tmux_cve_test.sh # Основная логика теста PoC
│   │   ├── test_fixed.sh
│   │   └── test_vulnerable.sh
│   └── run.poc.sh              # Скрипт для сборки Docker-образа и запуска тестов PoC
└── report.pdf                  # Полный отчёт по проекту

(Примечание: Каталог scripts/, содержащий _run_fuzz_core.sh, является вспомогательным и будет частью корня, если этот README находится в истинном корне проекта рядом с submission/)

Настройка и использование

Все кампании фаззинга и воспроизведение PoC CVE предназначены для запуска в Docker-окружениях, управляемых shell-скриптами.

Настройка и использование

Все кампании фаззинга и воспроизведение PoC CVE предназначены для запуска в Docker-окружениях, управляемых shell-скриптами.

Предварительные требования:

  • Docker установлен и запущен в Unix-подобной системе.
  • Shell bash и клиент git.
  • Настроены SSH-ключи для [email protected], если скриптам нужно клонировать oss-fuzz (они пытаются клонировать, если oss-fuzz/ не найден в корне проекта). В качестве альтернативы вы можете предварительно клонировать https://github.com/google/oss-fuzz.git в корень проекта.

Общая архитектура скриптов: Проект использует централизованный основной скрипт scripts/_run_fuzz_core.sh (не включён в каталог submission/, но является частью общей структуры проекта, которую предполагает этот README). Индивидуальные скрипты запуска, расположенные в submission/part_1/, submission/part_3/improve1/, submission/part_3/improve2/ и submission/part_4/, отвечают за:

  1. Настройку конкретной тестовой среды путём применения специфичных для запуска патчей oss-fuzz.diff к чистой копии репозитория oss-fuzz (ожидается, что он находится по пути ../../oss-fuzz относительно большинства скриптов запуска).
  2. Экспорт переменных конфигурации (таких как PROJECT, HARNESS, LABEL, пути к специфичным для проекта патчам и выходным каталогам).
  3. Вызов скрипта _run_fuzz_core.sh, который затем обрабатывает:
    • Применение необязательного патча на уровне проекта (например, для добавления новых исходных файлов фаззеров в tmux).
    • Сборку Docker-образа OSS-Fuzz (если установлен флаг).
    • Сборку указанного фаззера(ов) с выбранным санитайзером.
    • Запуск фаззера на заданное время (обычно 4 часа).
    • Генерацию и экспорт корпуса и HTML-отчётов о покрытии в указанные места в структуре каталога submission/.

Запуск скриптов: Обычно рекомендуется запускать скрипты из корневого каталога проекта, чтобы обеспечить правильное разрешение относительных путей для oss-fuzz/ и выходных каталогов.

1. Часть 1: Базовая оценка (input-fuzzer) Эти скрипты оценивают существующий input-fuzzer для tmux.

root@kitploit:~
# Из корневого каталога проекта:
./submission/part_1/run.w_corpus.sh  # Запуск input-fuzzer с корпусом по умолчанию
./submission/part_1/run.wo_corpus.sh # Запуск input-fuzzer без корпуса семян

run.w_corpus.sh использует поведение сборки tmux по умолчанию в отношении семян. run.wo_corpus.sh применяет submission/part_1/remove_seed_corpus.patch (через свой локальный oss-fuzz.diff, который либо ссылается на этот патч, либо включает его изменения) к oss-fuzz/projects/tmux/build.sh, чтобы гарантировать, что начальный корпус семян не используется. Отчёты о покрытии экспортируются в submission/part_1/report/w_corpus/ и submission/part_1/report/wo_corpus/ соответственно.

2. Часть 3: Улучшения фаззера (input-fuzzer)

  • Улучшение 1 (argument-fuzzer): Нацелен на arguments.c.

    root@kitploit:~
    # Из корневого каталога проекта:
    ./submission/part_3/improve1/run.improve1.sh
    
  • Улучшение 2 (cmd-fuzzer): Нацелен на cmd-parse.c и выполнение команд.

    root@kitploit:~
    # Из корневого каталога проекта:
    ./submission/part_3/improve2/run.improve2.sh
    

Каждый скрипт run.improveX.sh применяет свой локальный oss-fuzz.diff и устанавливает PROJECT_PATCH_FILE на свой локальный project.diff (который добавляет новый код фаззера в tmux и обновляет Makefile.am). Отчёты о покрытии экспортируются в соответствующие каталоги submission/part_3/improveX/coverage_improveX/. Каталог submission/part_3/coverage_noimprove/ содержит базовое покрытие из Части 1 для сравнения.

3. Часть 4: Воспроизведение PoC CVE-2020-27347

root@kitploit:~
# Из корневого каталога проекта:
./submission/part_4/run.poc.sh

Этот скрипт собирает выделенный Docker-образ (из submission/part_4/environment/Dockerfile) и тестирует tmux 3.1b (уязвимая версия) против исправленного коммита a868bac.

Ключевые выводы и результаты

(Подробные объяснения, рисунки и таблицы можно найти в полном отчёте report.pdf)

Часть 1 (Базовый уровень - input-fuzzer)

  • С корпусом по умолчанию: 14.00% покрытие строк (7281/51997 строк), 24.44% покрытие функций.
  • Без корпуса семян: 13.94% покрытие строк (7248/51997 строк), 24.31% покрытие функций.
  • Влияние начального корпуса семян было незначительным для существующего input-fuzzer.
  • Значительные части tmux, особенно разбор аргументов (arguments.c), разбор/выполнение команд (cmd-parse.c, cmd-*.c), а также клиент-серверная логика (client.c, server.c), оставались в значительной степени неиспользованными (например, arguments.c с ~5.8% покрытия строк).

Часть 3 (Улучшения фаззера)

  • argument-fuzzer (нацелен на arguments.c): Достиг 66.62% покрытия строк для arguments.c, что является значительным увеличением по сравнению с базовым ~5.8%.
  • cmd-fuzzer (нацелен на разбор и выполнение команд): Увеличил покрытие строк для cmd-parse.c до 42.58% (с ~27%) и покрытие функций до 77.78%.
  • Покрытие arguments.c также выросло до 45.54% через этот фаззер.
  • cmd.c достиг 39.14% покрытия строк.
  • Было достигнуто новое или значительно улучшенное покрытие в различных модулях cmd-*.c (например, cmd-bind-key.c, cmd-set-options.c до 50% покрытия функций) и подпрограммах обработки клавиш (key-string.c до 30% покрытия строк, key-bindings.c до 6.05% покрытия строк).

Часть 4 (Анализ CVE-2020-27347)

  • Успешно воспроизведена CVE-2020-27347 (стековое переполнение буфера при разборе escape-последовательности SGR) на tmux 3.1b (коммит 6a33a12) с использованием полезной нагрузки \033[::::::7::1:2:3::5:6:7:m.
  • Подтверждено, что коммит tmux a868bac (который включает исправление и приводит к версии 3.1c) не был подвержен сбою.
  • Уязвимость, эксплуатируемая путём записи специально сформированной последовательности в TTY панели, приводит к отказу в обслуживании и потенциально может привести к произвольному выполнению кода. Оценена как высокая серьёзность (CVSS 7.8).

Проблемы, с которыми столкнулись

  • Обеспечение корректного запуска tmux в скриптовом Docker-окружении, в частности, избегание ошибок "not a terminal", потребовало использования откреплённых сессий для PoC CVE.
  • Управление состоянием git (обеспечение полных клонов, чистых сбросов перед применением патчей) в разных тестовых сценариях было критически важным для воспроизводимой сборки конкретных версий tmux.
  • Разработка эффективных новых харнессов фаззинга (argument-fuzzer, cmd-fuzzer) потребовала хорошего понимания внутренней логики обработки аргументов и команд tmux для нацеливания на конкретные неиспользованные пути кода.

Будущая работа

  • Дальнейшее улучшение cmd-fuzzer для покрытия более широкого набора модулей cmd-*.c, особенно тех, которые работают со сложными взаимодействиями состояний, такими как манипуляции с окнами, разметкой или панелями.
  • Исследование стратегий фаззинга для протокола связи клиент-сервер tmux, возможно, с более сложным имитированием окружения.
  • Изучение использования структурно-осознанного фаззинга для языка команд tmux, возможно, с использованием грамматических определений из cmd-parse.y для генерации более синтаксически корректных и сложных последовательностей команд.

Полезные ссылки

  • Проект tmux
  • OSS-Fuzz
  • CVE-2020-27347
  • PDF отчёта проекта (Путь относительно корня проекта)
Скачать инструмент
cmd-parse.c
cmd-*.c
  • Оценить эффективность этих новых харнессов, измерив достигнутое покрытие кода и сравнив его с базовым уровнем.
  • Анализ сбоев (Часть 4):

    • Поскольку в рамках временных рамок проекта улучшенными фаззерами не было обнаружено новых критических уязвимостей, для углублённого анализа была выбрана известная ранее существовавшая уязвимость в tmux (CVE-2020-27347).
    • Это включало разработку доказательства концепции (PoC) для воспроизведения сбоя, анализ его первопричины, понимание применённого исправления и оценку его последствий для безопасности.