Apache-RocketMQ-CVE-2023-33246- — استغلال لثغرة Apache RocketMQ RCE (CVE-2023-33246) التي تنفذ أوامر عشوائية عبر وظيفة تحديث التكوين، مع إعداد البيئة وأمثلة الاستخدام. | Kitploit
CVE-2023-33246: ثغرة تنفيذ كود عن بعد في Apache RocketMQ
نظرة عامة
Apache RocketMQ هي واحدة من أشهر منصات المراسلة والبث الموزع وأكثرها استخدامًا. تم الإبلاغ مؤخرًا عن ثغرة تنفيذ أوامر في Apache RocketMQ تؤثر على الإصدار 5.1.0 والإصدارات الأقل. يمكن لمستخدم غير مصادق عن بعد استغلال هذه الثغرة باستخدام وظيفة تحديث التكوين لتنفيذ أوامر بنفس مستوى الوصول الذي يتمتع به عملية مستخدم RocketMQ.
المكونات الأساسية
Nameserver (خادم الأسماء):
يعمل خادم الأسماء في RocketMQ كسجل أو مخزن بيانات وصفية للبنية التحتية للمراسلة بأكملها.
يحتفظ بمعلومات حول الموضوعات (topics)، والصفوف (queues)، والوسطاء (brokers) المسؤولين عن معالجة الرسائل.
يستخدم العملاء (المنتجون والمستهلكون) خادم الأسماء لاكتشاف الوسطاء الذين يحتاجون إلى التواصل معهم لنشر أو استهلاك الرسائل.
يكون خادم الأسماء مسؤولاً عن التوجيه الديناميكي، وتوزيع الأحمال، والتعافي من الأعطال داخل مجموعة RocketMQ.
يستمع على منفذ محدد (عادةً المنفذ 9876 افتراضيًا) للطلبات الواردة من العملاء والوسطاء.
Broker (الوسيط):
الوسطاء هم العمالة الأساسية في نظام RocketMQ، المسؤولين عن تخزين وإدارة الرسائل.
يدير كل وسيط موضوعًا واحدًا أو أكثر، وهي قنوات منطقية لتواصل الرسائل.
ينشر المنتجون رسائل إلى موضوعات محددة، ويشترك المستهلكون في الموضوعات لتلقي الرسائل.
يتولى الوسطاء تخزين الرسائل، وتكرارها، وتسليمها إلى المستهلكين بناءً على الاشتراكات وأنماط استهلاك الرسائل.
يحتفظون بصفوف رسائل لكل قسم موضوع (topic-partition)، مما يضمن معالجة وتسليم فعال للرسائل.
يتواصل الوسطاء مع خوادم الأسماء لتسجيل أنفسهم، وتحديث البيانات الوصفية، والمشاركة في آليات التوجيه وتوزيع الأحمال في المجموعة.
إعداد البيئة:-
إعداد بيئة RocketMQ محليًا عبر Docker
root@kitploit:~
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
أمثلة الاستخدام
1. التحقق من الإصدار
باستخدام التكوين الافتراضي، تبدأ مجموعة الوسيط (Broker cluster) على منفذ TCP 9876 لاستقبال الرسائل من العميل. على سبيل المثال، فيما يلي اتصال نموذجي بين عميل ووسيط لجلب إصدار RocketMQ.
root@kitploit:~
python3 check.py --ip 127.0.0.1 --port 9876
PCAP
2. تحليل الاستغلال
يتم تفعيل الدالة UpdateBrokerConfig() عند استلام طلب بالرمز '25'، المرتبط بـ RequestCode.
نستخدم إعداد الخادم "rocketmqHome" الموجود في ملف broker.conf. يحدد هذا الإعداد قيمة المتغير البيئي ROCKETMQ_HOME داخل عملية مستخدم RocketMQ. من خلال صياغة هذه القيمة بعناية، يمكننا تنفيذ الأوامر التي نختارها.