2024/04/08

HTTP/2 permite ataque DoS com uma única ligação

O HTTP/2 é mais evoluído que a versão original do protocolo HTTP, mas deixa os servidores vulneráveis a ataques DoS usando uma única ligação.

Tradicionalmente os ataques DoS (Denial of Service) envolvem fazer uma grande quantidade de pedidos de modo a saturar o servidor ao ponto de não conseguir funcionar normalmente. Tendo em conta a diferença de hardware dos computadores pessoais, ligações de internet, e da capacidade dos servidores, é algo que raramente se pode fazer com um único computador, tendo levado aos ataques DDoS (Distributed Denial of Service) que usam redes com centenas ou milhares de computadores e equipamentos infectados, que pode ser usados em conjunto pelo atacante para fazerem milhares de pedidos simultâneos ao alvo.

O problema é que com o HTTP/2, o desejo de versatilidade fez com que fosse permitido comunicar secções de dados de grandes dimensões em blocos fragmentados sinalizados com um código "CONTINUATION", e o ponto fulcral é que não foi definido nenhum limite para tal. Isso permite este ataque CONTINUATION Flood, que se limita a enviar uma secção interminável, com blocos contínuos que continuam até que o servidor acabe por dar algum tipo de erro.
A falha afecta grande parte dos sistemas HTTP/2, incluindo o Apache HTTP Server Project, nghttp2, Node.js, Go, Red Hat, SUSE Linux, e outros:
  • CVE-2024-27983: Affects Node.js HTTP/2 server. Sending a few HTTP/2 frames can cause a memory leak due to a race condition, leading to a potential DoS.
  • CVE-2024-27919: Affects Envoy's oghttp codec. Unlimited memory consumption due to not resetting a request when header map limits are exceeded.
  • CVE-2024-2758: Relates to Tempesta FW. Its rate limits are not effectively preventing empty CONTINUATION frames attacks, potentially allowing DoS.
  • CVE-2024-2653: Affects amphp/http. It collects CONTINUATION frames in an unbounded buffer, risking an OOM crash if the header size limit is exceeded.
  • CVE-2023-45288: Affects Go's net/http and net/http2 packages. Allows an attacker to send an arbitrarily large set of headers, causing excessive CPU consumption.
  • CVE-2024-28182: Involves an implementation using nghttp2 library, which continues to receive CONTINUATION frames, leading to a DoS without proper stream reset callback.
  • CVE-2024-27316: Affects Apache Httpd. Continuous stream of CONTINUATION frames without the END_HEADERS flag set can be sent, improperly terminating requests.
  • CVE-2024-31309: Affects Apache Traffic Server. HTTP/2 CONTINUATION DoS attack can cause excessive resource consumption on the server.
  • CVE-2024-30255: Affects Envoy versions 1.29.2 or earlier. Vulnerable to CPU exhaustion due to a flood of CONTINUATION frames, consuming significant server resources.

Para complicar, este tipo de ataque torna-se difícil de detectar por parte dos administradores de sistemas, já que os pedidos maliciosos não serão visíveis nos logs a não ser que o servidor tenha activado opções de análise avançadas, o que normalmente não acontece.

Torna-se de importância crítica aplicar as devidas correcções para que se fique protegido contra este ataque, que permite que qualquer equipamento básico ligado à internet possa interferir com o funcionamento de um servidor.

Sem comentários:

Enviar um comentário (problemas a comentar?)