
Exploit pour Apache RocketMQ RCE (CVE-2023-33246) qui exécute des commandes arbitraires via la fonction de mise à jour de configuration, avec configuration de l'environnement et exemples d'utilisation.
Apache RocketMQ est l'une des plateformes de messagerie et de streaming distribuées les plus populaires et les plus utilisées. Une vulnérabilité d'exécution de commandes a récemment été signalée dans Apache RocketMQ affectant la version 5.1.0 et inférieures. Un utilisateur distant non authentifié peut exploiter cette vulnérabilité en utilisant la fonction de mise à jour de configuration pour exécuter des commandes avec le même niveau d'accès que celui du processus utilisateur RocketMQ.
Le nameserver dans RocketMQ agit comme un registre ou un magasin de métadonnées pour l'ensemble de l'infrastructure de messagerie.
Il conserve les informations sur les topics, les files d'attente et les brokers responsables du traitement des messages.
Les clients (producteurs et consommateurs) utilisent le nameserver pour découvrir les brokers avec lesquels ils doivent communiquer pour publier ou consommer des messages.
Le nameserver est responsable du routage dynamique, de l'équilibrage de charge et du basculement au sein du cluster RocketMQ.
Il écoute sur un port spécifique (généralement le port 9876 par défaut) pour les requêtes entrantes des clients et des brokers.
Les brokers sont les chevaux de trait du système RocketMQ, responsables du stockage et de la gestion des messages.
Chaque broker gère un ou plusieurs topics, qui sont des canaux logiques pour la communication des messages.
Les producteurs publient des messages sur des topics spécifiques, et les consommateurs s'abonnent à des topics pour recevoir les messages.
Les brokers gèrent le stockage, la réplication et la livraison des messages aux consommateurs en fonction des abonnements et des modèles de consommation de messages.
Ils maintiennent des files d'attente de messages pour chaque partition de topic, assurant un traitement et une livraison efficaces des messages.
Les brokers communiquent avec les nameservers pour s'enregistrer, mettre à jour les métadonnées et participer aux mécanismes de routage et d'équilibrage de charge du cluster.
Configurer un environnement RocketMQ local via Docker
docker pull apache/rocketmq:4.9.4
### Démarrer le nameserver
docker run -d --name rmqnamesrv -p 9876:9876 apache/rocketmq:4.9.4 sh mqnamesrv
### Démarrer le Broker
docker run -d --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -p 10909:10909 -p 10911:10911 -p 10912:10912 apache/rocketmq:4.9.4 sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
python3 check.py --ip 127.0.0.1 --port 9876

PCAP

La fonction UpdateBrokerConfig() est déclenchée lorsqu'une requête avec le code '25', qui est associé à RequestCode, est reçue.
python3 CVE-2023-33246_RocketMQ_RCE_EXPLOIT.py 127.0.0.1 10911 curl 127.0.0.1/exp

PCAP

Nous utilisons la configuration de serveur "rocketmqHome" trouvée dans le fichier broker.conf. Cette configuration définit la valeur de la variable d'environnement ROCKETMQ_HOME dans le processus utilisateur RocketMQ. En façonnant soigneusement cette valeur, nous pouvons exécuter les commandes de notre choix.

c'est ainsi que fonctionne cette vulnérabilité..