Byly odhaleny informace o metodě útoku „Continuation flood“, která se dotýká různých implementací protokolu HTTP/2, mezi nimiž jsou Apache httpd, Apache Traffic Server, Node.js, oghttp, Go net/http2, Envoy, oghttp a nghttp2. Tato zranitelnost může být využita k útokům na servery podporující HTTP/2.0 a v závislosti na implementaci může způsobit vyčerpání paměti (ukončení zpracování požadavků nebo zhroucení procesů) nebo vytvoření vysoké zátěže CPU (zpomalení zpracování požadavků). Podle názoru výzkumníka, který zranitelnost objevil, je identifikovaný problém nebezpečnější než zranitelnost „Rapid Reset“, která byla nalezena minulý rok a použita k provádění největších DDoS útoků v té době.
Vysoká úroveň nebezpečí je vysvětlena tím, že k narušení funkce serveru, k zániku nebo vážnému snížení výkonu stačí vytvořit tok speciálně formátovaných požadavků z jednoho běžného počítače. V určitém případě postačuje k provedení útoku dokonce jedno TCP spojení. Přitom související s útokem provoz nijak nevyčnívá v logách na pozadí běžných uživatelských požadavků.
Zranitelnost je způsobena zvláštnostmi zpracování rámců HEADERS a CONTINUATION v požadavcích podle protokolu HTTP/2. Rámce HEADERS se používají v HTTP/2 k přenosu HTTP hlaviček a rámce CONTINUATION pro rozdělení odesílání HTTP hlaviček na několik fází (například když se hlavičky nevejdou do jednoho rámce nebo když je nejprve třeba odeslat hlavičky, které lze vyplnit v aktuálním kroku, a poté přidat hlavičky, jejichž hodnoty nejsou zatím určeny). Při přenosu hlaviček ve více fázích je nejprve odeslán rámec HEADERS bez flagu END_HEADERS, za ním následuje několik rámců CONTINUATION s dalšími hlavičkami a seznam končí rámcem CONTINUATION s flagem END_HEADERS.
Metoda útoku spočívá v odesílání nepřetržitého toku rámců CONTINUATION bez nastavení flagu END_HEADERS. Taková aktivita vede k přenosu na server velkého množství hlaviček, které server uchovává v operační paměti, dokud není vyčerpána dostupná paměť procesu. K vytvoření vysokého zatížení CPU může útočník kromě vyčerpání paměti využít kompresi obsahu rámců CONTINUATION pomocí formátu HPACK, jehož rozbor vyžaduje výpočty. V implementacích protokolu HTTP/1.1 byl pro ochranu proti zaplavování serveru hlavičkami použit limit velikosti hlaviček a časový limit pro odesílání připojení. U HTTP/2, vzhledem ke složitosti protokolu, mnoho implementací nenabízí podobné metody ochrany proti nekonečnému odesílání hlaviček.
Největší nebezpečí představuje zranitelnost pro uživatele Node.js (CVE-2024-27983), protože tato implementace umožňuje způsobit pád zasláním několika rámců na server. Díky podmínce závodu v Node.js je k vyvolání havárie prostřednictvím spuštění kontroly Assert dostatečné ukončit připojení během odesílání nedokončeného proudu hlaviček (havárie, pokud během uzavírání připojení dosud nepřijde rámec CONTINUATION s příznakem END_HEADERS). Zranitelnost byla odstraněna v Node.js 18.20.1, 21.7.2 a 20.12.1, stejně jako v posledních verzích knihoven llhttp a undici. V nových verzích Node.js byla také odstraněna méně závažná zranitelnost (CVE-2024-27982) třídy „request smuggling“, která umožňuje manipulací s hodnotou „Content-Length“ vklouznout do obsahu požadavků jiných uživatelů zpracovávaných ve stejné frontě mezi frontendem a backendem.
Zranitelnosti související se zpracováním CONTINUATION v dalších implementacích HTTP/2.0:
- oghttp (CVE-2024-27919) — neomezená spotřeba paměti.
- Tempesta FW (CVE-2024-2758) — obcházení omezení.
- PHP knihovna amphp/http, amphp/http-client a amphp/http-server (CVE-2024-2653) — neomezená spotřeba paměti, až do úplného vyčerpání dostupné paměti.
- Go balíček net/http (CVE-2023-45288) — vytváření vysokého zatížení CPU.
- Knihovna nghttp2 (CVE-2024-28182) — vyvolání odmítnutí služby.
- Apache Httpd (CVE-2024-27316) — nadměrná spotřeba paměti a vytváření zatížení CPU.
- Apache Traffic Server (CVE-2024-31309) — nadměrná spotřeba zdrojů.
- Envoy (CVE-2024-30255) — vytváření vysokého zatížení CPU (pro plné zatížení jednoho CPU jádra je potřeba proud o rychlosti 300Mbit/s).
Zdroj: opennet.ru
