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

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

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

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

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

Категории

Все категории
Loading categories
codeql-buffer-overflow-variant — Синтетический вариант переполнения буфера стека CWE-120 на основе CVE-2020-8597 (pppd EAP) в качестве цели статического анализа CodeQL | Kitploit
Инструменты/GitHubGitHub/anna-kravets/codeql-buffer-overflow-variant
Статический анализСтатический анализ кода (SAST)Анализ уязвимостейАнализ Кода
GitHubanna-kravets/codeql-buffer-overflow-variant

codeql-buffer-overflow-variant

Синтетический вариант переполнения буфера стека CWE-120 на основе CVE-2020-8597 (pppd EAP) в качестве цели статического анализа CodeQL

Репозиторий

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
5 дней назадЕщё не проверено

codeql-buffer-overflow-variant

Преднамеренно уязвимая программа на C (~130 строк), используемая как цель для статического анализа CodeQL. Она воспроизводит класс ошибки CVE-2020-8597 — стековое переполнение буфера rhostname в EAP pppd (CWE-120) — в программе, которая не разделяет ни имён функций pppd, ни глубины вызовов, ни структуры диспетчеризации.

Цель — проверка общности: запрос CodeQL, написанный для обнаружения ошибки pppd, должен срабатывать и на этой программе без каких-либо правок. Если это происходит, запрос выражает класс ошибки, а не форму исходного кода.

Эта программа намеренно небезопасна и существует только для анализа. Не разворачивайте её. Ошибка, которую она воспроизводит, публична (CVE-2020-8597, раскрыта в 2020).

Класс ошибки

Длина, управляемая атакующим, копируется в буфер фиксированного размера без проверки, соотносящей эту длину с размером буфера.

Проверка границ присутствует — просто она проверяет не то: заявленная длина сверяется с полученным кадром (что предотвращает переполнение при чтении), но никогда с sizeof(dest) (что как раз предотвращает переполнение при записи). Это та же корневая причина, что и мёртвая проверка vallen >= len + sizeof(rhostname) в pppd.

Структура vs. pppd (почему это настоящий вариант)

Обе сохраняют единственное свойство, которое делает это анализом потока данных, а не поиском по grep: косвенный вызов через таблицу указателей на функции между источником и приёмником.

  • handle_hello() — уязвима. memcpy(name, payload + 2, vlen) с vlen, ограниченным кадром, а не sizeof(name).
  • handle_echo() — безопасна. Та же форма источника и приёмника, но vlen также ограничен sizeof(buf). Это отрицательный контроль: запрос должен срабатывать на handle_hello и оставаться молчаливым здесь.

Формат кадра

Одна UDP-датаграмма = один кадр:

root@kitploit:~
[ type : 1 ] [ length : 2, big-endian ] [ value : length bytes ]

type 0x01 → hello, 0x02 → echo. Hello-кадр с заявленной длиной от 65 до ~2045 переполняет name[64].

Сборка

root@kitploit:~
make            # gcc -Wall -Wextra -O0 -g -o tlv_server tlv_server.c

Linux/POSIX (BSD-сокеты). Собирается чисто, без предупреждений.

Создание базы данных CodeQL

CodeQL отслеживает реальную компиляцию, поэтому выполняйте чистую сборку:

root@kitploit:~
make clean
codeql database create db --language=cpp --command="make"
# or, without the clean step:
codeql database create db --language=cpp --command="make -B"

Затем выполните запрос Part 3 для базы db; он должен сообщить о memcpy в handle_hello и не сообщать о memcpy в handle_echo.

Скачать инструмент
pppd / CVE-2020-8597этот проект
Источникread() на PPP-дескриптореrecvfrom() на UDP-сокете
Диспетчеризацияглобальный struct protent *protocols[], линейный поиск по номеру протоколалокальный для файла const struct frame_op ops[], линейный поиск по 1-байтовому тегу
Глубина до приёмникаget_input → (*input) → eap_input → eap_requestdispatch_frame → (*handle) → handle_hello
Приёмникchar rhostname[256]char name[64]
Неверная проверкаvallen ограничено длиной пакета lenvlen ограничено длиной кадра plen