
PoC pour CVE-2023-45288, vulnérabilité de continuation flood
Ceci est un code de preuve de concept pour la vulnérabilité de l'inondation CONTINUATION découverte et documentée par Bartek Nowotarski. Les détails techniques sont très bien documentés dans son article de blog ici. Bien que mon attention se soit portée sur le bogue Go tel que documenté par le chercheur, ce code devrait être utile pour tester d'autres CVE liées à ce problème.
Ce code s'inspire de :
Mon objectif initial était de comprendre la vulnérabilité en détail, en plus de développer un outil pour tester ce problème au travail. Cela a également été très utile pour comprendre le fonctionnement interne de http2 en détail. D'autres sources utiles incluent :
Vous pouvez exécuter le fichier server.go fourni, qui fonctionne sur une version vulnérable de golang.org/x/net (0.20.0).
$ go run server.go
Le serveur écoute sur le port 8443, vers lequel le client pointe par défaut.
Lorsqu'il est exécuté contre des serveurs vulnérables, le client pourra continuer à envoyer des trames CONTINUATION aussi longtemps que vous le spécifiez pour le drapeau wait en secondes. Le serveur imprime son utilisation du CPU toutes les 2 secondes, que vous verrez augmenter rapidement pendant l'exécution du client. Dans les versions corrigées (0.23.0 et ultérieures), le serveur fermera la connexion une fois la limite de taille d'en-tête atteinte.
Exécutez le client, créant 6 connexions simultanées, appelant https://localhost:8443, et envoyant des trames de continuation pendant 200 secondes pour chaque connexion :
$ go run client.go -time-limit 200 -connections 6 -url https://localhost:8443