
Apache RocketMQ RCE(CVE-2023-33246)のエクスプロイトで、設定更新機能を介して任意のコマンドを実行し、環境設定と使用例を含みます。
Apache RocketMQ は、最も人気があり広く使用されている分散メッセージングおよびストリーミングプラットフォームの1つです。 Apache RocketMQ のバージョン5.1.0以下に影響するコマンド実行の脆弱性が最近報告されました。リモートの未認証ユーザーが、設定更新機能を利用して、RocketMQ ユーザープロセスと同じアクセスレベルでコマンドを実行できる可能性があります。
RocketMQ のネームサーバーは、メッセージングインフラストラクチャ全体のレジストリまたはメタデータストアとして機能します。
トピック、キュー、およびメッセージ処理を担当するブローカーに関する情報を維持します。
クライアント(プロデューサーおよびコンシューマー)は、ネームサーバーを使用して、メッセージの公開または消費のために通信する必要があるブローカーを発見します。
ネームサーバーは、RocketMQ クラスター内の動的ルーティング、負荷分散、およびフェイルオーバーを担当します。
特定のポート(通常デフォルトではポート9876)で、クライアントおよびブローカーからの着信要求をリッスンします。
ブローカーは RocketMQ システムの主力であり、メッセージの保存と管理を担当します。
各ブローカーは、メッセージ通信の論理チャネルである1つ以上のトピックを管理します。
プロデューサーは特定のトピックにメッセージを公開し、コンシューマーはトピックを購読してメッセージを受信します。
ブローカーは、サブスクリプションとメッセージ消費パターンに基づいて、メッセージの保存、複製、およびコンシューマーへの配信を処理します。
各トピックパーティションに対してメッセージキューを維持し、効率的なメッセージ処理と配信を確保します。
ブローカーはネームサーバーと通信して、自身の登録、メタデータの更新、およびクラスターのルーティングと負荷分散メカニズムに参加します。
Docker を使用してローカルの RocketMQ 環境をセットアップします
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

UpdateBrokerConfig() 関数は、RequestCode に関連付けられたコード '25' のリクエストを受信したときにトリガーされます。
python3 CVE-2023-33246_RocketMQ_RCE_EXPLOIT.py 127.0.0.1 10911 curl 127.0.0.1/exp

PCAP

broker.conf ファイルにある "rocketmqHome" サーバー設定を利用します。この設定は、RocketMQ ユーザープロセス内の環境変数 ROCKETMQ_HOME の値を設定します。この値を注意深く細工することで、任意のコマンドを実行できます。

これがこの脆弱性の仕組みです..