Výzkumníci z Netflixu a Google
Problémy vyplynuly z komplikací zavedených do protokolu HTTP/2 spojených s používáním binárních struktur, systémem pro omezování datových toků v rámci připojení, mechanismem upřednostňování toku a přítomností řídicích zpráv podobných ICMP fungujících na připojení HTTP/2. úroveň (například ping, reset a nastavení toku). Mnoho implementací řádně neomezovalo tok řídicích zpráv, neřídilo efektivně frontu s prioritou při zpracování požadavků nebo používalo neoptimální implementace algoritmů řízení toku.
Většina identifikovaných metod útoku spočívá v odesílání určitých požadavků na server, což vede ke generování velkého počtu odpovědí. Pokud klient nečte data ze soketu a neuzavře spojení, fronta ukládání do vyrovnávací paměti na straně serveru se neustále plní. Toto chování zatěžuje systém správy front pro zpracování síťových připojení a v závislosti na funkcích implementace vede k vyčerpání dostupné paměti nebo prostředků CPU.
Zjištěná zranitelnost:
- CVE-2019-9511 (Data Dribble) – útočník požaduje velké množství dat do více vláken tím, že manipuluje s velikostí posuvného okna a prioritou vlákna, čímž přinutí server zařadit data do fronty v 1bajtových blocích;
- CVE-2019-9512 (Ping Flood) – útočník neustále otravuje pingové zprávy přes HTTP/2 spojení, což způsobuje zahlcení interní fronty odeslaných odpovědí na druhé straně;
- CVE-2019-9513 (Resource Loop) – útočník vytvoří více vláken požadavků a průběžně mění prioritu vláken, což způsobuje zamíchání stromu priorit;
- CVE-2019-9514 (Reset Flood) – útočník vytvoří více vláken
a prostřednictvím každého vlákna odešle neplatný požadavek, což způsobí, že server odešle rámce RST_STREAM, ale nepřijme je, aby naplnily frontu odpovědí; - CVE-2019-9515 (Settings Flood) - útočník odešle proud prázdných rámců „SETTINGS“, na které musí server potvrdit přijetí každého požadavku;
- CVE-2019-9516 (0-Length Headers Leak) – útočník odešle proud záhlaví s null názvem a null hodnotou a server alokuje vyrovnávací paměť v paměti pro uložení každé hlavičky a neuvolní ji, dokud relace neskončí ;
- CVE-2019-9517 (Interní ukládání do vyrovnávací paměti) – útočník se otevře
HTTP/2 posuvné okno pro server k odesílání dat bez omezení, ale udržuje okno TCP zavřené, což zabraňuje skutečnému zápisu dat do soketu. Dále útočník odešle požadavky, které vyžadují velkou odezvu; - CVE-2019-9518 (Potopa prázdných rámců) – Útočník odešle proud rámců typu DATA, HEADERS, CONTINUATION nebo PUSH_PROMISE, ale s prázdnou užitečnou zátěží a bez příznaku ukončení toku. Server tráví čas zpracováním každého snímku, neúměrný šířce pásma spotřebované útočníkem.
Zdroj: opennet.ru