È stata ribattezzata CONTINUATION Flood la vulnerabilità del protocollo HTTP/2 portata alla luce da recenti ricerche: qualora venisse sfruttata, potrebbe condurre attacchi di tipo Denial of Service (DoS) e causare il crash di server web tramite una singola connessione TCP in molte implementazioni del protocollo HTTP.
Il cuore del problema risiede nel modo in cui vengono utilizzati i frame CONTINUATION, una componente essenziale del protocollo che consente la frammentazione dei blocchi di dati trasmessi tra client e server al fine di migliorare le prestazioni di trasmissione.
Se mal gestita, questa componente può aprire la porta a gravi minacce alla stabilità dei server.
La sua scoperta è stata accreditata al ricercatore di sicurezza Bartek Nowotarski, che l’ha prontamente segnalata lo scorso 25 gennaio 2024 al CERT Coordination Center (CERT/CC).
Indice degli argomenti
Dettagli della vulnerabilità CONTINUATION Flood
Ricordiamo che il protocollo HTTP/2 è stato introdotto nel 2015 e rappresenta un’evoluzione del precedente protocollo HTTP, concepito per ottimizzare le prestazioni web grazie all’introduzione di una struttura binaria per una trasmissione dati più efficiente, il multiplexing per consentire molteplici richieste e risposte su una singola connessione, e la compressione degli header per ridurne l’overhead.
In normali condizioni di funzionamento, i frame CONTINUATION vengono inviati in un determinato ordine, seguendo il flusso delle intestazioni dei pacchetti dati. Ogni frame ha, inoltre, il flag END_HEADERS impostato in maniera tale da indicare se il frame corrente contiene o meno l’ultima parte delle intestazioni dello stream di dati corrente.
Nel caso in cui tale flag non dovesse essere impostato, il dispositivo di destinazione della trasmissione dati attende ulteriori frame di tipo CONTINUATION per completare la comunicazione ed evitare così di interromperla.
Secondo quanto scoperto da Nowotarski, i frame CONTINUATION, tipicamente utilizzati per concatenare flussi di dati divisi in blocchi durante la trasmissione, possono essere inviati in sequenze estremamente lunghe in assenza di adeguate verifiche, sfruttando la mancata impostazione del flag END_HEADERS.
Questo significa che un eventuale abuso di questa caratteristica potrebbe consentire a un attaccante di inviare frame opportunamente predisposti che, sebbene inutili al completamento della trasmissione dati, verrebbero comunque processati dal dispositivo target comportando situazioni di compromissione della disponibilità del servizio per esaurimento della memoria (OOM) o esaurimento delle risorse CPU sul dispositivo di destinazione.
Una condotta, questa, che potrebbe evidentemente condurre a interruzioni del servizio dei server per esaurimento della memoria o delle risorse CPU, a seguito dell’elaborazione di questi frame.
CONTINUATION Flood: allarme per i system administrator
Con differenti ID CVE, la vulnerabilità CONTINUATION Flood interessa diversi prodotti di rete che i rispettivi vendor stanno velocemente cercando di aggiornare.
Come riportato nel bollettino di sicurezza del CERT-CC, ciascuna di queste varianti della vulnerabilità CONTINUATION Flood corrisponde a differenti implementazioni del protocollo HTTP/2 e consentono vari livelli di attacchi di negazione del servizio, tra cui perdite e consumo di memoria o esaurimento della CPU:
- CVE-2024-27983: colpisce il server HTTP/2 di Node.js. L’invio di alcuni frame HTTP/2 può causare una perdita di memoria dovuta a una condizione di conflitto, con conseguente potenziale DoS.
- CVE-2024-27919: colpisce il codec oghttp di Envoy Proxy. Le conseguenze di uno sfruttamento sono il consumo di memoria illimitato dovuto alla mancata reimpostazione di una richiesta quando vengono superati i limiti della mappa delle intestazioni.
- CVE-2024-2758: si riferisce a Tempesta FW, una particolare implementazione del protocollo HTTP/2 i cui limiti di velocità non impediscono efficacemente gli attacchi di CONTINUATION Flood vuoti, consentendo potenzialmente il DoS.
- CVE-2024-2653: colpisce amphp/http. Raccoglie i frame CONTINUATION in un buffer non limitato, con il rischio di un crash OOM se viene superato il limite della dimensione dell’intestazione.
- CVE-2023-45288: colpisce i pacchetti net/http e net/http2 di Go. Consente a un utente malintenzionato di inviare un insieme arbitrariamente grande di intestazioni, causando un consumo eccessivo di CPU.
- CVE-2024-28182: espone un’implementazione che utilizza la libreria nghttp2, che continua a ricevere frame di CONTINUATION senza un corretto callback di reset dello stream, portando quindi a un DoS.
- CVE-2024-27316: colpisce Apache Httpd. È possibile inviare un flusso continuo di frame CONTINUATION senza il flag END_HEADERS impostato, terminando impropriamente le richieste.
- CVE-2024-31309: colpisce il server di traffico Apache. La vulnerabilità CONTINUATION Flood, in questo caso, può causare un consumo eccessivo di risorse sul server.
- CVE-2024-30255: colpisce le versioni di Envoy 1.29.2 o precedenti. Vulnerabile all’esaurimento della CPU a causa di una marea di frame di CONTINUATION, che consumano notevoli risorse del server.
Come mitigare il rischio
Così come riportato anche nel bollettino di sicurezza del CERT-CC, la vulnerabilità CONTINUATION Flood risulta essere più grave delle vulnerabilità sfruttate in attacchi precedenti, come l’HTTP/2 Rapid Reset emerso lo scorso ottobre, ponendo in evidenza la difficoltà per gli amministratori di sistema di diagnosticare e mitigare il problema senza una profonda conoscenza di HTTP/2.
Questo perché le richieste malevole potrebbero non essere visibili nei log di accesso se l’analisi avanzata dei frame non è abilitata sul server, condizione piuttosto comune.
Gli amministratori di sistema sono dunque incoraggiati ad aggiornare il software interessato all’ultima versione disponibile per mitigare le potenziali minacce. In assenza di una soluzione, si consiglia di considerare la disabilitazione temporanea di HTTP/2 sul server.
In attesa di aggiornamenti specifici rilasciati dai singoli vendor dei prodotti afflitti dalla vulnerabilità CONTINUATION Flood, è opportuno monitorare il traffico HTTP/2 e applicare – in caso di inaspettati utilizzi eccessivi della memoria e/o della CPU dei web server e bilanciatori di carico applicativi – restrizioni selettive fino alla disabilitazione della specifica versione del protocollo se utile a ripristinare l’operatività.
Infine, per avere maggiore visibilità degli eventi è possibile abilitare l’analisi avanzata dei frame (tipicamente disabilitata di default) e utilizzare strumenti aggiuntivi di analisi del traffico che, in caso di attacco, dovrebbe far emergere una inattesa rarità di END_HEADERS.
Da tener presente, però, che quest’ultima modalità operative aumenta tipicamente il carico di lavoro del sistema, pertanto, se ne consiglia un utilizzo per il solo tempo limitato all’analisi e alla definizione di eventuali contromisure.
Cosa impariamo dall’analisi di CONTINUATION Flood
La recente scoperta del ricercatore Bartek Nowotarski è l’occasione giusta per sottolineare ancora una volta, qualora ce ne fosse bisogno, l’importanza di una gestione accurata e della costante vigilanza nella sicurezza delle implementazioni di protocolli complessi come HTTP/2, per proteggere l’integrità e la disponibilità delle risorse web essenziali nell’era digitale.
È cruciale, dunque, procedere con l’aggiornamento dei server e delle librerie impattate prima che tali vulnerabilità vengano sfruttate attivamente.