
مستودع لاستغلال الثغرة CVE-2023-46604 المُبلَّغ عنها في ActiveMQ
هذا المستودع دليل مع أمثلة حول كيفية استغلال CVE-2023-46604
يستغل هذا الاستغلال استخدام الانعكاس (reflection) لإنشاء كائنات من فئات Exception عبر أمر خبيث، حيث بدلاً من أن يكون أمراً صالحاً، يرسل كفئة الاستثناء فئة Spring لتحميل الـ beans، وكمعامل سلسلة نصية للباني (constructor) رابط URL يُحمَّل منه ملف XML يحتوي على تعريفات Spring Bean.
هذا الـ Spring Bean هو في الواقع java.lang.ProcessBuilder الذي سيشغّل أي أمر bash بنفس صلاحيات المستخدم الذي يقوم بتشغيل عميل أو خادم Java Active MQ.
أتمنى لو كنت أستطيع إجراء اتصال HTTP في كود Python، ولكن على حد ما رأيت، فإن محمّل Spring Bean لسبب ما يقوم بطلبين HTTP، وأنا أكثر دراية بالبرمجة متعددة الخيوط في Java من Python
هذا الاستغلال موجّه لعميل ActiveMQ الذي يقوم بالاتصال بخادم وسيط (broker)، والذي يكون بدوره خادماً خبيثاً يجعل هذا العميل عرضة لتنفيذ الأكواد عن بُعد.
ينقسم الاستغلال إلى عمليتين:
تم اختبار هذا مع Python 3.6 و Java 17
قم بترجمة مشروع Java:
cd activemq-exploit
mvn clean package
ارجع إلى المجلد الجذر للمشروع باستخدام cd ..، ثم شغّل python scripts/client_exploit.py
في طرفية أخرى، شغّل كود Java:
cd activemq-exploitjava -jar target/activemq-exploit-1.0-SNAPSHOT.jarاستغلال الخادم يتصل بخادم وسيط ActiveMQ ويرسل الأوامر الخبيثة. تم استخدام هذا فقط مع ActiveMQ Artemis 2.18 ولم يتمكن من استغلال الثغرة لأن Artemis لا يأتي مُضمّناً مع Spring، والاستغلال الوحيد المعروف لتنفيذ الأكواد عن بُعد يكون عبر فئة Spring لتحميل Spring Beans.
ومع ذلك، فإن سكربت Python في scripts/server_exploit.py يقوم بنفس ما يفعله استغلال العميل، لكنه يتصل بخادم فقط.
إنه يفتقر إلى المصادقة، لذا ربما يكون من الضروري تكييف مصافحة Open Wire.