Uma nova pesquisa descobriu que o frame CONTINUATION no protocolo HTTP/2 pode ser explorado para realizar ataques de negação de serviço (DoS).
A técnica foi apelidada de HTTP/2 CONTINUATION Flood pelo pesquisador de segurança Bartek Nowotarski, que relatou o problema ao Centro de Coordenação CERT (CERT/CC) em 25 de janeiro de 2024.
"Muitas implementações do HTTP/2 não limitam ou higienizam adequadamente a quantidade de frames CONTINUATION enviados dentro de um único fluxo", disse o CERT/CC em um aviso em 3 de abril de 2024.
"Um atacante que pode enviar pacotes para um servidor de destino pode enviar um fluxo de frames CONTINUATION que não será anexado à lista de cabeçalhos na memória, mas ainda será processado e decodificado pelo servidor ou será anexado à lista de cabeçalhos, causando um travamento por falta de memória (OOM)."
Assim como no HTTP/1, o HTTP/2 utiliza campos de cabeçalho dentro de solicitações e respostas. Esses campos de cabeçalho podem compor listas de cabeçalhos, que por sua vez, são serializadas e divididas em blocos de cabeçalho. Os blocos de cabeçalho são então divididos em fragmentos de bloco e transmitidos dentro de frames HEADER ou o que é chamado de frames CONTINUATION.
"O frame CONTINUATION (tipo=0x9) é usado para continuar uma sequência de fragmentos de bloco de cabeçalho", diz a documentação do RFC 7540.
"Qualquer número de frames CONTINUATION pode ser enviado, contanto que o frame precedente esteja no mesmo fluxo e seja um frame HEADERS, PUSH_PROMISE ou CONTINUATION sem a flag END_HEADERS definida."
O último frame contendo cabeçalhos terá a flag END_HEADERS definida, o que sinaliza para o endpoint remoto que é o final do bloco de cabeçalho.
Segundo Nowotarski, o CONTINUATION Flood é uma classe de vulnerabilidades dentro de várias implementações do protocolo HTTP/2 que representam uma ameaça mais severa em comparação com o ataque Rapid Reset que veio à tona em outubro de 2023.
"Uma única máquina (e, em certas instâncias, uma única conexão TCP ou um punhado de frames) tem o potencial de perturbar a disponibilidade do servidor, com consequências que vão desde travamentos do servidor até uma degradação substancial de desempenho", disse o pesquisador. "Notavelmente, as solicitações que constituem um ataque não são visíveis nos registros de acesso HTTP."
A vulnerabilidade, em sua essência, tem a ver com o tratamento incorreto de HEADERS e múltiplos frames CONTINUATION que abrem caminho para uma condição de DoS.
Em outras palavras, um atacante pode iniciar um novo fluxo HTTP/2 contra um servidor de destino usando uma implementação vulnerável e enviar frames HEADERS e CONTINUATION sem a flag END_HEADERS definida, criando um fluxo interminável de cabeçalhos que o servidor HTTP/2 precisaria analisar e armazenar na memória.
Embora o resultado exato varie dependendo da implementação, os impactos vão desde travamento instantâneo após o envio de alguns frames HTTP/2 e travamento por falta de memória até exaustão da CPU, afetando assim a disponibilidade do servidor.
"RFC 9113 [...] menciona várias questões de segurança que podem surgir se os frames CONTINUATION não forem tratados corretamente", disse Nowotarski.
"Ao mesmo tempo, não menciona um caso específico em que frames CONTINUATION são enviados sem a flag final END_HEADERS, o que pode ter repercussões em servidores afetados."
O problema impacta vários projetos, como amphp/http (CVE-2024-2653), Apache HTTP Server (CVE-2024-27316), Apache Tomcat (CVE-2024-24549), Apache Traffic Server (CVE-2024-31309), Envoy proxy (CVE-2024-27919 e CVE-2024-30255), Golang (CVE-2023-45288), h2 Rust crate, nghttp2 (CVE-2024-28182), Node.js (CVE-2024-27983) e Tempesta FW (CVE-2024-2758).
Recomenda-se que os usuários atualizem o software afetado para a versão mais recente para mitigar possíveis ameaças. Na ausência de uma correção, é aconselhável considerar a desativação temporária do HTTP/2 no servidor.
Via - THN
Comments