Information about the 'Continuation flood' attack method has been revealed, affecting various implementations of the HTTP/2 protocol, including Apache httpd, Apache Traffic Server, Node.js, oghttp, Go net/http2, Envoy, oghttp, and nghttp2. The vulnerability can be exploited to conduct attacks on servers supporting HTTP/2.0 and, depending on the implementation, can lead to memory exhaustion (stopping request processing or crashing processes) or a high CPU load (slowing down request handling). According to the researcher who discovered the vulnerability, this issue is more dangerous than the 'Rapid Reset' vulnerability found last year, which was used to conduct the largest DDoS attacks at that time.
The high level of danger is explained by the fact that disrupting operation a szerver, crashing or significantly reducing performance can be achieved by creating a stream of specially crafted requests from a regular computer. In certain cases, a single TCP connection is sufficient to execute the attack. Additionally, the traffic related to the attack is not distinguishable in the logs against the background of normal user requests.
The vulnerability is caused by the peculiarities of processing HEADERS and CONTINUATION frames in HTTP/2 requests. HEADERS frames are used in HTTP/2 to transmit HTTP headers, while CONTINUATION frames are used to break the transmission of HTTP headers into several stages (for example, when the headers do not fit into one frame or when headers that can be filled at the current stage are sent first, and then the headers, the values of which cannot yet be determined, are sent afterwards). When transmitting headers in multiple stages, a HEADERS frame is sent first without the END_HEADERS flag, followed by several CONTINUATION frames with additional headers, and the list is completed by a CONTINUATION frame with the END_HEADERS flag.
The attack method consists of sending an uninterrupted stream of CONTINUATION frames without setting the END_HEADERS flag. Such activity leads to the transmission of szerver A nagy számú fejléc, amelyet a szerver a memóriában tart, amíg a folyamat számára rendelkezésre álló memória ki nem merül. A CPU magas terhelésének létrehozása érdekében a támadó a CONTINUATION keretek tartalmának tömörítését is kihasználhatja az HPACK formátum használatával, amelynek elemzése számításokat igényel. A HTTP/1.1 protokoll megvalósításaiban a szerver fejlécelárasztásának védelme érdekében korlátozást vezettek be a fejlécméretre és kapcsolatküldési időkorlátot alkalmaztak. A HTTP/2 esetében azonban a bonyolultabb protokoll miatt sok megvalósítás nem biztosított hasonló védelmi módszereket a végtelen fejlécküldés ellen.
A sebezhetőség legnagyobb veszélyt a Node.js felhasználókra jelenti (CVE-2024-27983), mivel ez a megvalósítás lehetővé teszi a crash előidézését mindössze néhány keret küldésével a szerverre. A Node.js versenyhelyzete miatt a vészleállításhoz az Assert-ellenőrzés aktiválásával elegendő a kapcsolatok lezárása a befejezetlen fejlécfolyam küldése közben (összeomlás történik, ha a kapcsolatok lezárása alatt még nem érkezett meg a CONTINUATION keret az END_HEADERS flaggel). A sebezhetőséget a Node.js 18.20.1, 21.7.2 és 20.12.1 verziókban, valamint az llhttp és undici könyvtárak legújabb kiadásaiban javították. Az új Node.js verziókban egy kevésbé veszélyes sebezhetőséget (CVE-2024-27982) is orvosoltak, amely "request smuggling" típusú, lehetővé téve, hogy a "Content Length" érték manipulálásával más felhasználók kérésének tartalmába beavatkozzanak, amelyeket ugyanabban a szálban dolgoznak fel a frontend és backend között.
A CONTINUATION kezelésével kapcsolatos sebezhetőségek más HTTP/2.0 megvalósításokban:
- oghttp (CVE-2024-27919) — korlátlan memóriafogyasztás.
- Tempesta FW (CVE-2024-2758) — a korlátozások megkerülése.
- PHP könyvtárak amphp/http, amphp/http-client és amphp/http-server (CVE-2024-2653) — korlátlan memóriafogyasztás, a rendelkezésre álló memória teljes kiaknázásáig.
- Go csomag net/http (CVE-2023-45288) — CPU magas terhelése.
- nghttp2 könyvtár (CVE-2024-28182) — szolgáltatásmegtagadás előidézése.
- Apache Httpd (CVE-2024-27316) — túlzott memóriafogyasztás és CPU terhelés.
- Apache Traffic Server (CVE-2024-31309) — túlzott erőforrásfogyasztás.
- Envoy (CVE-2024-30255) — CPU magas terhelése (teljes terheléshez 300Mbit/s sávszélesség szükséges egy CPU mag számára).
Forrás: opennet.ru
