
Dépôt pour exploiter la CVE-2023-46604 signalée pour ActiveMQ
Ce dépôt est un guide avec des exemples sur la façon d'exploiter la CVE-2023-46604
L'exploit tire parti de l'utilisation de la réflexion pour instancier des classes d'exception via une commande malveillante qui, au lieu d'être une commande valide, envoie comme classe d'exception une classe Spring pour charger des beans et comme paramètre constructeur de chaîne une URL à partir de laquelle télécharger un fichier XML contenant les définitions de beans Spring.
Ce bean Spring est en fait un java.lang.ProcessBuilder qui exécutera n'importe quelle commande bash avec les mêmes permissions utilisateur que
celui qui exécute le client ou le serveur Java Active MQ.
J'aurais aimé pouvoir faire la connexion HTTP en code Python, mais d'après ce que j'ai vu, le chargeur de beans Spring fait pour une raison inconnue deux appels HTTP et je suis plus familier avec la programmation multithread en Java qu'en Python
Cet exploit concerne un client ActiveMQ établissant une connexion avec un serveur broker, qui à son tour est un serveur malveillant qui rendra ce client vulnérable à l'exécution de code à distance.
L'exploit est divisé en deux processus :
Cela a été testé avec Python 3.6 et Java 17
Compilez le projet Java :
cd activemq-exploit
mvn clean package
Revenez à la racine du projet avec cd .., puis exécutez python scripts/client_exploit.py
Sur un autre terminal, exécutez le code Java :
cd activemq-exploitjava -jar target/activemq-exploit-1.0-SNAPSHOT.jarL'exploit côté serveur se connecte à un broker serveur ActiveMQ et envoie les commandes malveillantes. Celui-ci a été uniquement utilisé avec ActiveMQ Artemis 2.18 et n'a pas pu exploiter la vulnérabilité car Artemis n'est pas livré avec Spring, et le seul exploit connu pour l'exécution de code à distance passe par une classe Spring pour charger des beans Spring.
Cependant, le script Python dans scripts/server_exploit.py fait la même chose que l'exploit côté client, mais en se connectant à un serveur.
Il manque l'authentification, donc une adaptation de l'handshake Open Wire est peut-être nécessaire.