
PoC-Exploit für die Integer-Überlauf-Schwachstelle von Nginx (CVE-2017-7529), die einen Out-of-Bounds-Cache-Lesevorgang ermöglicht. Enthält eine Docker-basierte Laborumgebung und ein Python-Skript zum Testen.
Refer to:
Wenn Nginx als Reverse Proxy eingesetzt wird, werden einige Dateien, insbesondere statische Dateien, oft zwischengespeichert. Der Cache-Teil wird in Dateien gespeichert. Jede Cache-Datei besteht aus „Dateikopf“ + „HTTP-Response-Header“ + „HTTP-Response-Body“. Wenn eine zweite Anfrage auf diese Cache-Datei trifft, gibt Nginx den „HTTP-Response-Body“ aus der Datei direkt an den Benutzer zurück.
Wenn meine Anfrage einen Range-Header enthält, gibt Nginx basierend auf den von mir angegebenen Start- und Endpositionen Inhalte einer bestimmten Länge zurück. Wenn ich zwei negative Positionen wie (-600, -9223372036854774591) konstruiere, kann es möglich sein, Daten an einer negativen Position zu lesen. Wenn diese Anfrage außerdem auf die Cache-Datei trifft, könnte möglicherweise der „Dateikopf“, „HTTP-Response-Header“ usw. vor dem „HTTP-Response-Body“ in der Cache-Datei ausgelesen werden.
Starten Sie die Testumgebung:
docker-compose up -d
Rufen Sie http://your-ip:8080/ auf, um die Standardseite von Nginx zu sehen. Diese Seite ist tatsächlich der Inhalt, der vom Reverse Proxy auf Port 8081 bereitgestellt wird.
Führen Sie python3 poc.py http://your-ip:8080/ aus, um das Ergebnis zu lesen:

Es ist zu sehen, dass der „Dateikopf“, „HTTP-Response-Header“ usw., die sich vor dem „HTTP-Response-Body“ befinden, außerhalb der Grenzen gelesen wurden.
Wenn die Lesefehler auftreten, passen Sie die Offset-Adresse (605) in der poc.py an.