Es wurde eine neue Angriffstechnik auf die Implementierung des HTTP/2-Protokolls vorgestellt, die Angriffe zum Zweck einer Denial-of-Service (DoS) durch Ressourcenerschöpfung erleichtert. Die Schwachstelle trägt den Codenamen MadeYouReset und ermöglicht es, durch Manipulation der Steuerrahmen von HTTP/2 den Server mit einer großen Anzahl von Anfragen zu überfluten, ohne die festgelegten Einschränkungen zu beachten.
Das Problem besteht darin, dass der Client eine sehr große Anzahl von gleichzeitig verarbeiteten Streams erzeugen kann, unabhängig vom Limit SETTINGS_MAX_CONCURRENT_STREAMS, indem jeder Stream zu Beginn zurückgesetzt wird. Dieses Zurücksetzen sorgt dafür, dass der Client zur Absendung einer neuen Anfrage über die bestehende HTTP/2-Verbindung nicht auf eine Antwort warten muss. Server Vielmehr kann er sofort einen großen kontinuierlichen Strom von Anfragen senden, so viel wie die Bandbreite der Verbindung erlaubt.
Der Kunde wird unabhängig von Latenzen zwischen der Anforderung und dem Erhalt einer Antwort (RTT, Round-Trip Time) und kann Angriffe mit minimalen Kosten durchführen, während der Server weiterhin Ressourcen für die Verarbeitung eingehender Anfragen aufwendet. Beispielsweise erstellt der Server Datenstrukturen für neue Streams, analysiert die Anfrage, entpackt die Header und vergleicht die URL mit der Ressource. Bei Angriffen auf Reverse Proxys kann sich der Angriff auf die Backends ausbreiten, auf die der Proxy die Anfrage umleitet, bevor sie zurückgesetzt wird.
Die Verwundbarkeit ähnelt dem früher bekannten Problem Rapid Reset (CVE-2023-44487) und wird durch eine Diskrepanz in der Logik des Zurücksetzens von Streams verursacht, die in der HTTP/2-Protokollspezifikation definiert und in Endprodukten implementiert ist. In der Spezifikation ist die Möglichkeit des Zurücksetzens eines Streams durch den Client und den Server jederzeit vorgesehen, jedoch in vielen Implementierungen von HTTP/2 …Server wird die Anfrage nach einem solchen Zurücksetzen weiterhin bearbeitet. Der entscheidende Unterschied zu dem neuen Angriff besteht darin, dass das Zurücksetzen der Anfrageverarbeitung auf Initiative des Servers erfolgt und nicht durch das Senden eines Rahmens mit dem RST_STREAM-Flag durch den Client.
Der Server setzt eine Rücksetzung in Gang, wenn fehlerhafte Anfragen eingehen. Solche Anfragen werden sofort verworfen, bevor sie vollständig verarbeitet oder an das Backend weitergeleitet werden. Um den gesamten Verarbeitungszyklus einer Anfrage zu durchlaufen, könnte ein Angreifer zunächst eine korrekte HTTP-Anfrage senden und anschließend eine fehlerhafte Sequenz von HTTP/2-Steuerrahmen übermitteln. Solches Verhalten führt dazu, dass der Server beginnt, die Anfrage vollständig zu verarbeiten, den Stream jedoch aufgrund eines Fehlers bei der Verarbeitung der folgenden Steuerrahmen zurücksetzt (der Stream mit der korrekten Anfrage wird in den Zustand RST_STREAM versetzt).

Das Problem wurde in HTTP-Servern wie Apache Tomcat, Netty, Eclipse Jetty, Fastly, Varnish, Lighttpd und Zephyr RTOS bestätigt. Es zeigt sich ebenfalls auf den Webseiten und Serverdiensten von Mozilla. Apache httpd, Apache Traffic Server, Node.js, LiteSpeed und HAProxy sind von diesem Problem nicht betroffen. Der Status der Verwundbarkeit in nginx ist nicht bestimmt.
Quelle: opennet.ru
