
CVE-2026-78162 के लिए रन करने योग्य प्रूफ-ऑफ-कॉन्सेप्ट रिप्रोड्यूसर, जो Spring Boot और Quarkus में Apache Camel camel-hazelcast में अनऑथेंटिकेटेड Java डीसेरियलाइज़ेशन को प्रदर्शित करता है।
Apache Camel की उस भेद्यता के लिए चलाने योग्य प्रूफ़-ऑफ़-कॉन्सेप्ट रिप्रोड्यूसर, जिसमें camel-hazelcast ने दो कॉन्फ़िगरेशन पथों पर Hazelcast इंस्टेंस JavaSerializationFilterConfig के बिना बनाए थे, जहाँ तक CVE-2026-43865 की हार्डनिंग कभी नहीं पहुँची। उन पथों पर Camel द्वारा बनाया गया Hazelcast सदस्य/क्लाइंट क्लस्टर से पढ़े गए मानों को बिना किसी क्लास प्रतिबंध के डीसेरियलाइज़ करता है, इसलिए क्लस्टर में प्रकाशित करने में सक्षम एक हमलावर अपनी पसंद के एक सीरियलाइज़्ड Java ऑब्जेक्ट को Hazelcast की सीरियलाइज़ेशन परत के भीतर डीसेरियलाइज़ करवा सकता है — रिमोट कोड एग्ज़िक्यूशन (CWE-502)। Hazelcast क्लस्टर में डिफ़ॉल्ट रूप से न तो प्रमाणीकरण और न ही TLS सक्षम होता है।
यह रिप्रोड्यूसर दोनों पथों में से सबसे स्पष्ट को चलाता है: ReplicatedHazelcastAggregationRepository, जो super.doStart() को कॉल किए बिना doStart() को ओवरराइड करता है और, किसी प्रभावित बिल्ड पर, डिफ़ॉल्ट फ़िल्टर लागू किए बिना अपना स्वयं का स्थानीय सदस्य शुरू करता है। (सहोदर पथ, hazelcastMode=client के लिए HazelcastDefaultComponent#getOrCreateHzClientInstance(), उसी फ़िक्स द्वारा कवर किया गया है।)
| रनटाइम | निर्देशिका | स्टैक |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-hazelcast 4.22.0 (प्रभावित; 4.22.1 में ठीक किया गया) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-hazelcast 3.29.0 (Camel 4.15.0, प्रभावित) |
फ़िक्स्ड-बनाम-प्रभावित नियंत्रण: फ़िक्स Camel 4.18.5 / 4.22.1 / 4.23.0 में आता है। Spring Boot मॉड्यूल प्रभावित बिल्ड (4.22.0) और फ़िक्स्ड बिल्ड (4.22.1) दोनों को चला सकता है, इसलिए यह पैच किए गए व्यवहार को भी प्रदर्शित करता है। अभी तक किसी भी जारी Camel Quarkus में फ़िक्स्ड Camel शामिल नहीं है (नवीनतम, 3.29.0, Camel 4.15.0 पर है), इसलिए Quarkus मॉड्यूल केवल प्रभावित मामले को प्रदर्शित करता है।
ऐप एक Camel रूट चलाता है जो ReplicatedHazelcastAggregationRepository द्वारा समर्थित है और जिसमें कोई बाहरी रूप से आपूर्ति किया गया HazelcastInstance नहीं है, इसलिए रिपॉज़िटरी अपना स्वयं का स्थानीय Hazelcast सदस्य शुरू करती है (डिफ़ॉल्ट क्लस्टर dev, पोर्ट 5701)। प्रभावित बिल्ड पर उस सदस्य के पास कोई JavaSerializationFilterConfig नहीं होता है।
फिर एक हमलावर क्लाइंट क्लस्टर में शामिल होता है और बैकिंग ReplicatedMap में एक सीरियलाइज़्ड ऑब्जेक्ट प्रकाशित करता है। एक Hazelcast क्लाइंट केवल बाइट्स भेजता है — यह मैप मानों को संग्रहीत या डीसेरियलाइज़ नहीं करता — इसलिए जो भी डीसेरियलाइज़ेशन होता है वह पीड़ित सदस्य के कारण होता है। प्रकाशित ऑब्जेक्ट एक जानबूझकर सौम्य मार्कर है, com.example.PwnMarker: इसमें कोई गैजेट चेन नहीं है और यह कोई कमांड नहीं चलाता, यह केवल (JVM-व्यापी फ़्लैग के माध्यम से) रिकॉर्ड करता है कि इसका readObject निष्पादित हुआ। एक वास्तविक हमलावर RCE के लिए यहाँ एक ज्ञात गैजेट क्लास प्रकाशित करेगा — यह साबित करना पर्याप्त है कि क्लास को डीसेरियलाइज़ किया गया था।
चूँकि फ़िक्स का डिफ़ॉल्ट फ़िल्टर java., javax. और org.apache.camel. क्लास-नाम उपसर्गों की एक व्हाइटलिस्ट है, com.example.PwnMarker एक आदर्श ओरेकल है:
PwnMarker डीसेरियलाइज़ होता है, पीड़ित सदस्य पर readObject चलता है → PROVEN।readObject से पहले com.example.PwnMarker को अस्वीकार कर देती है → java.lang.SecurityException: Resolving class com.example.PwnMarker is not allowed → शोषित नहीं।cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
प्रभावित बिल्ड पर अपेक्षित आउटपुट:
=== CVE-2026-78162 — camel-hazelcast ReplicatedHazelcastAggregationRepository ===
=== missing JavaSerializationFilterConfig on the Camel-built member ===
Attacker client joined the victim cluster 'dev' at 127.0.0.1:5701.
Attacker published a com.example.PwnMarker into ReplicatedMap 'aggregation'.
Result:
>>> PROVEN: the Camel-built Hazelcast member deserialized an attacker-supplied, non-whitelisted
>>> class (com.example.PwnMarker) with no JavaSerializationFilterConfig in effect — its readObject
>>> executed inside the victim. A real attacker would publish a gadget class here instead, for RCE.
>>> PwnMarker.readObject executed inside the victim member; tag=attacker-rce-marker; thread=hz.*.partition-operation.thread-1
| गुण | मान |
|---|---|
| घटक | camel-hazelcast (camel-hazelcast-starter / camel-quarkus-hazelcast) |
| CWE | CWE-502 (अविश्वसनीय डेटा का डीसेरियलाइज़ेशन) |
| गंभीरता | मध्यम |
| आक्रमण वेक्टर | एक आक्रमणकारी जो उस Hazelcast क्लस्टर में प्रकाशित कर सकता है जिससे एक प्रभावित इंस्टेंस जुड़ा है; Camel-निर्मित सदस्य/क्लाइंट प्रकाशित ऑब्जेक्ट को बिना किसी क्लास प्रतिबंध के डीसेरियलाइज़ करता है |
| प्रभाव | Camel प्रक्रिया के भीतर रिमोट कोड निष्पादन (एक गैजेट क्लास के माध्यम से), Camel द्वारा एक्सचेंज को संसाधित करने से पहले |
| प्रभावित संस्करण | 4.0.0 से 4.18.5 से पहले तक, 4.19.0 से 4.22.1 से पहले तक |
| ठीक किए गए संस्करण | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24413, CAMEL-24420 |
| श्रेय | TCBS से cattier; Leon Zlobecki |
सलाह: https://camel.apache.org/security/CVE-2026-78162.html
HazelcastSerializationFilterHelper.applyDefault(...) में एक ClientConfig ओवरलोड जोड़ा गया है और अब इसे दोनों
पहले से अनकवर पथों पर कॉल किया जाता है — ReplicatedHazelcastAggregationRepository#doStart() और
HazelcastDefaultComponent#getOrCreateHzClientInstance() — ताकि Camel द्वारा स्वयं बनाए गए प्रत्येक Hazelcast कॉन्फ़िगरेशन में
डिफ़ॉल्ट JavaSerializationFilterConfig (व्हाइटलिस्ट java. / javax. / org.apache.camel., ब्लैकलिस्ट
java.net.) शामिल हो। उपयोगकर्ता द्वारा प्रदान किया गया Config, ClientConfig या HazelcastInstance अभी भी अछूता रहता है। यह सलाह
CVE-2026-43865 के अपूर्ण-समाधान की अनुवर्ती है।
JavaSerializationFilterConfig वाला एक स्पष्ट Hazelcast कॉन्फ़िगरेशन प्रदान करें, या पहले से निर्मित
HazelcastInstance इंजेक्ट करें (उपयोगकर्ता द्वारा प्रदान किया गया कॉन्फ़िगरेशन Camel द्वारा कभी अधिलेखित नहीं किया जाता); JVM-व्यापी
-Djdk.serialFilter=... सेट करें; और Hazelcast क्लस्टर प्रमाणीकरण और TLS सक्षम करें।
यह रिपॉज़िटरी शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है: Apache Camel उपयोगकर्ताओं को भेद्यता को समझने में मदद करने, यह सत्यापित करने कि क्या वे प्रभावित हैं, और यह पुष्टि करने के लिए कि अपग्रेड करने से यह हल हो जाती है। पेलोड एक सौम्य मार्कर है जो कोई कोड निष्पादित नहीं करता। इस सामग्री का उपयोग उन सिस्टमों के विरुद्ध न करें जिनके आप स्वामी या संचालक नहीं हैं।