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

Forscher von Netflix und Google entdeckten haben in verschiedenen Implementierungen des Protokolls HTTP/2 acht Schwachstellen identifiziert, die einen Dienstleistungsangriff durch das Senden von speziell formatierten Netzwerk-Request-Strom ermöglichen. Die Probleme betreffen in unterschiedlichem Maße die meisten HTTP-Server, die HTTP/2 unterstĂŒtzen, und fĂŒhren zu einem Erschöpfung der fĂŒr den Arbeitsprozess verfĂŒgbaren Speicherressourcen oder zu einer ĂŒbermĂ€ĂŸigen CPU-Belastung. Updates zur Behebung der Schwachstellen sind bereits fĂŒr nginx 1.16.1/1.17.3 und H2O 2.2.6, sind jedoch bisher nicht verfĂŒgbar fĂŒr Apache httpd und andere Produkte..

Die Probleme sind das Ergebnis von Komplikationen, die in das HTTP/2-Protokoll eingefĂŒhrt wurden, im Zusammenhang mit der Verwendung binĂ€rer Strukturen, dem System zur Begrenzung von Datenströmen innerhalb von Verbindungen, dem Mechanismus zur Priorisierung von Streams und dem Vorhandensein von ICMP-Ă€hnlichen Steuer-Nachrichten, die auf der HTTP/2-Verbindungsebene arbeiten (z. B. Ping-Operationen, ZurĂŒcksetzen und Konfigurieren von Streams). Viele Implementierungen haben nicht richtig den Steuerstream begrenzt, ineffizient die PrioritĂ€tswarteschlange bei der Verarbeitung von Anfragen organisiert oder suboptimale Flusskontrollalgorithmen verwendet.

Die meisten identifizierten Angriffsmethoden bestehen darin, dass bestimmte Anfragen an den Server gesendet werden, die eine große Anzahl von Antworten generieren. Wenn der Client dabei keine Daten aus dem Socket liest und die Verbindung nicht trennt, wird die Antwort-Pufferwarteschlange auf der Serverseite kontinuierlich gefĂŒllt. Ein solches Verhalten belastet das System zur Verwaltung der Warteschlangenverarbeitung von Netzwerkverbindungen und fĂŒhrt, abhĂ€ngig von der Implementierung, zu einem Erschöpfung der verfĂŒgbaren Speicher oder CPU-Ressourcen.

Festgestellte Schwachstellen:

  • CVE-2019-9511 (Data Dribble) – ein Angreifer fordert eine große Menge an Daten in mehreren Strömen an, indem er die GrĂ¶ĂŸe des Gleitfensters und die PrioritĂ€t des Streams manipuliert und den Server zwingt, Daten in 1-Byte-Blöcken in die Warteschlange zu stellen;
  • CVE-2019-9512 (Ping Flood) – ein Angreifer ĂŒberschwemmt kontinuierlich Ping-Nachrichten ĂŒber die HTTP/2-Verbindung und initiiert so das FĂŒllen der internen Antwortwarteschlange auf der anderen Seite;
  • CVE-2019-9513 (Resource Loop) – ein Angreifer erstellt mehrere Anfrage-Streams und Ă€ndert kontinuierlich die PrioritĂ€t der Streams, wodurch die PrioritĂ€tenbaumstruktur vermischt wird;
  • CVE-2019-9514 (Reset Flood) – ein Angreifer erstellt mehrere Ströme.
    und sendet ĂŒber jeden Stream unkorrekte Anfragen, was dazu fĂŒhrt, dass der Server RST_STREAM-Frames sendet, diese jedoch nicht zur AuffĂŒllung der Antwortwarteschlange annimmt;
  • CVE-2019-9515 (Settings Flood) – der Angreifer sendet einen Stream leerer "SETTINGS"-Frames, auf die der Server verpflichtet ist, den Empfang jeder Anfrage zu bestĂ€tigen;
  • CVE-2019-9516 (0-Length Headers Leak) – der Angreifer sendet einen Stream von Headern mit null Namen und null Werten, wĂ€hrend der Server fĂŒr jeden Header einen Puffer im Speicher reserviert und ihn bis zum Ende der Sitzung nicht freigibt;
  • CVE-2019-9517 (Internal Data Buffering) – der Angreifer öffnet
    ein schwebendes HTTP/2-Fenster, um Daten vom Server ohne EinschrĂ€nkungen zu senden, hĂ€lt das TCP-Fenster jedoch geschlossen, sodass die Daten nicht tatsĂ€chlich in den Socket geschrieben werden können. Anschließend sendet der Angreifer Anfragen, die eine große Antwort erfordern;
  • CVE-2019-9518 (Empty Frames Flood) – der Angreifer sendet einen Stream von DATA-, HEADERS-, CONTINUATION- oder PUSH_PROMISE-Frames, jedoch mit leerem Payload und ohne den End-Stream-Flag. Der Server verschwendet Zeit mit der Verarbeitung jedes Frames, unverhĂ€ltnismĂ€ĂŸig zur Bandbreite, die der Angreifer aufwendet.

Quelle: opennet.ru

60GB SSD 8Gb DDR4