
Scanner local apenas de leitura para CVE-2026-42945 (NGINX Rift) que verifica instâncias do NGINX, OpenResty e Tengine em busca de configurações de reescrita vulneráveis, sem executar exploits ou modificar serviços.
Este repositório fornece dois scripts de verificação locais para verificar se Nginx, OpenResty ou Tengine em servidores Linux/Windows apresentam riscos relacionados ao CVE-2026-42945.
Os scripts realizam apenas coleta somente leitura e avaliação local, não executam PoC de vulnerabilidade, não enviam requisições de ataque, não modificam configurações, não reiniciam serviços e não atualizam software.
O CVE-2026-42945, também conhecido como NGINX Rift, é descrito em documentos públicos como um problema de estouro de buffer no heap no ngx_http_rewrite_module. De acordo com a descrição do NVD, quando uma combinação específica da diretiva rewrite com diretivas rewrite / if / set subsequentes é formada, envolvendo variáveis de captura não nomeadas PCRE (por exemplo, , ) e strings de substituição contendo o caractere , um invasor pode acionar um estouro de buffer no heap no processo worker do NGINX através de uma requisição HTTP manipulada. Esse problema pode levar à reinicialização do worker; sob condições específicas, como ASLR desativado, há risco de execução de código.
$1$2?O comunicado oficial de segurança do NGINX marca o CVE-2026-42945 como um buffer overflow no ngx_http_rewrite_module e fornece os limites de correção para o NGINX Open Source:
| Status | Versão do NGINX Open Source |
|---|---|
| Corrigido | 1.31.0+ / 1.30.1+ |
| Possivelmente afetado | 0.6.27-1.30.0 |
Distribuições, produtos comerciais, OpenResty, Tengine ou builds privados podem ter backports de correção ou diferenças de mapeamento de versão. Os scripts tentarão coletar evidências, mas a confirmação final deve ser feita manualmente com base nos comunicados dos fornecedores.
Esta ferramenta não é uma ferramenta de validação de exploração, mas sim uma ferramenta de coleta local e verificação estática de configuração. Ela foca em identificar as seguintes combinações:
$1, $2 sem escape na string de substituição da diretiva rewrite.? sem escape na mesma string de substituição do rewrite (interrogação literal com escape \? não é considerada condição de risco).rewrite, if ou set.Exemplo de padrão de risco:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?endpoint=$1 last;
set $flag 1;
}
O risco não vem de uma única diretiva rewrite ou set, mas sim da combinação de versão, contexto de configuração e ordem de execução. Se detectado, ainda é recomendável confirmar manualmente se a configuração é realmente ativa, se pode ser acessada por requisições externas e se já foi corrigida por backport da distribuição.
| Arquivo | Descrição |
|---|---|
check_nginx_linux.sh | Script de verificação local para Linux |
check_nginx_windows.ps1 | Script de verificação local para Windows |
README.md | Documentação em chinês |
README.en.md | README em inglês |
Primeira versão suporta:
rewrite perigosas relacionadas ao CVE-2026-42945.summary.txt, summary.json e diretório de evidências brutas.A primeira versão não inclui:
Recomenda-se executar com privilégios administrativos:
root ou com acesso sudo.Sem privilégios administrativos, o script tentará coletar o máximo possível; se não conseguir exportar a configuração ativa completa nginx -T, o resultado será marcado como Requer verificação manual.
Faça upload do check_nginx_linux.sh para o servidor e execute:
chmod +x check_nginx_linux.sh
sudo ./check_nginx_linux.sh
Se não puder usar sudo, execute diretamente:
./check_nginx_linux.sh
Faça upload do check_nginx_windows.ps1 para o servidor e execute no PowerShell como administrador:
powershell -ExecutionPolicy Bypass -File .\check_nginx_windows.ps1
O script gera um diretório de resultados no mesmo diretório do script. O nome do diretório contém o nome do host, hora e PID do script para evitar sobrescrita de evidências se executado no mesmo segundo.
nginx_check_<hostname>_<horário>_<PID>/
summary.txt
summary.json
raw/
host_info.txt
process_info.txt
service_info.txt
package_info.txt
nginx_paths.txt
instances/
instance_01/
nginx_invocation.txt
nginx_version.txt
nginx_build.txt
nginx_config_dump.txt
risky_config_matches.txt
instance_02/
...
| Arquivo ou Diretório | Descrição |
|---|---|
summary.txt | Resumo em chinês, adequado para visualização manual e relatório |
summary.json | Resultado estruturado, útil para agregação em lote posterior |
raw/ | Saída de comandos brutos e arquivos de evidência |
raw/instances/instance_XX/ | Versão, configuração e evidência de risco de cada instância |
O resumo registrará:
| Campo | Descrição |
|---|---|
Número de instâncias | Quantidade de candidatos Nginx / OpenResty / Tengine encontrados e verificados individualmente |
Tamanho da configuração | Tamanho do arquivo de configuração original exportado por nginx -T |
Linhas escaneadas | Número de linhas de saída de configuração efetivamente escaneadas pelo script |
Número de configurações perigosas detectadas | Quantidade de regras rewrite perigosas detectadas |
Resumo das evidências | Pré-visualização das evidências da instância de maior risco; evidências completas no diretório da instância correspondente |
Se a configuração do Nginx for grande, o script não imprimirá a configuração completa no console; a configuração ativa completa é salva no arquivo nginx_config_dump.txt do diretório da instância. Quando o arquivo de configuração exportado exceder 10 MB, o script continuará escaneando automaticamente e sugerirá inspeção manual com base nos resultados em raw/.
Se o servidor contiver múltiplos executáveis candidatos nginx, openresty ou tengine, o script verificará cada um e gerará detalhes das instâncias.
A conclusão geral do resumo usará a instância de maior risco. A prioridade conservadora segue:
Afetado com configuração de riscoRequer verificação manualAfetado sem configuração de riscoNão afetadoNginx não instaladoRequer verificação manual tem prioridade sobre Afetado sem configuração de risco, indicando que existem instâncias não confirmadas que precisam de verificação adicional, não significando necessariamente que configuração de risco foi confirmada.
| Conclusão | Significado |
|---|---|
Nginx não instalado | Nenhum comando, processo ou serviço Nginx / OpenResty / Tengine encontrado |
Não afetado | Versão claramente corrigida e nenhuma configuração de risco encontrada |
Afetado sem configuração de risco | Versão possivelmente afetada, mas nenhuma configuração de rewrite perigosa encontrada |
Afetado com configuração de risco | Versão possivelmente afetada ou derivada que requer verificação, e configuração de rewrite perigosa encontrada |
Requer verificação manual | Versão desconhecida, versão derivada, falha na coleta de configuração, permissão insuficiente ou evidência insuficiente |
| Produto | Julgamento de Versão |
|---|---|
NGINX 1.31.0+ | Corrigido, o script exibe Corrigido (mainline) |
NGINX 1.30.1+ | Corrigido, o script exibe Corrigido (stable) |
NGINX 0.6.27-1.30.0 | Possivelmente afetado |
| OpenResty / Tengine | Versão e configuração podem ser coletadas, mas a relação de impacto da versão requer verificação manual por padrão |
Distribuições podem ter "versão antiga mas com backport de patch". Se for possível fornecer comprovação de patch do fornecedor, a confirmação manual pode ser feita combinando summary.txt e informações da versão do pacote.
rewrite / if / set nos contextos location, server, if, etc.$1, $2 em strings de substituição rewrite que contenham ?.nginx -T não conseguir exportar a configuração completa, o script não considerará o sistema seguro.