Continuation Flood-Angriff, der zu Problemen auf Servern führt, die HTTP/2.0 verwenden

Es wurden Informationen über die Angriffs-methode "Continuation flood" veröffentlicht, die verschiedene Implementierungen des HTTP/2-Protokolls betrifft, darunter Apache httpd, Apache Traffic Server, Node.js, oghttp, Go net/http2, Envoy, oghttp und nghttp2. Die Schwachstelle kann genutzt werden, um Angriffe auf Server zu starten, die HTTP/2.0 unterstützen. Abhängig von der Implementierung kann dies zu einem Speicherausfall (Stopp der Anfragenbearbeitung oder plötzlichem Prozessabbruch) oder zu einer hohen CPU-Auslastung (Verlangsamung der Anfragenbearbeitung) führen. Laut dem Forscher, der die Schwachstelle entdeckt hat, ist das Problem gefährlicher als die im vergangenen Jahr identifizierte Schwachstelle "Rapid Reset", die bei den damals größten DDoS-Angriffen verwendet wurde.

Das hohe Gefahrenniveau erklärt sich aus der Tatsache, dass zur Störung der Funktionsweise Server, zum Abbruch oder zur erheblichen Verringerung der Leistung bereits der Versand eines Stroms speziell gestalteter Anfragen von einem normalen Computer aus genügt. In bestimmten Fällen reicht sogar eine einzige TCP-Verbindung aus, um einen Angriff durchzuführen. Der damit verbundene Datenverkehr wird in den Protokollen nicht von normalen Benutzeranfragen unterschieden.

Die Schwachstelle wird durch Besonderheiten der Verarbeitung von HEADERS- und CONTINUATION-Rahmen in HTTP/2-Anfragen verursacht. HEADERS-Rahmen werden in HTTP/2 zur Übertragung von HTTP-Headern verwendet, während CONTINUATION-Rahmen dazu dienen, die Übertragung von HTTP-Headern in mehrere Phasen zu unterteilen (zum Beispiel, wenn die Header nicht in einen Rahmen passen oder wenn zunächst Header gesendet werden sollen, die in dieser Phase ausgefüllt werden können, gefolgt von Headern, deren Werte derzeit nicht bestimmt werden können). Bei der Übertragung von Headern in mehreren Phasen wird zunächst ein HEADERS-Rahmen ohne das END_HEADERS-Flag gesendet, gefolgt von mehreren CONTINUATION-Rahmen mit zusätzlichen Headern, und die Liste wird mit einem CONTINUATION-Rahmen mit dem END_HEADERS-Flag abgeschlossen.

Die Angriffsmethode besteht darin, einen kontinuierlichen Strom von CONTINUATION-Rahmen ohne Setzen des END_HEADERS-Flags zu senden. Eine derartige Aktivität führt zu einer Übertragung von Server Eine große Anzahl von Headern, die der Server im Arbeitsspeicher speichert, bis der verfügbare Speicher für den Prozess erschöpft ist. Um eine hohe CPU-Belastung zu erzeugen, kann der Angreifer zusätzlich zur Erschöpfung des Speichers die Kompression des Inhalts der CONTINUATION-Frames unter Verwendung des HPACK-Formats nutzen, dessen Analyse Rechenleistung erfordert. In Implementierungen des Protokolls HTTP/1.1 wurde als Schutz vor Serverüberflutung mit Headern eine Größenbeschränkung für Header und ein Timeout für die Verbindungssendungszeit verwendet. Bei HTTP/2 haben viele Implementierungen aufgrund der Komplexität des Protokolls solche Schutzmethoden gegen unendliche Headerübertragungen nicht vorgesehen.

Die Schwachstelle stellt die größte Gefahr für Nutzer 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 Rennbedingungen in Node.js genügt es, die Verbindung während der Übertragung eines unvollendeten Headerstroms zu beenden, um einen Absturz durch das Auslösen der Assert-Prüfung herbeizuführen (Absturz, wenn zum Zeitpunkt der Schließung der Verbindungen noch kein CONTINUATION-Frame mit dem End-Header-Flag eingegangen ist). Die Schwachstelle wurde in Node.js 18.20.1, 21.7.2 und 20.12.1 sowie in aktuellen Versionen der Bibliotheken llhttp und undici behoben. In den neuen Versionen von Node.js wurde auch eine weniger kritische Schwachstelle (CVE-2024-27982) der Kategorie „Request Smuggling“ behoben, die es durch Manipulation des „Content Length“-Wertes ermöglichen konnte, sich in die Inhalte der Anfragen anderer Benutzer einzuschleusen, die im selben 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 Restriktionen.
  • PHP-Bibliothek amphp/http, amphp/http-client und amphp/http-server (CVE-2024-2653) – unbegrenzter Speicherverbrauch bis zur vollständigen Erschöpfung des verfügbaren Speichers.
  • Go-Paket net/http (CVE-2023-45288) – Erzeugung einer hohen CPU-Belastung.
  • Bibliothek nghttp2 (CVE-2024-28182) – Auslösen eines Denial-of-Service.
  • Apache Httpd (CVE-2024-27316) – übermäßiger Speicherverbrauch und Erzeugung von CPU-Belastung.
  • Apache Traffic Server (CVE-2024-31309) – übermäßiger Ressourcenverbrauch.
  • Envoy (CVE-2024-30255) – Erzeugung einer hohen CPU-Belastung (ein Stream von 300 Mbit/s ist erforderlich, um einen vollständigen Kern zu belasten).

Quelle: opennet.ru

60GB SSD 8Gb DDR4