Una nuova ricerca condotta dall'esperto di sicurezza Bartek Nowotarski ha portato alla luce una potenziale vulnerabilità nel protocollo HTTP/2. Conosciuto come il Diluvio CONTINUAZIONE, questo exploit consente agli aggressori di condurre negazione del servizio (DoS) attacchi inondando un server con frame CONTINUATION.
Spiegazione della vulnerabilità CONTINUATION Flood
Il problema risiede nel modo in cui le implementazioni HTTP/2 gestiscono i frame CONTINUATION all'interno di un singolo flusso. Molte implementazioni non riescono a limitare o disinfettare adeguatamente il numero di frame CONTINUATION inviati, consentendo agli aggressori di sopraffare un server con un flusso di frame che può causare l'esaurimento della memoria o arresti anomali.
HTTP/2, come il suo predecessore HTTP/1, utilizza i campi di intestazione all'interno delle richieste e delle risposte. Queste intestazioni sono serializzate in blocchi di intestazione, che vengono poi trasmessi come frammenti di blocco all'interno di frame CONTINUATION.
Come è possibile sfruttare la vulnerabilità
Gli aggressori possono sfruttare questa vulnerabilità inviando un flusso continuo di frame CONTINUATION senza il flag END_HEADERS impostato, causando l'analisi e l'archiviazione da parte del server di una quantità eccessiva di dati di intestazione in memoria.
Questa vulnerabilità rappresenta una grave minaccia, poiché una singola macchina o una connessione TCP possono interrompere la disponibilità del server, portando a arresti anomali o peggioramento delle prestazioni. L'attacco potrebbe non essere visibile nei log di accesso HTTP, rendendo difficile il rilevamento.
Implementazioni interessate
Sono interessate diverse implementazioni HTTP/2, inclusi progetti come Apache HTTP Server, Node.js, e Golang. Si consiglia agli utenti di aggiornare il software interessato per mitigare i rischi. Se una correzione non è disponibile, disabilitare temporaneamente HTTP/2 può fornire protezione contro questo exploit.
Di seguito sono riportati più elenchi CVE che evidenziano la vulnerabilità in varie implementazioni, come da Centro di Coordinamento CERT consultivo.
CVE-2024-27983
Un utente malintenzionato può rendere non disponibile il server HTTP/2 Node.js inviando una quantità limitata di pacchetti di frame HTTP/2 contenenti alcuni frame HTTP/2. Il difetto può lasciare dati all'interno nghttp2 memoria dopo un ripristino. Ciò potrebbe accadere quando le intestazioni con frame HTTP/2 CONTINUATION vengono inviate al server e la connessione TCP viene chiusa improvvisamente dal client, attivando il distruttore Http2Session mentre i frame di intestazione sono ancora in fase di elaborazione, causando una condizione di gara.
CVE-2024-27919
Dell'inviato oghttp il codec non riesce a reimpostare una richiesta quando vengono superati i limiti della mappa di intestazione. Ciò consente a un utente malintenzionato di inviare una sequenza di frame CONTINUATION senza il bit END_HEADERS impostato, portando ad un consumo illimitato di memoria.
CVE-2024-2758
I limiti di velocità del FW Tempesta non sono abilitati per impostazione predefinita. Sono impostati troppo grandi per catturare attacchi con frame CONTINUATION vuoti o troppo piccoli per gestire in modo appropriato le normali richieste HTTP.
CVE-2024-2653
amphp/http raccoglie i frame HTTP/2 CONTINUATION in un buffer illimitato e non controlla il limite della dimensione dell'intestazione finché non riceve il flag END_HEADERS, con conseguente memoria esaurita (OOM) schianto. amphp/http-client e amphp/server-http sono influenzati indirettamente se utilizzati con una versione senza patch di amphp/http. Versioni precedenti di amphp/http-client con supporto HTTP/2 (v4.0.0-rc10 a 4.0.0) sono anche direttamente interessati.
CVE-2023-45288
I pacchetti Go rete/http e rete/http2 non limitare il numero di frame CONTINUATION letti per una richiesta HTTP/2, consentendo a un utente malintenzionato di fornire un set di intestazioni eccessivamente grande per una singola richiesta, portando ad un consumo eccessivo della CPU.
CVE-2024-28182
Un'implementazione che utilizza il file nghttp2 la libreria continuerà a ricevere frame CONTINUATION e non richiamerà l'applicazione per consentire la visibilità di queste informazioni prima di reimpostare il flusso, con conseguente a Negazione del servizio (DoS) vulnerabilità.
CVE-2024-27316
I frame HTTP/2 CONTINUATION senza il flag END_HEADERS impostato possono essere inviati continuamente da un utente malintenzionato a un'implementazione Apache Httpd, che non riesce a risolvere anticipatamente la richiesta.
CVE-2024-31309
Un attacco DoS HTTP/2 CONTINUATION può far sì che Apache Traffic Server consumi più risorse sul server. Versioni da 8.0.0 attraverso 8.1.9 e da 9.0.0 attraverso 9.2.3 sono colpiti.
CVE-2024-30255
Lo stack di protocolli HTTP/2 nelle versioni Envoy 1.29.2 o precedente è vulnerabile all'esaurimento della CPU a causa di un'ondata di frame CONTINUATION. Il codec HTTP/2 di Envoy consente al client di inviare un numero illimitato di frame CONTINUATION, anche dopo aver superato i limiti della mappa di intestazione di Envoy. Ciò consente a un utente malintenzionato di inviare una sequenza di frame CONTINUATION senza il bit END_HEADERS impostato, causando un consumo approssimativo dell'utilizzo della CPU 1 core per 300 Mbit/s di traffico.