I ricercatori delle aziende Netflix e Google hanno identificato otto vulnerabilità in diverse implementazioni del protocollo HTTP/2, che consentono di causare un’interruzione del servizio inviando un flusso di richieste di rete formattate in un certo modo. I problemi interessano, in misura variabile, la maggior parte dei server HTTP che supportano HTTP/2 e portano al consumo della memoria disponibile per il lavoro o a un carico eccessivo sulla CPU. Gli aggiornamenti per la risoluzione delle vulnerabilità sono già stati rilasciati in e , ma al momento per Apache httpd e .
I problemi sono stati causati da complessità introdotte nel protocollo HTTP/2, legate all'uso di strutture binarie, al sistema di limitazione dei flussi di dati all'interno delle connessioni, al meccanismo di priorità dei flussi e alla presenza di messaggi di controllo simili a ICMP che operano a livello di connessione HTTP/2 (ad esempio, operazioni di ping, reset e configurazione del flusso). Molte implementazioni non limitavano adeguatamente il flusso dei messaggi di controllo, gestivano in modo inefficace la coda delle priorità durante l'elaborazione delle richieste o utilizzavano implementazioni subottimali degli algoritmi di gestione del flusso.
La maggior parte dei metodi di attacco identificati consiste nell'inviare al server specifiche richieste, che portano a una generazione elevata di risposte. Se il client non legge i dati dal socket e non chiude la connessione, la coda di buffering delle risposte sul lato server si riempie continuamente. Questo comportamento crea un carico sul sistema di gestione delle code delle connessioni di rete e, a seconda delle specifiche dell'implementazione, porta al consumo della memoria o delle risorse CPU disponibili.
Vulnerabilità identificate:
- CVE-2019-9511 (Data Dribble) — l'attaccante richiede un ampio volume di dati su più flussi, manipolando la dimensione della finestra e la priorità del flusso, costringendo il server a mettere i dati in coda in blocchi di 1 byte;
- CVE-2019-9512 (Ping Flood) — l'attaccante inonda continuamente con messaggi ping attraverso la connessione HTTP/2, innescando il riempimento della coda interna delle risposte inviate dall'altra parte;
- CVE-2019-9513 (Resource Loop) — l'attaccante crea più flussi di richieste e modifica continuamente la priorità dei flussi, causando una mescolanza dell'albero delle priorità;
- CVE-2019-9514 (Reset Flood) — l'attaccante crea più flussi
e invia ogni stream una richiesta non corretta, causando l'invio da parte del server di pacchetti RST_STREAM, ma non li accetta per riempire la coda delle risposte; - CVE-2019-9515 (Attacco Flood delle Impostazioni) — l'attaccante invia uno stream di pacchetti vuoti "SETTINGS", ai quali il server è obbligato a confermare la ricezione di ogni richiesta;
- CVE-2019-9516 (Fuga di Intestazioni di Lunghezza 0) — l'attaccante invia uno stream di intestazioni con nome nullo e valore nullo, e il server riserva un buffer in memoria per memorizzare ogni intestazione senza liberarlo fino alla fine della sessione;
- CVE-2019-9517 (Buffering Dati Interni) — l'attaccante apre
una finestra scorrevole HTTP/2 per inviare dati al server senza limitazioni, ma tiene chiusa la finestra TCP, impedendo così di scrivere effettivamente dati nel socket. Successivamente, l'attaccante invia richieste che richiedono una grande risposta; - CVE-2019-9518 (Flood di Frame Vuoti) — l'attaccante invia uno stream di pacchetti di tipo DATA, HEADERS, CONTINUATION o PUSH_PROMISE, ma con contenuto utile vuoto e senza il flag di chiusura del flusso. Il server impiega tempo per elaborare ogni pacchetto, in modo proporzionato alla banda occupata dall'attaccante.
Fonte: opennet.ru
