
CVE 2021-44228 Preuve de concept. Log4Shell est une attaque contre les serveurs utilisant des versions vulnérables de Log4J.
Apache Log4j2 2.0-beta9 jusqu'à 2.15.0 (à l'exception des versions 2.12.2, 2.12.3 et 2.3.1)
Les fonctionnalités JNDI utilisées dans la configuration, les messages de log et les paramètres ne protègent pas contre les points de terminaison LDAP contrôlés par un attaquant et autres points de terminaison liés à JNDI. Un attaquant capable de contrôler les messages de log 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. Depuis log4j 2.15.0, ce comportement est désactivé par défaut. À partir de la version 2.16.0 (ainsi que des versions 2.12.2, 2.12.3 et 2.3.1), cette fonctionnalité a été complètement supprimée. Notez que cette vulnérabilité est spécifique à log4j-core et n'affecte pas log4net, log4cxx ou d'autres projets Apache Logging Services.
Par conséquent, elle est notée CVSS v3 avec un score de 10.0 (SCORE MAXIMAL).
Heureusement, il s'agit d'une attaque zero-day. Les développeurs l'ont donc corrigée en un jour.
Le projet Apache Log4j fait partie des logiciels open source les plus déployés, fournissant des capacités de journalisation pour les applications Java.
Tout d'abord, cette PoC utilise :
Dans http_server, vous trouverez 2 fichiers : MyExploit.java et son fichier .class compilé MyExploit.class
💡RAPPEL : javac nomfichier.java pour compiler une classe Java :)
Vous pouvez exécuter un serveur HTTP à la volée en utilisant la commande : python -m http.server [PORT] Dans ce cas
Dépôt de marshalsec Détails ici
Dépôt de christophetd Détails ici
Généralement, le champ cible dans l'en-tête de la requête est le User-agent ; dans cette PoC, ce sera X-Api-Version
Cette PoC lance une exécution de commande sur le serveur vulnérable afin de créer un fichier nommé "pwned_by_pierpaolosestito_dev" dans le dossier tmp. MyExploit.java contient également une charge malveillante qui permet à l'attaquant d'effectuer une exécution de code inversée et d'obtenir un shell inversé.
💡ASTUCE : Si vous lancez docker exec [id_conteneur] ifconfig, vous remarquerez qu'il s'agit d'un runner qui n'est pas dans votre sous-domaine local. Pour effectuer une RCE, vous pouvez modifier l'IP dans MyExploit.java qui contient une chaîne de commande RCE. Étant donné que le runner Docker ne peut pas vous contacter sur une IP privée, vous avez besoin d'une IP publique et vous pouvez l'obtenir en utilisant la redirection de port.