
Exploit Python pour la vulnérabilité RCE CVE-2022-22965 (Spring4Shell) dans Java Spring Core. Injecte un webshell JSP via la configuration des logs Tomcat pour exécuter des commandes à distance sur les serveurs vulnérables.
La vulnérabilité CVE-2022-22965, connue sous le nom de Spring4Shell, est une faille d'exécution de code à distance (RCE) dans le framework Java Spring Core, présente dans les versions antérieures à 5.3.18 et 5.2.20. Cette vulnérabilité permet à un attaquant d'injecter du code et de l'exécuter à distance sur un serveur vulnérable en exploitant une mauvaise configuration des journaux Tomcat. Elle a été découverte en mars 2022 et affecte les applications activeMQ, Spring MVC et Spring WebFlux fonctionnant avec une version de JDK >= 9.

On se rassure déjà si on a une version de JDK >= 9, si non on l'avtive :

Prérequis ✔ Les modules requests et BeautifulSoup sont nécessaires pour que l'exploit fonctionne. On les installe avec :
pip3 install bs4
pip3 install requests
Scan du réseau

Ici, on a bien le service activeQM version 5.17.3 en écoute.
Dans notre stratégie d'exploit nous utliserons un script python développé nommé spring4shell.py joint à ce projet.
Objectif de ce script : Ce script Python permet d'exploiter la faille CVE-2022-22965 en modifiant les paramètres de journalisation de Tomcat pour injecter un webshell dans les fichiers journaux, permettant ainsi l'exécution de commandes distantes sur le serveur compromis.
Explication du Code Python
Configuration des sorties terminal :
La classe settings adapte l'affichage dans le terminal en fonction des options choisies, avec des couleurs pour différencier les messages d’information, d’avertissement, et d’erreur.
Génération des variables aléatoires :
Les fonctions filename() et password() génèrent des chaînes hexadécimales aléatoires pour sécuriser le nom du fichier et le mot de passe du webshell.
Exploitation de la vulnérabilité :
Le script envoie des requêtes pour modifier les paramètres de journalisation de Tomcat, en injectant des fragments de code JSP via les journaux. En configurant les journaux pour écrire dans le répertoire webapps/ROOT, chaque entrée devient interprétable comme du code JSP.
Le fichier de journal injecté agit alors comme un webshell accessible via un navigateur pour exécuter des commandes.
Interaction avec le Webshell :
La classe terminal ouvre une interface interactive permettant d'envoyer des commandes au serveur compromis. Les commandes sont envoyées en paramètre cmd, et les réponses sont affichées dans le terminal.
Après exécution du script, un lien vers le webshell est fourni : Via la commande :
python3 spring4shell.py http://172.17.0.1

On optiens un accès direct au shell de notre serveur activemq afin d'exécuter toutes les commandes qu'on souhaite.
Fin de l'exploit !!!