Boli zverejnené podrobnosti o metóde útoku „Continuation Flood“, ktorá ovplyvňuje rôzne implementácie protokolu HTTP/2 vrátane Apache httpd, Apache Traffic Server, Node.js, oghttp, Gonet/http2, Envoy, oghttp a nghttp2. Táto zraniteľnosť sa dá použiť na útok na servery s podporou HTTP/2.0 a v závislosti od implementácie vedie k vyčerpaniu pamäte (zastavenie spracovania požiadaviek alebo zlyhanie procesov) alebo k vysokému zaťaženiu CPU (spomalenie spracovania požiadaviek). Podľa výskumníka, ktorý zraniteľnosť objavil, je tento problém nebezpečnejší ako zraniteľnosť „Rapid Reset“ objavená minulý rok, ktorá bola použitá na vykonanie najväčších DDoS útokov v tom čase.
Vysoká úroveň nebezpečenstva sa vysvetľuje skutočnosťou, že s cieľom narušiť prácu serverNa spôsobenie havárie alebo výrazného zníženia výkonu stačí vytvoriť prúd špeciálne vytvorených požiadaviek z jedného bežného počítača. V niektorých prípadoch stačí na vykonanie útoku aj jedno TCP pripojenie. Navyše, prevádzka súvisiaca s útokom sa v protokoloch neodlišuje od požiadaviek bežných používateľov.
Zraniteľnosť je spôsobená spracovaním rámcov HEADERS a CONTINUATION v požiadavkách HTTP/2. HTTP/2 používa rámce HEADERS na prenos hlavičiek HTTP, zatiaľ čo rámce CONTINUATION sa používajú na rozdelenie prenosu hlavičiek HTTP do viacerých fáz (napríklad, keď sa hlavičky nezmestia do jedného rámca alebo keď sa musia najprv odoslať hlavičky, ktoré je možné vyplniť v aktuálnej fáze, a potom hlavičky, ktorých hodnoty ešte nie je možné určiť). Pri prenose hlavičiek vo viacerých fázach sa najprv odošle rámec HEADERS bez príznaku END_HEADERS, potom niekoľko rámcov CONTINUATION s ďalšími hlavičkami a nakoniec rámec CONTINUATION s príznakom END_HEADERS.
Metóda útoku spočíva v odosielaní súvislého prúdu rámcov CONTINUATION bez nastavenia príznaku END_HEADERS. Táto aktivita vedie k prenosu server Veľké množstvo hlavičiek, ktoré server ukladá do pamäte RAM, kým sa nevyčerpá dostupná pamäť. Na vytvorenie vysokého zaťaženia CPU môže útočník okrem vyčerpania pamäte využiť kompresiu rámcov CONTINUATION pomocou formátu HPACK, ktorého analýza vyžaduje výpočtové úsilie. V implementáciách HTTP/1.1 sa na ochranu pred zahltením hlavičiek používali limity veľkosti hlavičiek a časové limity pripojenia. Vzhľadom na zvýšenú zložitosť protokolu mnohé implementácie HTTP/2 neimplementovali takúto ochranu pred nekonečným odosielaním hlavičiek.
Táto zraniteľnosť predstavuje najväčšie nebezpečenstvo pre používateľov Node.js (CVE-2024-27983), pretože táto implementácia môže spôsobiť zlyhanie odoslaním len niekoľkých rámcov na server. Kvôli súbehu v Node.js stačí ukončenie pripojenia počas odosielania nedokončeného streamu hlavičiek na spustenie zlyhania prostredníctvom kontroly assertu (k zlyhaniu dôjde, ak rámec CONTINUATION s príznakom END_HEADERS ešte nedorazil, keď je pripojenie zatvorené). Zraniteľnosť je opravená v Node.js 18.20.1, 21.7.2 a 20.12.1, ako aj v nedávnych vydaniach knižníc llhttp a undici. Nové verzie Node.js tiež opravujú menej závažnú zraniteľnosť (CVE-2024-27982) triedy „pašovanie požiadaviek“, ktorá umožňuje manipuláciou s hodnotou „Dĺžka obsahu“ vkladať do obsahu požiadavky iných používateľov spracované v tom istom vlákne medzi frontendom a backendom.
Zraniteľnosti súvisiace so spracovaním príkazu CONTINUATION v iných implementáciách HTTP/2.0:
- oghttp (CVE-2024-27919) – Neobmedzená spotreba pamäte.
- Tempesta FW (CVE-2024-2758) – Obídenie obmedzení.
- PHP knižnica amphp/http, amphp/http-client a amphp/http-server (CVE-2024-2653) - neobmedzená spotreba pamäte, až do úplného vyčerpania dostupnej pamäte.
- Balík Go net/http (CVE-2023-45288) – vytvára vysoké zaťaženie CPU.
- Knižnica nghttp2 (CVE-2024-28182) – zraniteľnosť typu odmietnutie služby.
- Apache Httpd (CVE-2024-27316 - Nadmerná spotreba pamäte a zaťaženie CPU.
- Apache Traffic Server (CVE-2024-31309 - Nadmerná spotreba zdrojov.
- Envoy (CVE-2024-30255) – vytvára vysoké zaťaženie CPU (na úplné zaťaženie jedného jadra CPU je potrebný tok 300 Mbit/s).
Zdroj: opennet.ru
