
PoC per CVE-2023-45288, vulnerabilità di continuation flood
Questo è un codice proof-of-concept per la vulnerabilità CONTINUATION flood scoperta e documentata da Bartek Nowotarski. I dettagli tecnici sono ben documentati nel suo post del blog qui. Anche se la mia attenzione era focalizzata sul bug di Go come documentato dal ricercatore, questo codice dovrebbe essere utile per testare altre CVE correlate a questo problema.
Questo codice prende ispirazione da:
Il mio obiettivo iniziale era comprendere la vulnerabilità in dettaglio, oltre a sviluppare uno strumento per testare questo problema al lavoro. Questo è stato anche molto utile quando ho lavorato per comprendere il funzionamento interno di http2 in dettaglio. Altre fonti che sono state utili includono:
Puoi eseguire il file server.go incluso, che gira su una versione vulnerabile di golang.org/x/net (0.20.0).
$ go run server.go
Il server gira sulla porta 8443, a cui il client punta per impostazione predefinita.
Quando eseguito contro server vulnerabili, il client sarà in grado di continuare a inviare frame CONTINUATION per tutto il tempo specificato con il flag wait in secondi. Il server stampa il suo utilizzo della CPU ogni 2 secondi, che vedrai aumentare rapidamente mentre il client è in esecuzione. Nelle versioni corrette (0.23.0 e successive), il server chiuderà la connessione una volta raggiunto il limite di dimensione dell'header.
Esegui il client, creando 6 connessioni concorrenti, chiamando https://localhost:8443, e inviando frame di continuazione per 200 secondi per ogni connessione:
$ go run client.go -time-limit 200 -connections 6 -url https://localhost:8443