
PoC para CVE-2023-45288, vulnerabilidad de inundación de continuación
Este es un código de prueba de concepto para la vulnerabilidad de inundación CONTINUATION encontrada y documentada por Bartek Nowotarski. Los detalles técnicos están muy bien documentados en su publicación de blog aquí. Aunque mi enfoque estuvo en el error de Go tal como lo documentó el investigador, este código debería ser útil para probar otros CVEs relacionados con este problema.
Este código se inspira en:
Mi objetivo inicial era entender la vulnerabilidad en detalle, además de desarrollar una herramienta para probar este problema en el trabajo. Esto también fue muy útil al trabajar en la comprensión del funcionamiento interno de http2 en detalle. Otras fuentes que fueron útiles incluyen:
Puede ejecutar el archivo server.go incluido, que se ejecuta en una versión vulnerable de golang.org/x/net (0.20.0).
$ go run server.go
El servidor se ejecuta en el puerto 8443, al que el cliente apunta por defecto.
Cuando se ejecuta contra servidores vulnerables, el cliente podrá continuar enviando tramas CONTINUATION durante el tiempo que especifique para el indicador wait en segundos. El servidor imprime su uso de CPU cada 2 segundos, lo que verá aumentar rápidamente mientras el cliente se ejecuta. En versiones parcheadas (0.23.0 y superiores), el servidor cerrará la conexión una vez que se alcance el límite de tamaño de encabezado.
Ejecute el cliente, creando 6 conexiones concurrentes, llamando a https://localhost:8443, y enviando tramas de continuación durante 200 segundos por cada conexión:
$ go run client.go -time-limit 200 -connections 6 -url https://localhost:8443