Es wurden Informationen zur Angriffsart „Continuation Flood“ veröffentlicht, die verschiedene Implementierungen des HTTP/2-Protokolls betreffen, darunter Apache httpd, Apache Traffic Server, Node.js, oghttp, Go net/http2, Envoy, oghttp und nghttp2. Die Schwachstelle kann verwendet werden, um Angriffe auf Server mit HTTP/2.0-Unterstützung durchzuführen. Je nach Implementierung kann dies zu einem Speicherengpass (Einstellung der Anfrageverarbeitung oder unerwartetes Beenden von Prozessen) oder zu einer hohen CPU-Belastung (Verlangsamung der Anfrageverarbeitung) führen. Laut dem Entdecker der Schwachstelle ist das Problem gefährlicher als die im letzten Jahr entdeckte Schwachstelle „Rapid Reset“, die für einige der größten DDoS-Angriffe zu dieser Zeit verwendet wurde.
Das hohe Gefahrenniveau wird dadurch erklärt, dass zur Störung der Funktionsweise Server, zum unerwarteten Beenden oder zu einer erheblichen Leistungsreduzierung die Erzeugung eines Flusses speziell gestalteter Anfragen von einem normalen Computer aus ausreicht. In bestimmten Fällen genügt sogar eine einzige TCP-Verbindung, um die Attacke durchzuführen. Bei diesem Prozess hebt sich der mit der Attacke verbundene Datenverkehr in den Protokollen nicht von den gewöhnlichen Benutzeranfragen ab.
Die Schwachstelle ergibt sich aus den Besonderheiten der Verarbeitung von HEADERS- und CONTINUATION-Frames in HTTP/2-Anfragen. HEADERS-Frames werden in HTTP/2 verwendet, um HTTP-Header zu übertragen, während CONTINUATION-Frames dazu dienen, die Übertragung von HTTP-Headern in mehrere Phasen zu unterteilen (zum Beispiel, wenn nicht alle Header in einen Frame passen oder wenn zunächst Header gesendet werden sollen, deren Werte zu diesem Zeitpunkt noch nicht bestimmt werden können). Bei der Übertragung von Headern in mehreren Schritten wird zunächst ein HEADERS-Frame ohne das END_HEADERS-Flag gesendet, gefolgt von mehreren CONTINUATION-Frames mit zusätzlichen Headern, und die Liste wird mit einem CONTINUATION-Frame mit dem END_HEADERS-Flag abgeschlossen.
Die Angriffsmethode besteht darin, einen ununterbrochenen Strom von CONTINUATION-Frames ohne das Setzen des END_HEADERS-Flags zu senden. Eine solche Aktivität führt zu einer Übertragung von der Server eine große Anzahl von Headern, die der Server im Arbeitsspeicher speichert, bis der für den Prozess verfügbare Speicher erschöpft ist. Um eine hohe CPU-Last zu erzeugen, kann der Angreifer zusätzlich zur Erschöpfung des Speichers die Komprimierung des Inhalts der CONTINUATION-Frames mit dem HPACK-Format nutzen, dessen Analyse Rechenleistung erfordert. Bei Implementierungen des HTTP/1.1-Protokolls wurde zum Schutz vor einer Flut von Headern eine Begrenzung der Headergröße und ein Zeitlimit für die Verbindungsübertragung angewendet. Für HTTP/2 wurden aufgrund der Komplexität des Protokolls von vielen Implementierungen solche Schutzmethoden gegen unendliches Senden von Headern nicht berücksichtigt.
Die Schwachstelle stellt die größte Gefahr für Benutzer von Node.js (CVE-2024-27983) dar, da diese Implementierung einen Absturz durch das Senden von nur wenigen Frames an den Server ermöglicht. Aufgrund eines Race Conditions in Node.js reicht es aus, die Verbindung während des Sendens eines unvollständigen Header-Streams zu schließen, um einen Notausstieg über die Auslösung einer Assert-Prüfung zu erreichen (Absturz, wenn während des Schließens der Verbindungen noch kein CONTINUATION-Frame mit dem END_HEADERS-Flag eingegangen ist). Die Schwachstelle wurde in Node.js 18.20.1, 21.7.2 und 20.12.1 sowie in den neuesten Versionen der Bibliotheken llhttp und undici behoben. In den neuen Versionen von Node.js wurde auch eine weniger gefährliche Schwachstelle (CVE-2024-27982) der Kategorie „Request Smuggling“ behoben, die es durch Manipulation des Werts „Content Length“ ermöglichte, sich in den Inhalt von Anfragen anderer Benutzer einzuschleichen, die im gleichen Thread zwischen Frontend und Backend verarbeitet werden.
Schwachstellen im Zusammenhang mit der Verarbeitung von CONTINUATION in anderen Implementierungen von HTTP/2.0:
- oghttp (CVE-2024-27919) — unbegrenzter Speicherverbrauch.
- Tempesta FW (CVE-2024-2758) — Umgehung von Beschränkungen.
- PHP-Bibliotheken amphp/http, amphp/http-client und amphp/http-server (CVE-2024-2653) — ungehinderter Speicherverbrauch bis hin zur vollständigen Erschöpfung des verfügbaren Speichers.
- Go-Paket net/http (CVE-2023-45288) — führt zu hoher CPU-Auslastung.
- Bibliothek nghttp2 (CVE-2024-28182) — verursacht einen Denial-of-Service.
- Apache Httpd (CVE-2024-27316) — übermäßiger Speicherverbrauch und hohe CPU-Auslastung.
- Apache Traffic Server (CVE-2024-31309) — übermäßiger Ressourcenverbrauch.
- Envoy (CVE-2024-30255) — verursacht hohe CPU-Auslastung (für die volle Auslastung eines CPU-Kerns ist ein Durchsatz von 300 Mbit/s erforderlich).
Quelle: opennet.ru
