Uma nova pesquisa conduzida pelo especialista em segurança Bartek Nowotarski descobriu uma vulnerabilidade potencial no protocolo HTTP/2. Conhecida como Inundação de CONTINUAÇÃO, esta exploração permite que os invasores conduzam negação de serviço (DoS) ataques inundando um servidor com quadros CONTINUATION.
A Vulnerabilidade de Inundação CONTINUAÇÃO Explicada
O problema está em como as implementações HTTP/2 lidam com quadros CONTINUATION em um único fluxo. Muitas implementações não conseguem limitar ou higienizar adequadamente o número de quadros CONTINUATION enviados, permitindo que invasores sobrecarreguem um servidor com um fluxo de quadros que pode causar esgotamento de memória ou travamentos.
HTTP/2, como seu antecessor HTTP/1, usa campos de cabeçalho em solicitações e respostas. Esses cabeçalhos são serializados em blocos de cabeçalho, que são então transmitidos como fragmentos de bloco dentro de quadros de CONTINUAÇÃO.
Como a vulnerabilidade pode ser explorada
Os invasores podem explorar esta vulnerabilidade enviando um fluxo contínuo de quadros CONTINUATION sem o sinalizador END_HEADERS definido, fazendo com que o servidor analise e armazene uma quantidade excessiva de dados de cabeçalho na memória.
Esta vulnerabilidade representa uma ameaça grave, como uma única máquina ou conexão TCP pode interromper a disponibilidade do servidor, levando a falhas ou degradação do desempenho. O ataque pode não estar visível nos logs de acesso HTTP, tornando a detecção um desafio.
Implementações afetadas
Várias implementações HTTP/2 são afetadas, incluindo projetos como Apache HTTP Server, Node.js, e Golang. Os usuários são aconselhados a atualizar o software afetado para mitigar os riscos. Se uma correção não estiver disponível, desabilitar temporariamente o HTTP/2 pode fornecer proteção contra esta exploração.
Aqui estão várias listagens de CVE destacando a vulnerabilidade em várias implementações, de acordo com o Centro de Coordenação CERT consultivo.
CVE-2024-27983
Um invasor pode tornar o servidor Node.js HTTP/2 indisponível enviando uma quantidade limitada de pacotes de quadros HTTP/2 contendo alguns quadros HTTP/2. A falha pode deixar dados em nghttp2 memória após um reset. Isso pode acontecer quando cabeçalhos com quadros HTTP/2 CONTINUATION são enviados ao servidor e a conexão TCP é fechada abruptamente pelo cliente, acionando o destruidor Http2Session enquanto os quadros de cabeçalho ainda estão sendo processados, causando uma condição de corrida.
CVE-2024-27919
Enviado oghttp codec não consegue redefinir uma solicitação quando os limites do mapa de cabeçalho são excedidos. Isso permite que um invasor envie uma sequência de quadros CONTINUATION sem o bit END_HEADERS definido, levando ao consumo ilimitado de memória.
CVE-2024-2758
Os limites de taxa Tempesta FW não estão habilitados por padrão. Eles são definidos muito grandes para capturar ataques de quadros CONTINUATION vazios ou muito pequenos para lidar adequadamente com solicitações HTTP normais..
CVE-2024-2653
amphp/http coleta quadros HTTP/2 CONTINUATION em um buffer ilimitado e não verifica o limite de tamanho do cabeçalho até receber o sinalizador END_HEADERS, resultando em falta de memória (OOM) batida. amphp/http-cliente e amphp/http-servidor são indiretamente afetados se usados com uma versão sem patch de amphp/http. Versões anteriores de amphp/http-client com suporte HTTP/2 (v4.0.0-rc10 para 4.0.0) também são diretamente afetados.
CVE-2023-45288
Os pacotes Go rede/http e rede/http2 não limite o número de quadros CONTINUATION lidos para uma solicitação HTTP/2, permitindo que um invasor forneça um conjunto excessivamente grande de cabeçalhos para uma única solicitação, levando ao consumo excessivo de CPU.
CVE-2024-28182
Uma implementação usando o nghttp2 a biblioteca continuará recebendo quadros CONTINUATION e não retornará a chamada para o aplicativo para permitir a visibilidade dessas informações antes de redefinir o fluxo, resultando em um Negação de serviço (DoS) vulnerabilidade.
CVE-2024-27316
Quadros HTTP/2 CONTINUATION sem o sinalizador END_HEADERS definido podem ser enviados continuamente por um invasor para uma implementação Apache Httpd, que não consegue encerrar a solicitação antecipadamente.
CVE-2024-31309
Um ataque DoS de CONTINUAÇÃO HTTP/2 pode fazer com que o Apache Traffic Server consuma mais recursos no servidor. Versões de 8.0.0 através 8.1.9 e de 9.0.0 através 9.2.3 são afetados.
CVE-2024-30255
A pilha de protocolos HTTP/2 nas versões do Envoy 1.29.2 ou anterior é vulnerável ao esgotamento da CPU devido a uma inundação de quadros CONTINUATION. O codec HTTP/2 do Envoy permite que o cliente envie um número ilimitado de quadros CONTINUATION, mesmo depois de exceder os limites do mapa de cabeçalho do Envoy. Isso permite que um invasor envie uma sequência de quadros CONTINUATION sem o bit END_HEADERS definido, fazendo com que a utilização da CPU consuma aproximadamente 1 núcleo por 300 Mbit/s de tráfego.