
Laboratoire basé sur Docker pour valider CVE-2021-44228 (Log4Shell) dans les applications Java, tester les atténuations et simuler une exécution de code à distance via des charges utiles LDAP et HTTP.
Cet outil vous permet de vérifier si une application web Java simple est vulnérable à CVE-2021-44228 pour une version de Java et de Log4J fournie par l'utilisateur.
Vous pouvez également [optionnellement] appliquer l'une des quelques mitigations prédéfinies.
Le laboratoire de simulation lancé par log4shell_validator.py utilise docker-compose pour simuler l'exploitation de la vulnérabilité log4j et l'obtention d'un RCE sur la machine vulnérable.
Tout d'abord, certaines images Docker doivent être construites. Le script ./build_images.sh devrait s'en occuper.
La simulation d'attaque se déroule de la manière suivante :
/2021-44228-via-message, elle enregistre toujours le champ d'en-tête User-Agent. Le code de cette application est disponible sous ./poc_template../exploit.sh qui envoie une charge utile à l'application vulnérable.cd marshalsec/ ;mvn clean package -DskipTests ;cd -./build-images.shpython log4shell_validator.py --java-version 8 --log4j-version 2.12.1~/workspace/CVE-2021-44228-playground$ python log4shell_validator.py --help
usage: log4shell_validator.py [-h] [--java-version JAVA_VERSION] --log4j-version LOG4J_VERSION [--no-cleanup] [--disable-trust-url] [--remove-jndi-lookup-class] [--disable-message-lookup] [--debug]
[--exploit-via-thread-context]
log4j-vulnerability-tester
optional arguments:
-h, --help show this help message and exit
--java-version JAVA_VERSION
version of java to be used
--log4j-version LOG4J_VERSION
version of log4j to be used
--no-cleanup Don't delete used containers.
--disable-trust-url Disable the LDAP trustURLCodebase setting on the victim app
--remove-jndi-lookup-class
Remove the JNDI Lookup class from the log4j jar file
--disable-message-lookup
Disable the JNDI message lookup in the victim app's JVM
--debug Display all container's logs
--exploit-via-thread-context
By sending the payload to an HTTP handler which makes use of Custom logging with ThreadContext, attempt to bypass the no-message-lookup mitigation
Ce validateur a été testé avec plusieurs combinaisons de Java7/8 et différentes versions de Log4J2. Pour plus d'exemples, veuillez consulter le pipeline de tests étendus dans l'onglet github actions.
Pour l'instant, les mitigations suivantes ont été implémentées :
1com.sun.jndi.ldap.object.trustURLCodebase sur False.-Dlog4j2.formatMsgNoLookups=TrueEn complément, un nouveau drapeau a été ajouté pour tester un vecteur d'exploitation pouvant contourner la désactivation des recherches de message : --exploit-via-thread-context
Ce logiciel a été créé uniquement à des fins de recherche et pour le développement de techniques de mitigation efficaces, et n'est pas destiné à être utilisé pour attaquer des systèmes sauf autorisation explicite. Les mainteneurs du projet ne sont pas responsables de l'utilisation abusive du logiciel. Utilisez-le de manière responsable.