Nuove ricerche hanno scoperto che il frame CONTINUATION nel protocollo HTTP/2 può essere sfruttato per condurre attacchi di denial-of-service (DoS), da non convondere con la terza versione dello stesso protocollo che è tutt’altro tipo di cosa.
Quali sono le problematiche che causano vulnerabilità e possibili attacchi DoS del protocollo HTTP/2
La tecnica è stata denominata HTTP/2 CONTINUATION Flood dal ricercatore di sicurezza Bartek Nowotarski, che ha segnalato il problema al CERT Coordination Center (CERT/CC) il 25 gennaio 2024.
“Molte implementazioni di HTTP/2 non limitano o sanificano correttamente la quantità di frame CONTINUATION inviati all’interno di un singolo flusso“, ha dichiarato CERT/CC in una nota informativa del 3 aprile 2024.
CERT/CC ha successivamente aggiunto che “Un attaccante che può inviare pacchetti a un server di destinazione può inviare una serie di frame CONTINUATION che non verranno aggiunti all’elenco degli header in memoria, ma verranno comunque elaborati e decodificati dal server o verranno aggiunti all’elenco degli header, causando un arresto anomalo per mancanza di memoria (OOM)“.
Come nell’HTTP/1, anche l’HTTP/2 utilizza campi di intestazione all’interno delle richieste e delle risposte; questi campi di intestazione possono comprendere elenchi di intestazioni, che a loro volta vengono serializzati e divisi in blocchi di intestazioni.
I blocchi di intestazioni vengono quindi divisi in frammenti di blocco e trasmessi all’interno di HEADER o di ciò che viene chiamato frame CONTINUATION.
“Il frame CONTINUATION (tipo=0x9) viene utilizzato per continuare una sequenza di frammenti di blocchi di intestazioni“, si legge nella documentazione per l’RFC 7540, e viene poi aggiunto “È possibile inviare qualsiasi numero di frame CONTINUATION, purché il frame precedente sia sullo stesso flusso e sia un frame HEADERS, PUSH_PROMISE o CONTINUATION senza il flag END_HEADERS impostato“.
L’ultimo frame contenente gli header avrà il flag END_HEADERS impostato, che segnala al punto terminale remoto che è la fine del blocco degli header.
Secondo Nowotarski, il CONTINUATION Flood è una classe di vulnerabilità all’interno di diverse implementazioni del protocollo HTTP/2 che rappresenta una minaccia più grave rispetto all’attacco Rapid Reset emerso nell’ottobre 2023.
“Una singola macchina (e in certi casi, una singola connessione TCP o un pugno di frame) ha il potenziale per interrompere l’accessibilità del server, con conseguenze che vanno dai blocchi del server a una sostanziale degradazione delle prestazioni“, ha detto il ricercatore. “Notevolmente, le richieste che costituiscono un attacco non sono visibili nei log di accesso HTTP“.
La vulnerabilità, nel suo nucleo, riguarda la gestione errata degli HEADER e dei multipli frame CONTINUATION che aprono la strada a una condizione di DoS.
In altre parole, un attaccante può avviare un nuovo flusso HTTP/2 contro un server di destinazione utilizzando un’implementazione vulnerabile e inviare HEADER e frame CONTINUATION senza impostare il flag END_HEADERS, creando un flusso infinito di intestazioni che il server HTTP/2 dovrebbe analizzare e memorizzare in memoria.
Anche se l’esito esatto varia a seconda dell’implementazione, gli impatti vanno dall’arresto immediato dopo l’invio di un paio di frame HTTP/2 e dal blocco per mancanza di memoria all’esaurimento della CPU, influenzando così l’accessibilità del server.
“L’RFC 9113 […] menziona molteplici problemi di sicurezza che possono sorgere se i frame CONTINUATION non sono gestiti correttamente“, ha detto Nowotarski, che ha successivamente aggiunto: “Allo stesso tempo, non menziona un caso specifico in cui i frame CONTINUATION vengono inviati senza il flag END_HEADERS finale che può avere ripercussioni sui server interessati“.
Il problema colpisce diversi progetti come amphp/http (CVE-2024-2653), Apache HTTP Server (CVE-2024-27316), Apache Tomcat (CVE-2024-24549), Apache Traffic Server (CVE-2024-31309), proxy Envoy (CVE-2024-27919 e CVE-2024-30255), Golang (CVE-2023-45288), il crate Rust h2, nghttp2 (CVE-2024-28182), Node.js (CVE-2024-27983) e Tempesta FW (CVE-2024-2758).
Si consiglia agli utenti di aggiornare il software interessato all’ultima versione per mitigare le potenziali minacce, pertanto, in assenza di una soluzione, si consiglia di considerare la temporanea disabilitazione di HTTP/2 sul server.