
يكتشف ثغرة تنفيذ الأوامر عن بُعد (RCE) في Apache ActiveMQ Classic (CVE-2026-34197) عبر واجهة Jolokia API باستخدام نصوص Python وNmap NSE، مع التحقق من الوصول غير المصادق عليه وقابلية الإصدار للثغرة.
ثغرة تنفيذ تعليمات برمجية عن بُعد في Apache ActiveMQ Classic تسمح للمهاجم بتنفيذ تعليمات برمجية عشوائية عن طريق استدعاء عملية MBean الخاصة بـ addNetworkConnector(String) عبر واجهة Jolokia API (/api/jolokia/). يقوم المهاجم بتضمين معامل brokerConfig خبيث يشير إلى ملف Spring XML عن بُعد، والذي يقوم ActiveMQ بجلبه وتحليله، مما يؤدي إلى إنشاء كائنات Java عشوائية وتحقيق تنفيذ التعليمات البرمجية.
في إصدارات ActiveMQ من 6.0.0 حتى 6.1.1، تكون نقطة نهاية Jolokia غير مصادق عليها تمامًا، مما يجعل هذه ثغرة RCE غير مصادق عليها وبدون أي تفاعل من المستخدم.
كانت هذه الثغرة مخفية في قاعدة التعليمات البرمجية لمدة 13 عامًا قبل اكتشافها بمساعدة الذكاء الاصطناعي.
| الحقل | التفاصيل |
|---|---|
| معرف CVE | CVE-2026-34197 |
| البائع | Apache Software Foundation |
| المنتج | Apache ActiveMQ Classic |
| الإصدارات المتأثرة | جميع الإصدارات قبل 5.19.4 و 6.2.3 |
| RCE غير مصادق عليها | الإصدارات من 6.0.0 حتى 6.1.1 (Jolokia بدون مصادقة) |
| CVSS v3.1 | 8.8 (عالية) |
| CWE | CWE-94 — تحكم غير صحيح في توليد التعليمات البرمجية |
| ناقل الهجوم | الشبكة |
| المصادقة | مطلوبة في 5.x؛ غير مطلوبة في 6.0.0 حتى 6.1.1 |
| تفاعل المستخدم | لا يوجد |
| نضج الاستغلال | PoC عام متاح |
| تم التصحيح في | ActiveMQ Classic 5.19.4، 6.2.3 |
| عمر الثغرة | ~13 عامًا في قاعدة التعليمات البرمجية |
| الاكتشاف | بحث ثغرات بمساعدة الذكاء الاصطناعي |
Apache ActiveMQ Classic هو أحد أكثر وسطاء الرسائل مفتوحة المصدر انتشارًا في النظام البيئي لجافا. يطبّق مواصفات Java Message Service (JMS) ويعمل كالعمود الفقري للاتصال غير المتزامن في آلاف البيئات المؤسسية حول العالم.
يتعامل ActiveMQ مع كل شيء بدءًا من قوائم معالجة الطلبات وخطوط أنابيب المعاملات المالية وصولًا إلى تدفقات بيانات إنترنت الأشياء وحافلات أحداث الخدمات المصغرة. إذا كانت مؤسستك تستخدم خدمات مصغرة قائمة على جافا، أو بنية موجهة بالأحداث، أو أي شكل من أشكال الرسائل غير المتزامنة، فهناك احتمال كبير أن يكون ActiveMQ موجودًا في مكان ما في البنية التحتية.``` ActiveMQ Broker ┌───────────────────────┐ │ │ ┌──────────┐ │ ┌───────────────┐ │ ┌──────────┐ │ Producer │───────▶│ │ Message │ │───────▶│ Consumer │ │ (App A) │ send │ │ Queue / │ │ recv │ (App B) │ └──────────┘ │ │ Topic │ │ └──────────┘ │ └───────────────┘ │ ┌──────────┐ │ │ ┌──────────┐ │ Producer │───────▶│ ┌───────────────┐ │───────▶│ Consumer │ │ (App C) │ │ │ Jolokia │ │ │ (App D) │ └──────────┘ │ │ API (:8161) │ │ └──────────┘ │ └───────┬───────┘ │ └───────────┼───────────┘ │ ⚠️ CVE-2026-34197 Attack surface here
عندما يخترق المهاجم ActiveMQ، لا يحصل فقط على شل على خادم واحد. بل يجلس في **مركز كل تدفق رسائل** في المؤسسة، قادرًا على قراءة الرسائل أو تعديلها أو إعادة توجيهها أو حقنها بين الأنظمة الحرجة.
---
## الغوص العميق في الثغرة
### البنية: Jolokia وJMX
**JMX** (Java Management Extensions) هي الواجهة القياسية لإدارة تطبيقات جافا. وهي تكشف عن "MBeans" (Managed Beans) التي تسمح بمراقبة والتحكم في دواخل التطبيق. يكشف ActiveMQ عن MBeans لإدارة الوسطاء (brokers) والطوابير (queues) والمواضيع (topics) والاتصالات والمزيد.
**Jolokia** هو جسر JMX عبر HTTP. فهو يترجم عمليات JMX إلى واجهة برمجة تطبيقات JSON بنمط RESTful، مما يجعل من الممكن إدارة تطبيقات جافا عبر طلبات HTTP بدلاً من الحاجة إلى عميل JMX مخصص.
يأتي ActiveMQ Classic مع Jolokia مدمجًا، ويمكن الوصول إليه عبر `/api/jolokia/` على منفذ وحدة التحكم على الويب (الافتراضي: 8161).```
Traditional JMX Access:
┌──────────┐ ┌──────────────┐
│ JConsole │ ────── JMX Protocol ─────────> │ ActiveMQ │
│ │ (requires JMX client) │ MBeans │
└──────────┘ └──────────────┘
Jolokia HTTP Access:
┌──────────┐ ┌──────────────┐
│ curl / │ ── POST /api/jolokia/ ───────> │ ActiveMQ │
│ browser │ (just needs HTTP) │ MBeans │
└──────────┘ └──────────────┘
⬆️
Anyone with HTTP access can
invoke MBean operations
هنا تبدأ المشكلة. يكشف Jolokia عن القوة الكاملة لإدارة JMX من خلال واجهة HTTP بسيطة. ومن بين عمليات MBean المتاحة على الوسيط (broker) هي addNetworkConnector(String).
تم تصميم عملية addNetworkConnector(String) لإنشاء جسور شبكة بين مثيلات وسيط ActiveMQ. تقبل هذه العملية سلسلة URI تصف كيفية الاتصال بوسيط آخر.
يدعم ActiveMQ مخطط URI من نوع vm:// لاتصالات الوسيط داخل العملية (in-process). تدعم هذه الـ URIs معامل brokerConfig الذي يشير إلى ملف تكوين Spring XML. ويمكن لـ Spring XML إنشاء كائنات Java عشوائية.