Sono state identificate 2 vulnerabilità DoS in varie implementazioni del protocollo HTTP/8

Ricercatori di Netflix e Google identificato Esistono otto vulnerabilità in varie implementazioni del protocollo HTTP/2 che possono causare una negazione del servizio inviando un flusso di richieste di rete in un determinato modo. Il problema riguarda in una certa misura la maggior parte dei server HTTP con supporto HTTP/2 e fa sì che il lavoratore esaurisca la memoria o crei un carico eccessivo sulla CPU. Gli aggiornamenti che eliminano le vulnerabilità sono già presentati in nginx 1.16.1/1.17.3 и H2O2.2.6ma per ora non disponibile per Apache httpd e altri prodotti.

I problemi derivavano dalle complicazioni introdotte nel protocollo HTTP/2 associate all'uso di strutture binarie, un sistema per limitare i flussi di dati all'interno delle connessioni, un meccanismo di prioritizzazione del flusso e la presenza di messaggi di controllo simili a ICMP che operano sulla connessione HTTP/2. livello (ad esempio, ping, ripristino e impostazioni del flusso). Molte implementazioni non limitavano adeguatamente il flusso dei messaggi di controllo, non gestivano in modo efficiente la coda di priorità durante l'elaborazione delle richieste o utilizzavano implementazioni non ottimali degli algoritmi di controllo del flusso.

La maggior parte dei metodi di attacco identificati si riducono all'invio di determinate richieste al server, che portano alla generazione di un gran numero 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 per l'elaborazione delle connessioni di rete e, a seconda delle funzionalità di implementazione, porta all'esaurimento della memoria disponibile o delle risorse della CPU.

Vulnerabilità identificate:

  • CVE-2019-9511 (Data Dribble) - un utente malintenzionato richiede una grande quantità di dati in più thread manipolando la dimensione della finestra scorrevole e la priorità del thread, costringendo il server a mettere in coda i dati in blocchi da 1 byte;
  • CVE-2019-9512 (Ping Flood): un utente malintenzionato avvelena continuamente i messaggi ping su una connessione HTTP/2, causando l'allagamento della coda interna delle risposte inviate dall'altra parte;
  • CVE-2019-9513 (Resource Loop): un utente malintenzionato crea più thread di richiesta e modifica continuamente la priorità dei thread, causando il mescolamento dell'albero delle priorità;
  • CVE-2019-9514 (Reset Flood): un utente malintenzionato crea più thread
    e invia una richiesta non valida attraverso ciascun thread, facendo sì che il server invii frame RST_STREAM, ma non li accetta per riempire la coda di risposta;

  • CVE-2019-9515 (Settings Flood) - l'attaccante invia un flusso di frame "SETTINGS" vuoti, in risposta al quale il server deve confermare la ricezione di ciascuna richiesta;
  • CVE-2019-9516 (0-Length Headers Leak) – un utente malintenzionato invia un flusso di intestazioni con un nome nullo e un valore nullo e il server alloca un buffer in memoria per archiviare ciascuna intestazione e non la rilascia fino al termine della sessione ;
  • CVE-2019-9517 (Buffering dei dati interni): si apre l'aggressore
    Finestra scorrevole HTTP/2 che consente al server di inviare dati senza restrizioni, ma mantiene chiusa la finestra TCP, impedendo che i dati vengano effettivamente scritti nel socket. Successivamente, l'aggressore invia richieste che richiedono una risposta di grandi dimensioni;

  • CVE-2019-9518 (Empty Frames Flood) - Un utente malintenzionato invia un flusso di frame di tipo DATA, HEADERS, CONTINUATION o PUSH_PROMISE, ma con payload vuoto e nessun flag di terminazione del flusso. Il server impiega un tempo di elaborazione di ogni frame, sproporzionato rispetto alla larghezza di banda consumata dall'aggressore.

Fonte: opennet.ru

Aggiungi un commento