ReDoS via o cabeçalho Cache-Control no Symfony e Laravel

O pesquisador Martino Spagnuolo demonstrou como uma expressão regular em symfony/http-foundation pode ser explorada para esgotar os recursos de aplicações PHP construídas sobre Symfony, Laravel, Drupal e outras plataformas. A vulnerabilidade, CVE-2026-108082, pode ser explorada sem autenticação: um atacante só precisa enviar uma requisição HTTP comum com um cabeçalho especialmente criado. Uma única requisição pode manter um núcleo de CPU ocupado por vários segundos, enquanto múltiplas requisições concorrentes podem tornar a aplicação indisponível.
A causa raiz está em HeaderUtils::split(), que analisa valores de cabeçalhos HTTP. O fragmento de regex [^",=]+ permite espaços dentro de um token, enquanto o lookbehind negativo (?<!\s) impede que uma correspondência termine com um caractere de espaço em branco. Uma string composta por a seguida de 17 espaços e ,x força o motor de regex a explorar aproximadamente 2^17 maneiras de particionar os espaços antes de rejeitar a correspondência. Em um teste do mundo real, uma única requisição levou 12,7 segundos para ser processada.
A vulnerabilidade pode ser acionada por meio do cabeçalho Cache-Control, que o Symfony analisa automaticamente ao construir o objeto de requisição, antes do roteamento e da autenticação. Isso inclui requisições que acabam recebendo respostas 404 ou 401. O Laravel analisa os cabeçalhos três vezes durante a inicialização da requisição, aumentando a sobrecarga de processamento. Atrás do nginx, múltiplos cabeçalhos Cache-Control podem ser mesclados em um único valor sem verificar novamente o comprimento combinado. Em um teste de laboratório usando Laravel atrás do nginx, quatro cabeçalhos de aproximadamente 8 KB cada resultaram em um tempo de processamento de requisição de quase nove segundos. Um teste envolvendo 100 requisições com nível de concorrência oito causou aumento nos tempos de resposta, timeouts e erros 504.
A vulnerabilidade afeta symfony/http-foundation da versão 4.1 até as correções de segurança de outubro de 2026. As versões corrigidas recomendadas são 6.4.48, 7.4.21 e 8.1.9, dependendo do branch mantido. As correções iniciais — 5.4.54, 6.4.46, 7.4.19 e 8.1.7 — resolveram o problema de ReDoS, mas introduziram regressões em outras funcionalidades. O branch 5.4 não é mais suportado, e o advisory não identifica uma versão corrigida subsequente para esse branch.
Como mitigação temporária, administradores podem rejeitar requisições com cabeçalhos Cache-Control anormalmente longos, por exemplo usando uma regra de WAF que limite seu comprimento a 50–100 bytes, conforme sugerido pelo pesquisador.
Vulnerabilidades
Pesquisadores
Fornecedor
Produto