Zum Inhalt springen
Nehmen Sie am 10. September 2024 an Censys teil und besuchen Sie unseren Bedrohungsabwehr Workshop in San Francisco, CA | Jetzt anmelden
Blogs

HTTP/Wer? CVE-2023-44487

Zusammenfassung

  • Google und Cloudflare haben kürzlich Berichte über einen neuen Denial-of-Service-Angriff mit der Bezeichnung "Rapid Reset" veröffentlicht, der die Stream-Cancellation-Funktion von HTTP/2 ausnutzt.
  • Diese Technik ermöglicht es den Akteuren, in großem Umfang ein "Anfordern, Abbrechen"-Muster anzuwenden, um Denial-of-Service-Angriffe in extrem großem Umfang durchzuführen. Server mit HTTP/2, die den Datenverkehr an Backend-Server weiterleiten, sind besonders anfällig für diesen Angriff.
  • Über 555 Millionen Hosts im Internet scheinen derzeit in der Lage zu sein, HTTP/2 auszuführen, und können daher für diesen Angriff anfällig sein.
  • Obwohl es derzeit keine Umgehungsmöglichkeiten für dieses Problem gibt, können Administratoren mit HTTP/2-fähigen Servern, die Anfragen an einen Backend-Server weiterleiten, HTTP/2 auf dem Frontend vorübergehend deaktivieren, bis die Hersteller eine Umgehungsmöglichkeit geschaffen haben.

Genauerer Blick auf die Angriffsmechanismen

Am 10. Oktober veröffentlichten Google und Cloudflare Berichte über den Missbrauch einer bestimmten Funktion des HTTP/2-Protokolls, die zu einer erhöhten Last und einem potenziellen Denial-of-Service auf Servern führt, die mit vielen gleichzeitigen Anfragen nicht Schritt halten können.

In ihren Berichten wird ein Szenario detailliert beschrieben, in dem ein Akteur die Beschränkungen zur Begrenzung der Anzahl gleichzeitiger Anfragen an einen HTTP/2-Server (für jeden Client) umgehen kann, indem er eine Anfrage direkt nach der Erstellung abbricht und den internen Anfragezähler für jede abgebrochene Anfrage effektiv zurücksetzt. Dies bedeutet, dass der Akteur dann unendlich viele neue Anfragen an den Server senden kann, ohne an diese Grenzen zu stoßen.

Ein gut optimierter Webserver, bei dem der HTTP/2-Dienst direkt mit dem Client verbunden ist und keine externen Daten über die Geschäftslogik abgerufen werden (d.h. ein Server, der keine Anfragen an einen anderen Server weiterleitet oder proxysiert), wird definitiv einen gewissen Anstieg der Auslastung verzeichnen, aber nichts, was der Server nicht bewältigen könnte. Das Problem wird deutlicher, wenn der HTTP/2-Server versucht, jede Anfrage über eine Netzwerkverbindung weiterzuleiten (z. B. ein Nginx-Server, der Verbindungen zu einem auf Apache laufenden API-Dienst weiterleitet).

In diesem Szenario müssen die Anfragedaten vom Proxy gepuffert und dann an einen Backend-Dienst gesendet werden; dieser Backend-Dienst muss diese Daten dann verarbeiten und die Antwort zurück an den HTTP/2-Server senden. In der Zwischenzeit, während des Wartens auf diese Proxy-Antworten, können mehrere Bereiche im laufenden Prozess Speicher und Ressourcen nutzen, die noch bereinigt werden müssen.

Kurz gesagt, ein Client sendet eine gültige HTTP/2-Anfrage, der HTTP/2-Server analysiert diese Anfrage, sendet die Anfrage an einen Backend-Server und wartet auf eine Antwort. Der Client bricht diese Anfrage jedoch sofort ab, so dass der HTTP2-Server die Anfrage an das Backend ebenfalls abbrechen muss, aber zu diesem Zeitpunkt sind die Daten und Ressourcen bereits zugewiesen und verwendet worden. Und da der Zähler für die maximale Anzahl von Anfragen ständig zurückgesetzt wird, können unendlich viele Anfragen eingehen, ohne dass sie aufgehalten werden.

Der Google-Blog bringt es am besten auf den Punkt, wenn er Folgendes schreibt:

"...kann der Client 100 Streams öffnen und eine Anfrage an jeden von ihnen in einem einzigen Umlauf senden; der Proxy liest und verarbeitet jeden Stream seriell, aber die Anfragen an die Backend-Server können wiederum parallelisiert werden. Der Client kann dann neue Streams öffnen, wenn er Antworten auf die vorherigen erhält. Dies ergibt einen effektiven Durchsatz für eine einzelne Verbindung von 100 Anfragen pro Round Trip, mit ähnlichen Zeitkonstanten für Round Trip wie bei HTTP/1.1-Anfragen. Dies führt in der Regel zu einer fast 100-mal höheren Auslastung jeder Verbindung.

Die treffend als "Rapid Reset Attack" bezeichnete HTTP/2-Attacke (die darauf basiert, dass Clients jede ausgehende Anfrage zurücksetzen) betrifft technisch gesehen jede HTTP/2-Implementierung, d. h. es handelt sich nicht um eine hersteller- oder produktspezifische Schwäche, sondern um eine Schwachstelle im Protokoll selbst. Und jedes Produkt, das HTTP/2 (derzeit) unterstützt, ist anfällig für diesen Angriff.

Kurz gesagt, dieser Angriff setzt die Frontend-Server und die Backend-Server, mit denen sie kommunizieren, stark unter Druck, wie in Umgebungen mit starkem Proxy. Deshalb kommen die meisten Berichte über diesen Angriff von Dienstanbietern, die sich stark mit Lastausgleich und HTTP-Proxys beschäftigen, wie Cloudflare und Google.

Was Censys sieht

Censys kann feststellen, ob ein HTTP-Dienst eingehende HTTP/2-Anfragen annehmen und verarbeiten kann, verfügt aber über keine zusätzlichen Informationen über die zugrundeliegende Implementierung, abgesehen von dem, was uns die HTTP-Server mitteilen (z.B. ein Server-Header, der uns sagt, dass es sich um Apache oder Nginx handelt). Zum Zeitpunkt der Erstellung dieses Artikels gibt es keine konkreten Patches oder Workarounds. Wenn wir raten sollten, handelt es sich nicht um eine Änderung des zugrunde liegenden Protokolls, sondern um eine Umgehung in den Protokollimplementierungen selbst. In jedem Fall werden die HTTP/2-Protokollimplementierungen geändert, und die Betreiber von Hosts müssen ihre Server aktualisieren.

Da das HTTP2-Protokoll keine spezifische semantische Versionierung oder Identifizierung enthält, kann Censys auch nach einer Umgehung oder Korrektur nur feststellen, ob das HTTP/2-Protokoll unterstützt wird oder nicht.

Mit Stand vom 10. Oktober 2023 beobachtete Censys 556,3 Millionen Hosts mit 719,8 Millionen HTTP/2-fähigen Servern. Beachten Sie, dass dies HTTP-Server mit der Möglichkeit eines Upgrades auf HTTP/2 einschließt, aber nicht notwendigerweise alle Server, die derzeit HTTP/2 nutzen.

Die 10 wichtigsten autonomen Systeme 

ASN Autonomes System Host-Zahl Anzahl der Dienste
16509 AMAZON-02 73.4M 85.4M
46606 VEREINHEITLICHTE-SCHICHT-ALS-1 29.2M 57.5M
63949 AKAMAI-LINODE-AP Akamai Connected Cloud 25.8M 45.7M
13335 CLOUDFLARENET 39.8M 40.3M
53831 SQUARESPACE 33.7M 33.7M
14618 AMAZON-AES 23.6M 26.1M
24940 HETZNER-AS 14.2M 19.6M
19871 NETZWERK-LÖSUNGEN-HOSTING 9.1M 17.8M
16276 OVH 10.7M 15.9M
47846 SEDO-AS 13.7M 13.7M

 

Top-10-Länder

Land Host-Zahl Anzahl der Dienste
Vereinigte Staaten 295.5M 391.1M
Deutschland 53.2M 60.9M
China 19.6M 29.5M
Frankreich 13.7M 19.7M
Niederlande 13.6M 18.8M
Kanada 16.9M 18.5M
Vereinigtes Königreich 10.7M 13.9M
Russland 12.7M 13.5M
Singapur 7.3M 9.3M
Japan 8.3M 9.0M

Um Hosts und Dienste zu finden, auf denen HTTP/2 läuft, können wir die folgenden Abfragen verwenden:

Censy Search

Censys EM-Plattform

  • web_entity.instances.http.supports_http2: "true"

Was kann getan werden?

  • Beurteilen Sie das Ausmaß der Exposition Ihres HTTP/2-Servers und reduzieren Sie die Angriffsfläche. Wenn Sie einen HTTP/2-fähigen Server haben, der Anfragen an einen Backend-Server weiterleitet, besteht eine mögliche Lösung darin, HTTP/2 auf dem Frontend vorübergehend zu deaktivieren, bis die Hersteller eine Umgehung entwickelt haben.
  • Einige wirksame Gegenmaßnahmen, die von den betroffenen Cloud-Diensten gemeldet wurden, umfassen die Kombination:
    • Nutzung bestehender Methoden und Dienste zum Schutz vor DDoS.
    • Anwendung anderer Software-Patches, die Ihre HTTP/2-fähigen Webserver widerstandsfähiger machen können.

Über den Autor

Das Forschungsteam Censys
Lösungen für das Management von Angriffsflächen
Mehr erfahren