
Reprodução assistida por IA e redescobrível da vulnerabilidade CVE-2026-42945 no nginx, incluindo análise técnica, acionador de PoC e validação de correção para estouro de buffer no heap.
Este repositório documenta um experimento reproduzível de redescoberta de vulnerabilidade assistida por IA contra o nginx ngx_http_rewrite_module, posteriormente associado ao CVE-2026-42945.
O experimento é intencionalmente restrito. O arquivo vulnerável, src/http/ngx_http_script.c, foi fornecido diretamente ao modelo para auditoria. Não se trata de uma alegação de que um sistema de IA encontrou o problema de forma autônoma na base de código completa do nginx do zero.
O bug auditado é um estouro de buffer no heap causado por estado obsoleto do mecanismo de script no processamento de rewrite do nginx.
Em alto nível:
rewrite contendo ? define e->is_args = 1.e->is_args não é limpo após o rewrite terminar.set, if ou rewrite posterior que copia uma captura de regex sem nome, como $1, pode dimensionar o buffer de destino como se a captura fosse copiada sem processamento.e->is_args = 1 obsoleto e faz o escape URI da captura.A reprodução local com AddressSanitizer confirma um heap-buffer-overflow em:
ngx_escape_uri
ngx_http_script_copy_capture_code
ngx_http_rewrite_handler
.
├── README.md
├── LICENSE
├── prompts/
│ ├── audit_prompt.md
│ └── poc_prompt.md
├── poc/
│ ├── trigger.py
│ ├── nginx.conf
│ ├── reproduce.sh
│ └── expected_output.txt
├── docs/
│ ├── technical-analysis.md
│ ├── vulnerability-breakdown.md
│ └── methodology.md
└── screenshots/
└── asan-crash.png
O PoC foi projetado para uma construção local de laboratório do nginx vulnerável com AddressSanitizer habilitado. Ele inicia o nginx em 127.0.0.1:18080, envia uma requisição maliciosa para um servidor local e imprime evidências de crash.
Use uma árvore de código fonte do nginx afetada. O experimento foi validado com nginx 1.30.0 construído com clang e ASan:
./auto/configure \
--prefix=/tmp/nginx-asan-poc \
--with-cc-opt='-O0 -g -fsanitize=address -fno-omit-frame-pointer' \
--with-ld-opt='-fsanitize=address'
make -j"$(getconf _NPROCESSORS_ONLN 2>/dev/null || sysctl -n hw.ncpu)"
A partir deste repositório:
NGINX_BIN=/path/to/vulnerable/nginx/objs/nginx ./poc/reproduce.sh
Se este repositório for colocado diretamente dentro do checkout do código fonte do nginx usado para validação, o script também encontra ../../objs/nginx automaticamente.
Uma reprodução bem-sucedida imprime um relatório ASan semelhante a:
ERROR: AddressSanitizer: heap-buffer-overflow
WRITE of size 1
#0 ngx_escape_uri ngx_string.c:1687
#1 ngx_http_script_copy_capture_code ngx_http_script.c:1399
#2 ngx_http_rewrite_handler ngx_http_rewrite_module.c:180
Veja poc/expected_output.txt.

A configuração do nginx usada pelo PoC é intencionalmente pequena:
location / {
rewrite ^(.*) /new?c=1;
set $myvar $1;
return 200 "$myvar\n";
}
O primeiro rewrite define e->is_args porque a substituição contém ?. O set posterior avalia $1 enquanto esse estado obsoleto ainda está presente.
O patch mínimo redefine o sinalizador de estado de argumento do mecanismo de script quando um rewrite de regex termina:
e->is_args = 0;
e->quote = 0;
Na árvore de código fonte usada para este experimento, a correção aparece como commit:
524977e7c534e87e5b55739fa74601c9f1102686
Rewrite: fixed escaping and possible buffer overrun
O ponto chave não é o tamanho do patch, mas o invariante de estado que ele restaura: a passagem de comprimento e a passagem de escrita devem concordar sobre se as capturas estão sendo copiadas como argumentos URI.
Este experimento usou um agente de codificação de ponta como assistente de auditoria. O prompt direcionou explicitamente o modelo a focar em problemas de segurança de memória em src/http/ngx_http_script.c e prestar muita atenção a incompatibilidades de comprimento/escrita em duas passagens.
Limitações importantes:
Os prompts exatos estão incluídos em prompts/audit_prompt.md e prompts/poc_prompt.md.
Este repositório é destinado a pesquisa defensiva, validação de patches e reprodutibilidade. Execute o PoC apenas contra instâncias de laboratório local que você controla.
A documentação e o harness do PoC neste repositório são lançados sob a Licença MIT. O nginx em si não está incluído e é regido por sua própria licença.