
PoC für CVE-2023-45288, Continuation-Flood-Schwachstelle
Dies ist ein Proof-of-Concept-Code für die CONTINUATION-Flood-Schwachstelle, die von Bartek Nowotarski gefunden und dokumentiert wurde. Die technischen Details sind in seinem Blogbeitrag hier sehr gut dokumentiert. Während mein Fokus auf dem von dem Forscher dokumentierten Go-Bug lag, sollte dieser Code beim Testen anderer CVEs im Zusammenhang mit diesem Problem hilfreich sein.
Dieser Code leiht sich Inspiration von:
Mein ursprüngliches Ziel war es, die Schwachstelle im Detail zu verstehen, zusätzlich zur Entwicklung eines Tools zum Testen dieses Problems bei der Arbeit. Dies war auch sehr hilfreich, um die inneren Abläufe von http2 im Detail zu verstehen. Weitere hilfreiche Quellen sind:
Sie können die enthaltene Datei server.go ausführen, die auf einer anfälligen Version von golang.org/x/net (0.20.0) läuft.
$ go run server.go
Der Server läuft auf Port 8443, auf den der Client standardmäßig zeigt.
Wenn der Client gegen anfällige Server ausgeführt wird, kann er so lange CONTINUATION-Frames senden, wie Sie für das wait-Flag in Sekunden angeben. Der Server gibt alle 2 Sekunden seine CPU-Auslastung aus, die bei Ausführung des Clients rapide ansteigt. In gepatchten Versionen (0.23.0 und höher) schließt der Server die Verbindung, sobald das Header-Größenlimit erreicht ist.
Führen Sie den Client aus, der 6 gleichzeitige Verbindungen erstellt, https://localhost:8443 aufruft und 200 Sekunden lang CONTINUATION-Frames für jede Verbindung sendet:
$ go run client.go -time-limit 200 -connections 6 -url https://localhost:8443