
Démonstration pratique de la vulnérabilité Log4Shell (CVE-2021-44228)
Ce dépôt sert exclusivement à des fins éducatives et de démonstration dans le cadre d'un travail de séminaire lié à la sécurité. N'utilisez pas ce code dans des environnements de production ou contre des systèmes sans autorisation explicite. La configuration vise à renforcer la sensibilisation à la sécurité et à montrer comment des vulnérabilités complexes peuvent apparaître lorsque des fonctionnalités apparemment inoffensives comme la journalisation, la résolution de noms et le chargement dynamique de classes sont combinées.
L'objectif de ce travail de séminaire est de fournir une compréhension approfondie de la faille de sécurité Log4Shell (CVE-2021-44228), révélée en décembre 2021 et classée parmi les failles de sécurité les plus critiques de ces dernières années. Ce travail explique à la fois les bases théoriques et présente une démonstration pratique de la vulnérabilité.
Pour illustrer concrètement la faille de sécurité Log4Shell, ce dépôt met en place un environnement isolé et conteneurisé qui reproduit de manière reproductible le déroulement complet de l'attaque. La démonstration repose sur trois composants centraux :
User-Agent de la requête HTTP, que les attaquants peuvent manipuler pour exploiter la vulnérabilité.Exploit.class). Comme le serveur LDAP, ce serveur est sous le contrôle de l'attaquant.Remarque : Des informations détaillées sur la configuration et l'exécution de la démonstration se trouvent dans les sections 4. Structure du projet et configuration et 5. Démo du projet.
Log4Shell est le nom d'une faille de sécurité critique dans la bibliothèque Java Log4j, portant la référence CVE-2021-44228. Elle permet à un attaquant d'exécuter du code arbitraire sur un serveur distant avec un effort minimal (Remote Code Execution, ou RCE).
La vulnérabilité affecte Log4j dans les versions 2.0 à 2.14.1 et est si grave qu'elle a été classée au niveau de risque le plus élevé par de nombreuses autorités de sécurité, dont le BSI (Office fédéral allemand de la sécurité des technologies de l'information).
Log4Shell est particulièrement dangereuse car ...
La cause fondamentale réside dans une fonctionnalité de Log4j qui permet de charger des contenus dynamiques dans les messages de journal via ce que l'on appelle des lookups. Combinée à JNDI (Java Naming and Directory Interface) et au protocole LDAP (Lightweight Directory Access Protocol), cette fonctionnalité permet de charger et d'exécuter des classes Java malveillantes distantes.
La découverte et la publication de la vulnérabilité ont déclenché une onde de choc mondiale en matière de sécurité. De nombreux systèmes ont dû être immédiatement patchés ou mis hors ligne. Par la suite, d'autres vulnérabilités connexes (par ex. CVE-2021-45046) ont été révélées, ce qui montre à quel point le problème était profond et dangereux.
Dans ce qui suit, les technologies impliquées et leur interaction sont expliquées en détail afin de développer une meilleure compréhension de la vulnérabilité.
Log4j est une bibliothèque créée par Apache pour journaliser les événements dans les applications Java. La journalisation est un outil central du développement logiciel pour surveiller les systèmes ou analyser les erreurs. Log4j est l'un des frameworks de journalisation les plus connus et les plus utilisés de l'écosystème Java, employé aussi bien dans de petites applications que dans de grands systèmes d'entreprise.
Lorsqu'un programme s'exécute, les événements suivants se produisent par exemple :
Ces événements peuvent être documentés à l'aide de journaux (logs), généralement sous forme de sortie texte dans la console, dans des fichiers ou via des protocoles réseau vers des serveurs de logs centraux. Grâce à une journalisation judicieuse, il est possible de retracer ce qu'une application a fait et à quel moment.
Log4j offre une infrastructure flexible et hautement configurable pour la génération et le traitement des messages de journal. Parmi les fonctions centrales figurent :
DEBUG, INFO, WARN, ERROR) qui permettent de contrôler le niveau de détail de la journalisation.D'autres fonctionnalités pertinentes pour ce travail de séminaire sont traitées dans les sections suivantes, notamment la fonctionnalité de placeholders et la fonctionnalité de lookup.
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;
public class Example { private static final Logger logger = LogManager.getLogger();