Attacco Continuation flood che causa problemi ai server che utilizzano HTTP/2.0

Sono stati rivelati dettagli sulla tecnica di attacco "Continuation flood", che interessa varie implementazioni del protocollo HTTP/2, tra cui Apache httpd, Apache Traffic Server, Node.js, oghttp, Go net/http2, Envoy e nghttp2. La vulnerabilità può essere sfruttata per attacchi a server che supportano HTTP/2.0 e, a seconda dell'implementazione, porta all'esaurimento della memoria (interruzione dell'elaborazione delle richieste o crash dei processi) o a un elevato carico sulla CPU (rallentamento nell'elaborazione delle richieste). Secondo il ricercatore che ha scoperto la vulnerabilità, il problema identificato è più pericoloso rispetto alla vulnerabilità "Rapid Reset" trovata lo scorso anno, che è stata utilizzata per condurre i più grandi attacchi DDoS dell'epoca.

L'alto livello di pericolo è spiegato dal fatto che per compromettere il funzionamento сервера, causare un crash o una grave riduzione delle prestazioni è sufficiente inviare un flusso di richieste appositamente formattate da un normale computer. In alcuni casi, per eseguire l'attacco è sufficiente anche una sola connessione TCP. Inoltre, il traffico associato all'attacco non si distingue nei log rispetto alle normali richieste degli utenti.

La vulnerabilità è causata dalle peculiarità nella gestione dei frame HEADERS e CONTINUATION nelle richieste tramite il protocollo HTTP/2. I frame HEADERS sono utilizzati in HTTP/2 per trasmettere gli header HTTP, mentre i frame CONTINUATION servono per suddividere l'invio degli header HTTP in più fasi (ad esempio, quando gli header non possono essere inseriti in un singolo frame o quando inizialmente si devono inviare header che possono essere popolati in questa fase, per poi inviare ulteriormente gli header i cui valori non possono ancora essere determinati). Nel caso di invio multi-fase, inizialmente si invia un frame HEADERS senza il flag END_HEADERS, seguito da diversi frame CONTINUATION con ulteriori header, terminando con un frame CONTINUATION con il flag END_HEADERS.

Il metodo di attacco consiste nell'inviare un flusso ininterrotto di frame CONTINUATION senza impostare il flag END_HEADERS. Tale attività porta a inviare un un server numero elevato di header che il server memorizza in memoria fino a quando la memoria disponibile per il processo non viene esaurita. Per creare un alto carico sulla CPU, oltre all'esaurimento della memoria, l'attaccante può approfittare della compressione del contenuto dei frame CONTINUATION utilizzando il formato HPACK, la cui analisi richiede calcoli. Nelle implementazioni del protocollo HTTP/1.1, per proteggere contro l'inondazione dei server con header si utilizzava un limite sulla dimensione degli header e un timeout per il tempo di invio della connessione. Per HTTP/2, a causa della complessità del protocollo, molte implementazioni non hanno previsto simili metodi di protezione contro l'invio infinito di header.

La vulnerabilità è particolarmente pericolosa per gli utenti di Node.js (CVE-2024-27983), poiché questa implementazione consente di generare un crash inviando solo pochi frame al server. A causa di una condizione di race in Node.js, per attivare un crash mediante l'accertamento della verifica (Assert) è sufficiente chiudere le connessioni durante l'invio di un flusso incompleto di header (crash se, durante la chiusura delle connessioni, non è ancora arrivato un frame CONTINUATION con il flag END_HEADERS). La vulnerabilità è stata risolta in Node.js 18.20.1, 21.7.2 e 20.12.1, così come nelle versioni recenti delle librerie llhttp e undici. Nelle nuove versioni di Node.js è stata anche rimossa una vulnerabilità meno pericolosa (CVE-2024-27982) di tipo "request smuggling", che consente di infiltrarsi nel contenuto delle richieste di altri utenti tramite manipolazione del valore "Content Length", elaborate nello stesso thread tra frontend e backend.

Vulnerabilità legate alla gestione di CONTINUATION in altre implementazioni di HTTP/2.0:

  • oghttp (CVE-2024-27919) - consumo di memoria illimitato.
  • Tempesta FW (CVE-2024-2758) - violazione dei limiti.
  • Libreria PHP amphp/http, amphp/http-client e amphp/http-server (CVE-2024-2653) - consumo di memoria illimitato, fino ad esaurimento totale della memoria disponibile.
  • Pacchetto Go net/http (CVE-2023-45288) - generazione di un alto carico sulla CPU.
  • Libreria nghttp2 (CVE-2024-28182) - generazione di un denial of service.
  • Apache Httpd (CVE-2024-27316) - consumo eccessivo di memoria e creazione di carico sulla CPU.
  • Apache Traffic Server (CVE-2024-31309) - consumo eccessivo di risorse.
  • Envoy (CVE-2024-30255) - generazione di un alto carico sulla CPU (per un carico completo di un core CPU è necessario un flusso di 300Mbit/s).

Fonte: opennet.ru

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster