
Exploit PoC para la vulnerabilidad de desbordamiento de enteros en Nginx (CVE-2017-7529) que permite una lectura de caché fuera de límites. Incluye un entorno de laboratorio basado en Docker y un script de Python para pruebas.
Lectura de referencia:
Cuando Nginx actúa como proxy inverso, normalmente almacena en caché algunos archivos, especialmente los archivos estáticos. La parte en caché se almacena en un archivo, y cada archivo de caché incluye 'cabecera de archivo' + 'cabecera de respuesta HTTP' + 'cuerpo de respuesta HTTP'. Si una segunda solicitud coincide con ese archivo de caché, Nginx devuelve directamente el 'cuerpo de respuesta HTTP' de ese archivo al usuario.
Si mi solicitud incluye una cabecera Range, Nginx devolverá el contenido de la longitud especificada según las posiciones start y end que yo indique. Y si construyo dos posiciones negativas, como (-600, -9223372036854774591), es posible leer datos en posiciones negativas. Si esta solicitud también coincide con el archivo de caché, entonces se podría leer la 'cabecera de archivo', 'cabecera de respuesta HTTP' y otros contenidos que están antes del 'cuerpo de respuesta HTTP' en el archivo de caché.
Ejecutar el entorno de prueba:
docker-compose up -d
Acceda a http://your-ip:8080/ para ver la página predeterminada de Nginx, que en realidad es el contenido del puerto 8081 del proxy inverso.
Ejecute python3 poc.py http://your-ip:8080/ para leer el resultado devuelto:

Se puede ver que se ha leído fuera de los límites la 'cabecera de archivo', 'cabecera de respuesta HTTP' y otros contenidos que están antes del 'cuerpo de respuesta HTTP'.
Si la lectura es incorrecta, ajuste la dirección de desplazamiento (offset) en poc.py (605).