
Nginx Rewrite CVE Scan(CVE-2026-42945 nginx-rift CVE-2026-9256)
Idioma: Chinês | Inglês
Este é um script leve para verificar se a configuração do NGINX contém padrões de risco relacionados a CVE-2026-42945 (NGINX Rift) e CVE-2026-9256.
A vulnerabilidade foi divulgada por depthfirst no artigo NGINX Rift: Achieving NGINX RCE via an 18-Year-Old Vulnerability. De acordo com o artigo e as descrições da F5/NVD, o risco está associado a combinações específicas de configuração do módulo ngx_http_rewrite_module: no mesmo contexto de configuração, a string de substituição de rewrite contém ? e, em seguida, rewrite, if ou set referencia uma variável de captura PCRE sem nome, como $1, $2.
Esta ferramenta verifica principalmente se existem os seguintes padrões de alto risco em arquivos de configuração do NGINX.
Sequência de alto risco como o exemplo abaixo:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
O ponto de risco não é um rewrite ou set isolado, mas a ordem de execução deles no mesmo contexto:
rewrite usa captura regex e a string de substituição contém ?rewrite, if ou set subsequente usa variáveis de captura sem nome como $1, $2Essa combinação pode causar uma inconsistência entre o cálculo de comprimento e o estágio de cópia real no mecanismo de script do NGINX, resultando em um estouro de buffer no heap.
rewrite de alto risco como o exemplo abaixo:
location / {
rewrite /wengine-auth-static/((.*)) /?$1$2 break;
}
Condições de risco:
^/((.*))$ o $1 contém $2$1$2Observe que break não elimina o risco; desde que múltiplos grupos de captura sobrepostos apareçam na parte de argumentos após ?, ainda se enquadra em contexto de argumentos. Rewrite de URI normal como /$1$2 break não aciona a condição para este CVE.
Quando o script encontra esse padrão, ele é marcado explicitamente como CVE-2026-9256.
O escopo afetado listado no artigo depthfirst inclui:
Para versões corrigidas e matriz de produtos, consulte o boletim oficial da F5 ou os avisos de segurança da distribuição. Mesmo que a versão esteja dentro do escopo afetado, normalmente é necessária uma sequência de configuração rewrite específica para acionar a vulnerabilidade.
O script exibe simultaneamente a versão atual do NGINX e o resultado da verificação da configuração:
0.6.27 - 1.30.1 e configuração atingiu a sequência de risco: é obrigatório fazer upgrade do NGINX ou ajustar a configuração.0.6.27 - 1.30.1 mas configuração não atingiu a sequência de risco: upgrade recomendado, mas este scanner não encontrou a condição de acionamento na configuração.Digitalize diretamente a configuração completa do NGINX na máquina atual:
python3 scan_rift.py
O script irá executar:
nginx -T
Se o usuário atual não tiver permissão para ler a configuração completa, use sudo:
sudo python3 scan_rift.py
Também é possível digitalizar um arquivo de configuração já exportado:
python3 scan_rift.py /caminho/para/nginx-full.conf
Por exemplo, exporte a configuração primeiro e depois digitalize:
sudo nginx -T > nginx-full.conf
python3 scan_rift.py nginx-full.conf
Quando nenhuma sequência de risco é encontrada:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[+] No vulnerable CVE-2026-42945 sequences or CVE-2026-9256 patterns detected.
[Recommendation]: Current NGINX version is in the affected range, but no vulnerable config pattern was detected. Upgrade is recommended, but config risk was not found by this scanner.
Quando uma sequência suspeita é encontrada:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[!] VULNERABLE SEQUENCE FOUND (CVE-2026-42945):
Context: location ~ ^/api/(.*)$ {
[1. Rewrite With ?] rewrite ^/api/(.*)$ /internal?migrated=true;
[2. Follow-up $N] set $original_endpoint $1;
[Action Required]: Current NGINX version is affected and vulnerable config was found. Upgrade NGINX or adjust the reported rewrite pattern.
Quando um padrão suspeito de CVE-2026-9256 é encontrado:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[!] VULNERABLE PATTERN FOUND (CVE-2026-9256):
Context: location ^~ /wengine-auth-static/ {
[Rewrite Overlapping Captures] rewrite /wengine-auth-static/((.*)) /?$1$2 break;
[Context] arguments; overlapping refs: $1/$2
[Action Required]: Current NGINX version is affected and vulnerable config was found. Upgrade NGINX or adjust the reported rewrite pattern.
Depois de detectar um padrão, confirme manualmente se o contexto da configuração pode ser alcançado por requisições externas e atualize o NGINX ou ajuste a configuração o mais rápido possível.
rewrite/set em contextos como location, server, if, etc.$1, $2 após um rewrite com ?.^/((.*))$ combinado com ?$1$2.break como uma forma de evitar CVE-2026-9256; /?$1$2 break ainda será detectado.Este script é uma ferramenta de verificação estática de configuração, destinada a identificar rapidamente padrões de alto risco, e não equivale a uma validação de exploração de vulnerabilidade.
include ou configurações geradas dinamicamente podem afetar os resultados da verificação.