Inundação de continuação, uma série de vulnerabilidades em implementações HTTP/2

vulnerabilidade

Se exploradas, essas falhas podem permitir que invasores obtenham acesso não autorizado a informações confidenciais ou geralmente causem problemas

Recentemente foram divulgadas informações sobre uma série de vulnerabilidades que afetam diversas implementações do protocolo HTTP/2, entre os quais estão os mais populares, incluindo Apache httpd, Apache Traffic Server, entre outros.

Nomeado como "Inundação de continuação", este método de ataque pode atingir servidores que suportam HTTP/2.0 e tem o potencial de esgotar a memória, interromper o processamento de solicitações ou causar alta carga de CPU, retardando o processamento de solicitações.

Inundação de continuação é considerado mais perigoso do que a vulnerabilidade “Rapid Reset” encontrada no ano passado, como permite interromper ou reduzir significativamente o desempenho do serviçor com um fluxo de solicitações especialmente projetadas, mesmo de um computador normal. Em alguns casos, um simples fluxo de conexão TCP pode ser suficiente para realizar o ataque. Além disso, o tráfego associado a este tipo de ataque não é facilmente detectável em registos de tráfego regulares.

É mencionado que a inundação de continuação reside no processamento dos quadros HEADERS e CONTINUATION em solicitações HTTP/2. Os quadros HEADERS são usados ​​para enviar cabeçalhos HTTP, enquanto os quadros CONTINUATION são usados ​​para dividir o envio de cabeçalhos HTTP em vários estágios, especialmente quando os cabeçalhos não cabem em um único quadro ou quando os cabeçalhos devem ser enviados em vários estágios. Ao manipular esses frames em certas combinações, a vulnerabilidade pode ser explorada. e lançar o ataque de "inundação de continuação".

O método de ataque "Inundação de continuação" baseia-se no envio de um fluxo contínuo de quadros CONTINUATION sem definir o sinalizador END_HEADERS, o que resulta no envio em massa de cabeçalhos ao servidor e pode esgotar a memória disponível para o processo. Além disso, para criar uma alta carga de CPU juntamente com o esgotamento da memória, um invasor pode usar a compactação do conteúdo dos quadros CONTINUATION usando o formato HPACK, que requer cálculos para análise.

Nas implementações do protocolo HTTP/1.1, foram aplicados limites no tamanho dos cabeçalhos e definir um tempo limite para conexões para proteção contra inundação do servidor com cabeçalhos. Porém, em HTTP/2, muitas implementações não forneciam métodos semelhantes de proteção devido à complexidade do protocolo.

A inundação de continuação é particularmente perigosa para usuários do Node.js (CVE-2024-27983), pois esta implementação pode falhar ao receber apenas alguns quadros enviados por um invasor. Devido às condições de corrida no Node.js, um invasor pode causar uma falha fechando conexões enquanto envia um fluxo de cabeçalho incompleto.

Abaixo estão uma lista de vulnerabilidades detectadas dentro das diferentes implementações:

  • CVE-2024-27983 (Node.js): Um invasor pode tornar o servidor Node.js HTTP/2 indisponível enviando um pequeno número de pacotes de quadros HTTP/2 com alguns quadros HTTP/2 dentro deles, o que pode causar uma condição de corrida.
  • CVE-2024-27919 (Enviado): O codec oghttp do Envoy não redefine uma solicitação quando os limites do mapa de cabeçalho são excedidos, permitindo que um invasor envie uma sequência de quadros CONTINUATION sem definir o bit END_HEADERS, causando consumo ilimitado de memória.
  • CVE-2024-2758 (Tempesta FW): Os limites de taxa do Tempesta FW não estão habilitados por padrão ou estão configurados incorretamente, o que pode levar ao consumo excessivo de recursos ou ao tratamento inadequado de solicitações HTTP.
  • CVE-2024-2653 (amphp/http): coletará quadros CONTINUATION HTTP/2 em um buffer ilimitado e não verificará o limite de tamanho do cabeçalho até receber o sinalizador END_HEADERS, o que pode causar uma falha no OOM.
  • CVE-2023-45288 (Acessar net/http e net/http2): Essas implementações não limitam o número de quadros CONTINUATION lidos para uma solicitação HTTP/2, o que pode causar consumo excessivo de CPU ao processar um grande conjunto de cabeçalhos.
  • CVE-2024-28182 (nghttp2): Uma implementação que usa a biblioteca nghttp2 continuará recebendo quadros CONTINUATION e não retornará a chamada ao aplicativo para permitir a visibilidade dessas informações antes de redefinir o fluxo, o que pode levar a um DoS.
  • CVE-2024-27316 (Apache Httpd): Um invasor pode enviar quadros HTTP/2 CONTINUATION sem o sinalizador END_HEADERS definido como um fluxo contínuo para uma implementação Apache Httpd, o que não encerrará adequadamente a solicitação antecipadamente.
  • CVE-2024-31309 (servidor de tráfego Apache): Um ataque DoS pode fazer com que o Apache Traffic Server consuma mais recursos no servidor.
  • CVE-2024-30255 (Enviado): A pilha do protocolo HTTP/2 nas versões 1.29.2 ou anteriores do Envoy é vulnerável ao esgotamento da CPU devido à inundação de quadros CONTINUATION.

Se você estiver interessado em saber mais sobre isso, você pode consultar os detalhes no link a seguir.