In verschiedenen Implementierungen des HTTP/2-Protokolls wurden 8 DoS-Schwachstellen identifiziert

Forscher von Netflix und Google identifiziert Es gibt acht Schwachstellen in verschiedenen Implementierungen des HTTP/2-Protokolls, die einen Denial-of-Service verursachen können, indem sie einen Strom von Netzwerkanfragen auf eine bestimmte Weise senden. Das Problem betrifft bis zu einem gewissen Grad die meisten HTTP-Server mit HTTP/2-Unterstützung und führt dazu, dass dem Worker nicht mehr genügend Arbeitsspeicher zur Verfügung steht oder dass zu viel CPU-Last entsteht. Updates zur Beseitigung von Schwachstellen werden bereits in vorgestellt Nginx 1.16.1/1.17.3 и H2O 2.2.6, aber für den Moment nicht verfügbar für Apache httpd und andere Produkte.

Die Probleme resultierten aus Komplikationen im HTTP/2-Protokoll im Zusammenhang mit der Verwendung binärer Strukturen, einem System zur Begrenzung des Datenflusses innerhalb von Verbindungen, einem Flusspriorisierungsmechanismus und dem Vorhandensein von ICMP-ähnlichen Steuernachrichten, die auf der HTTP/2-Verbindung ausgeführt werden Ebene (z. B. Ping-, Reset- und Flow-Einstellungen). Viele Implementierungen begrenzten den Fluss von Kontrollnachrichten nicht ordnungsgemäß, verwalteten die Prioritätswarteschlange bei der Verarbeitung von Anforderungen nicht effizient oder verwendeten suboptimale Implementierungen von Flusskontrollalgorithmen.

Die meisten der identifizierten Angriffsmethoden bestehen darin, bestimmte Anfragen an den Server zu senden, was zur Generierung einer großen Anzahl von Antworten führt. Wenn der Client keine Daten vom Socket liest und die Verbindung nicht schließt, füllt sich die Antwortpufferwarteschlange auf der Serverseite kontinuierlich. Dieses Verhalten belastet das Warteschlangenverwaltungssystem für die Verarbeitung von Netzwerkverbindungen und führt je nach Implementierungsmerkmalen zur Erschöpfung der verfügbaren Speicher- oder CPU-Ressourcen.

Identifizierte Schwachstellen:

  • CVE-2019-9511 (Data Dribble) – ein Angreifer fordert eine große Datenmenge in mehreren Threads an, indem er die Größe des Schiebefensters und die Thread-Priorität manipuliert und den Server zwingt, die Daten in 1-Byte-Blöcken in die Warteschlange zu stellen;
  • CVE-2019-9512 (Ping Flood) – ein Angreifer vergiftet kontinuierlich Ping-Nachrichten über eine HTTP/2-Verbindung, was dazu führt, dass die interne Warteschlange der gesendeten Antworten auf der anderen Seite überflutet wird;
  • CVE-2019-9513 (Ressourcenschleife) – ein Angreifer erstellt mehrere Anforderungsthreads und ändert kontinuierlich die Priorität der Threads, wodurch der Prioritätsbaum neu gemischt wird;
  • CVE-2019-9514 (Reset Flood) – ein Angreifer erstellt mehrere Threads
    und sendet über jeden Thread eine ungültige Anfrage, was dazu führt, dass der Server RST_STREAM-Frames sendet, diese jedoch nicht zum Füllen der Antwortwarteschlange akzeptiert;

  • CVE-2019-9515 (Settings Flood) – Der Angreifer sendet einen Strom leerer „SETTINGS“-Frames, als Antwort darauf muss der Server den Empfang jeder Anfrage bestätigen;
  • CVE-2019-9516 (0-Length Headers Leak) – ein Angreifer sendet einen Stream von Headern mit einem Nullnamen und einem Nullwert, und der Server weist einen Puffer im Speicher zum Speichern jedes Headers zu und gibt ihn erst nach Ende der Sitzung frei ;
  • CVE-2019-9517 (Interne Datenpufferung) – Angreifer öffnet sich
    HTTP/2-Schiebefenster, damit der Server Daten ohne Einschränkungen senden kann, das TCP-Fenster jedoch geschlossen bleibt und verhindert, dass Daten tatsächlich in den Socket geschrieben werden. Als nächstes sendet der Angreifer Anfragen, die eine umfangreiche Antwort erfordern;

  • CVE-2019-9518 (Flut leerer Frames) – Ein Angreifer sendet einen Stream von Frames vom Typ DATA, HEADERS, CONTINUATION oder PUSH_PROMISE, jedoch mit leerer Nutzlast und ohne Flussbeendigungsflag. Der Server verbringt mit der Verarbeitung jedes Frames Zeit, die in keinem Verhältnis zur vom Angreifer verbrauchten Bandbreite steht.

Source: opennet.ru

Kommentar hinzufügen