NGINX Rift: Falha Crítica de 18 Anos Permite RCE Sem Autenticação
NGINX Rift — CVE-2026-42945
Em 13 de maio de 2026, a F5 Networks e a plataforma de segurança depthfirst divulgaram coordenadamente uma vulnerabilidade crítica no NGINX apelidada de NGINX Rift. Trata-se de um bug de heap buffer overflow com 18 anos de idade — presente desde a versão 0.6.27 —, que permite execução remota de código (RCE) por um atacante não autenticado por meio de simples requisições HTTP.
CVE: CVE-2026-42945 (opens in a new tab)
CWE: CWE-122 — Heap-based Buffer Overflow
CVSS v4.0: 9.2 (Critical) —AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H
CVSS v3.1: 8.1 (High) —AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
Descoberto por: depthfirst (de forma autônoma)
Advisory F5: K000161019 (opens in a new tab)
O que é o NGINX Rift?
O NGINX é o servidor web mais utilizado no mundo, presente em front-ends, reverse proxies, load balancers, API gateways e controladores de ingress em Kubernetes. Uma falha explorável remotamente nele tem impacto massivo.
O NGINX Rift vive no módulo ngx_http_rewrite_module — embutido em toda build padrão do NGINX. O bug é ativado por um padrão de configuração muito comum: um rewrite com captura PCRE sem nome ($1, $2) combinado a uma string de substituição com ? (query string), seguido de outro rewrite, if ou set no mesmo escopo.
Quando esse padrão está presente, o NGINX calcula o tamanho do buffer de destino com um conjunto de premissas de escape e depois escreve nele com outro — corrompendo o heap de forma determinística. Os bytes escritos além da alocação são derivados da URI enviada pelo atacante, tornando a corrupção controlável.
Impacto técnico
- Acesso necessário: nenhum. Qualquer cliente HTTP pode disparar o bug.
- Efeito imediato: crash do worker process do NGINX (negação de serviço).
- Com ASLR desativado: execução remota de código no contexto do worker.
- Com ASLR ativado: requisições repetidas mantêm o worker em crash loop, degradando disponibilidade de todos os sites servidos pela instância.
- Vetor: plano de dados (request-handling path). Não há exposição do plano de controle.
Raiz técnica do bug
O problema está em src/http/ngx_http_script.c. O fluxo defeituoso é o seguinte:
- Quando o replacement do
rewritecontém?, a funçãongx_http_script_start_args_codesetae->is_args = 1no engine principal e nunca limpa essa flag. - Uma chamada posterior a
ngx_http_script_complex_value_coderecalcula o tamanho do destino com um sub-engine recém zerado, entãongx_http_script_copy_capture_len_codemede a captura em bytes brutos. - A cópia real roda no engine principal, que ainda tem
is_args = 1— fazendongx_http_script_copy_capture_codere-escapar a captura viangx_escape_urino modoNGX_ESCAPE_ARGS. - Caracteres como
+,%e&expandem dois bytes extras cada. O buffer foi dimensionado para o tamanho bruto — a escrita passa da alocação.
Resultado: heap overflow determinístico, moldado pelo conteúdo da URI do atacante.
Produtos e versões afetados
| Produto | Versões vulneráveis |
|---|---|
| NGINX Open Source | 0.6.27 – 1.30.0 |
| NGINX Plus | R32 – R36 |
| NGINX Instance Manager | 2.16.0 – 2.21.1 |
| F5 WAF for NGINX | 5.9.0 – 5.12.1 |
| NGINX App Protect WAF | 4.9.0 – 4.16.0 e 5.1.0 – 5.8.0 |
| F5 DoS for NGINX | 4.8.0 |
| NGINX App Protect DoS | 4.3.0 – 4.7.0 |
| NGINX Gateway Fabric | 1.3.0 – 1.6.2 e 2.0.0 – 2.5.1 |
| NGINX Ingress Controller | 3.5.0 – 3.7.2, 4.0.0 – 4.0.1 e 5.0.0 – 5.4.1 |
⚠️ Produtos não afetados: F5 Distributed Cloud, F5 Silverline, NGINX One Console, BIG-IP, BIG-IQ, F5OS, Traffix SDC e F5 AI Gateway.
Como verificar se você está exposto
# Verificar versão do NGINX instalada
nginx -v
# Procurar padrões vulneráveis na configuração
grep -rn 'rewrite' /etc/nginx/ | grep -E '\$[0-9]'A regra prática: se você tiver uma diretiva rewrite com captura sem nome ($1, $2) e a string de substituição conter ?, e for seguida de outro rewrite, if ou set no mesmo bloco — você está exposto.
Remediação
Ação recomendada: atualizar
| Produto | Versão corrigida |
|---|---|
| NGINX Open Source | 1.31.0 ou 1.30.1 |
| NGINX Plus R36 | R36 P4 |
| NGINX Plus R32 | R32 P6 |
Após o upgrade, reinicie o NGINX para que os workers recarreguem o binário corrigido:
sudo systemctl restart nginx
# ou
sudo nginx -s reloadMitigação temporária (se não puder atualizar agora)
Substitua capturas sem nome por capturas com nome em todas as diretivas rewrite afetadas.
Configuração vulnerável:
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;Configuração mitigada:
rewrite ^/users/(?<user_id>[0-9]+)/profile/(?<section>.*)$ /profile.php?id=$user_id&tab=$section last;A diferença: capturas nomeadas ((?<nome>...)) eliminam o caminho de código defeituoso no ngx_http_script_copy_capture_code.
Linha do tempo
| Data | Evento |
|---|---|
| ~2007 | Bug introduzido no NGINX (v0.6.27) |
| 2026 | Descoberto autonomamente pela plataforma depthfirst |
| 13/05/2026 | F5 publica advisory coordenado com patch (K000161019 (opens in a new tab)) |
| 13/05/2026 | CVE-2026-42945 registrado no NVD (NIST (opens in a new tab)) |
| 29/05/2026 | Webinar técnico depthfirst — Securing low level code: NGINX Rift |
Exploração ativa
Até a data de publicação deste post, a depthfirst não identificou exploração ativa na natureza. O advisory foi divulgado de forma coordenada com o lançamento do patch. Isso não significa que exploits públicos não surjam em breve — dado o impacto e a ampla adoção do NGINX, a janela de tempo para patching é crítica.
Referências
- depthfirst — NGINX Rift (página oficial) (opens in a new tab)
- depthfirst — Writeup técnico completo (opens in a new tab)
- F5 Security Advisory — K000161019 (opens in a new tab)
- NVD — CVE-2026-42945 (opens in a new tab)
- MITRE CWE-122 — Heap-based Buffer Overflow (opens in a new tab)