
PoC d'exploitation pour la vulnérabilité de dépassement d'entier de Nginx (CVE-2017-7529) permettant une lecture hors limites du cache. Inclut un environnement de laboratoire basé sur Docker et un script Python pour les tests.
Lectures recommandées :
Lorsque Nginx agit comme proxy inverse, il met généralement en cache certains fichiers, notamment les fichiers statiques. La partie mise en cache est stockée dans des fichiers, chaque fichier de cache comprend : « en-tête de fichier » + « en-tête de réponse HTTP » + « corps de réponse HTTP ». Si une requête ultérieure correspond à ce fichier de cache, Nginx renvoie directement le « corps de réponse HTTP » du fichier à l'utilisateur.
Si ma requête contient un en-tête Range, Nginx renverra le contenu de la longueur spécifiée en fonction des positions start et end que j'ai indiquées. Si je construis deux positions négatives, par exemple (-600, -9223372036854774591), il est possible de lire des données à des positions négatives. Si cette requête correspond également au fichier de cache, on peut alors lire le contenu situé avant le « corps de réponse HTTP » dans le fichier de cache, comme l'« en-tête de fichier », l'« en-tête de réponse HTTP », etc.
Lancement de l'environnement de test :
docker-compose up -d
Accédez à http://your-ip:8080/ pour voir la page par défaut de Nginx, qui est en fait le contenu du port 8081 du proxy inverse.
Exécutez python3 poc.py http://your-ip:8080/ pour lire le résultat retourné :

On voit que la lecture hors limites a permis de lire l'« en-tête de fichier », l'« en-tête de réponse HTTP », etc., situés avant le « corps de réponse HTTP ».
Si la lecture est erronée, veuillez ajuster l'adresse de décalage (605) dans poc.py.