Výskumníci zo spoločností Netflix a Google v rôznych implementáciách protokolu HTTP/2 identifikovali osem zraniteľností, ktoré umožňujú spôsobiť odmietnutie služby prostredníctvom zasielania špeciálne tvarovaných sieťových požiadaviek. Problémy v menšej či väčšej miere zasahujú väčšinu HTTP serverov s podporou HTTP/2 a vedú k vyčerpaniu dostupnej pamäte pre proces alebo vytvoreniu príliš vysokého zaťaženia CPU. Aktualizácie na odstránenie zraniteľností už boli predstavené v a , ale zatiaľ pre Apache httpd a .
Problémy boli následkom zmien v protokole HTTP/2, spojených s použitím binárnych štruktúr, systémom limitovania prúdov dát v rámci spojení, mechanizmom priorizácie prúdov a existenciou správ podobných ICMP, ktoré pracujú na úrovni spojení HTTP/2 (napríklad operácie ping, reset a nastavenie prúdu). Mnohé implementácie správne neobmedzovali tok riadiacich správ, neefektívne organizovali prácu frontu priorít pri spracovaní požiadaviek alebo používali suboptimalizované implementácie algoritmov správy prúdu.
Väčšina identifikovaných metód útoku spočíva v zasielaní určitých požiadaviek na server, ktoré vedú k generovaniu veľkého množstva odpovedí. Ak pritom klient nečíta údaje zo soketu a nepreruší spojenie, fronta vyrovnávacej pamäte odpovedí na strane servera sa nepretržite zapĺňa. Takéto správanie vytvára záťaž na systém správy frontu spracovania sieťových spojení a v závislosti od špecifík implementácie vedie k vyčerpaniu dostupnej pamäte alebo CPU.
Odhalené zraniteľnosti:
- CVE-2019-9511 (Data Dribble) — útočník žiada veľké množstvo dát v niekoľkých prúdoch, manipuluje s veľkosťou kĺzavého okna a prioritou prúdu, čím núti server vkladať dáta do fronty blokmi po 1 bite;
- CVE-2019-9512 (Ping Flood) — útočník nepretržite zasiela ping správy prostredníctvom spojenia HTTP/2, iniciujúc zaplnenie na druhej strane vnútornej fronty odoslaných odpovedí;
- CVE-2019-9513 (Resource Loop) — útočník vytvára niekoľko prúdov požiadaviek a nepretržite mení prioritu prúdov, spôsobujúc zamieňanie stromu priorít;
- CVE-2019-9514 (Reset Flood) — útočník vytvára niekoľko prúdov
a odosiela neplatný dopyt cez každý tok, čo spôsobuje, že server odosiela snímky RST_STREAM, ale ich neprijíma na naplnenie fronty odpovedí; - CVE-2019-9515 (Záplava nastavení) — útočník posiela tok prázdnych snímok «SETTINGS», na ktoré musí server potvrdiť prijatie každého dopytu;
- CVE-2019-9516 (Únik hlavičiek s nulovou dĺžkou) — útočník posiela tok hlavičiek s nulovým menom a nulovou hodnotou, pričom server pridelí pre každý hlavičku v pamäti vyrovnávaciu pamäť a neuvoľní ju až do konca relácie;
- CVE-2019-9517 (Interné vyrovnávanie dát) — útočník otvára
posuvné okno HTTP/2 na odosielanie dát serverom bez obmedzení, avšak udržiava okno TCP uzavreté, čo neumožňuje skutočne zapísať dáta do zásuvky. Potom útočník posiela dopyty vyžadujúce veľkú odpoveď; - CVE-2019-9518 (Záplava prázdnych snímok) — útočník posiela tok snímok typu DATA, HEADERS, CONTINUATION alebo PUSH_PROMISE, ale s prázdnym obsahom a bez príznaku ukončenia toku. Server trávi čas spracovaním každej snímky, čo je neprimerané voči šírke pásma, ktorú útočník vynakladá.
Zdroj: opennet.ru
