
CVE-2026-83531 के लिए रन करने योग्य Spring Boot प्रूफ-ऑफ-कॉन्सेप्ट, जो Apache Camel के dynamic-router-control endpoint में एक्सप्रेशन-लैंग्वेज इंजेक्शन को प्रदर्शित करता है और फिक्स का सत्यापन करता है।
Apache Camel की उस भेद्यता के लिए चलाने योग्य proof-of-concept reproducer, जिसमें dynamic-router-control endpoint ने subscription predicate और उसे compile करने के लिए उपयोग की जाने वाली भाषा का नाम दोनों को आने वाले संदेश से लिया (किसी DynamicRouterControlMessage के predicate / expressionLanguage फ़ील्ड, या CamelDynamicRouterPredicate / CamelDynamicRouterExpressionLanguage हेडर से)। इसके बाद सेवा ने उस भाषा को CamelContext से resolve किया और expression को एक Predicate में compile किया, बिना किसी allow-list और बिना किसी opt-in के। compile किए गए predicate का मूल्यांकन चैनल के माध्यम से route होने वाले प्रत्येक exchange पर किया गया — इसलिए कोई भी अभिनेता जो किसी ऐसे transport पर संदेश भेज सकता है जिसका route उसे किसी control endpoint तक forward करता है, अपनी पसंद का expression प्रदान कर सकता था, जिसका मूल्यांकन Camel प्रक्रिया के विशेषाधिकारों के साथ होता। classpath पर मौजूद कोई भी भाषा चुनी जा सकती थी, जिसमें simple भी शामिल है, जो हमेशा उपस्थित रहती है और डिफ़ॉल्ट थी।
केवल Camel Spring Boot। कोई
camel-quarkus-dynamic-routerextension नहीं है, इसलिए यह reproducer Camel Quarkus पर नहीं चलाया जा सकता।
| Runtime | Directory | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-dynamic-router 4.22.0 (प्रभावित; 4.22.1 में ठीक किया गया) |
ऐप एक Dynamic Router चैनल test सेट करता है (direct:start → dynamic-router://test)। हमलावर एक subscribe control संदेश भेजता है जिसमें हमलावर द्वारा चुना गया predicate expression और भाषा होती है:
CamelDynamicRouterPredicate = ${bean:detonator?method=detonate}
CamelDynamicRouterExpressionLanguage = simple
फिर एक संदेश चैनल के माध्यम से रूट किया जाता है, जो सदस्यता विधेय (subscription predicate) का मूल्यांकन करता है। प्रभावित बिल्ड पर
अभिव्यक्ति निष्पादित होती है, जो detonator.detonate() को आमंत्रित करती है — जो किसी भी नो-आर्ग्युमेंट रजिस्ट्री विधि के लिए एक
हानिरहित स्टैंड-इन है जिस तक कोई हमलावर पहुँच सकता है (और कोई भी भाषा, जैसे Groovy, मनमाना कोड सक्षम करती है)। ठीक किए गए बिल्ड पर नियंत्रण
एंडपॉइंट संदेश से विधेय/भाषा लेने से इंकार कर देता है।
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
प्रभावित बिल्ड पर अपेक्षित आउटपुट:
Subscription accepted.
>>> PROVEN: the attacker-supplied predicate expression was compiled and evaluated, invoking
>>> detonator.detonate() with the privileges of the Camel process ...
फिक्स्ड बिल्ड पर सब्सक्राइब को IllegalArgumentException: The subscription predicate expression, and the language used to compile it, cannot be taken from a control message. ... set 'allowPredicateFromMessage=true' ... के साथ अस्वीकार कर दिया जाता है।
| प्रॉपर्टी | मान |
|---|---|
| घटक | camel-dynamic-router (dynamic-router-control endpoint) |
| CWE | CWE-94 (कोड इंजेक्शन), CWE-917 (एक्सप्रेशन लैंग्वेज इंजेक्शन) |
| गंभीरता | उच्च |
| हमला वेक्टर | एक कंट्रोल संदेश (सब्सक्राइब/अपडेट) जो एक प्रेडिकेट एक्सप्रेशन और लैंग्वेज प्रदान करता है, ऐसे ट्रांसपोर्ट पर जिसका रूट इसे dynamic-router-control endpoint पर अग्रेषित करता है |
| प्रभाव | Camel प्रक्रिया के विशेषाधिकारों के साथ हमलावर द्वारा चुने गए एक्सप्रेशन (कोई भी क्लासपाथ लैंग्वेज) का मूल्यांकन — कोड निष्पादन |
| प्रभावित संस्करण | 4.4.0 से 4.18.5 से पहले तक, 4.19.0 से 4.22.1 से पहले तक |
| फिक्स्ड संस्करण | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24576 |
| श्रेय | Leon Zlobecki |
सलाह: https://camel.apache.org/security/CVE-2026-83531.html
प्रेडिकेट एक्सप्रेशन और उसकी लैंग्वेज अब डिफ़ॉल्ट रूप से कंट्रोल संदेश से नहीं लिए जाते: जो कंट्रोल संदेश उन्हें प्रदान करता है, उसे अस्वीकार कर दिया जाता है, जब तक कि रूट लेखक dynamic-router-control endpoint पर allowPredicateFromMessage=true के साथ स्पष्ट रूप से ऑप्ट-इन न करे। इच्छित मार्ग endpoint URI पर predicate और expressionLanguage को कॉन्फ़िगर करना है (रूट-लेखक-नियंत्रित), जैसा कि 4.4.0 से पहले के रिलीज़ में था।
बाहरी रूप से उत्पन्न संदेशों को dynamic-router-control endpoint पर अग्रेषित न करें; सदस्यताओं को केवल रूट-लेखक-नियंत्रित endpoints से प्रबंधित करें, और उन ट्रांसपोर्ट्स को प्रतिबंधित करें जो कंट्रोल चैनल तक पहुँच सकते हैं।
यह रिपॉज़िटरी शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है: Apache Camel उपयोगकर्ताओं को भेद्यता को समझने, यह सत्यापित करने में मदद करने के लिए कि क्या वे प्रभावित हैं, और पुष्टि करने के लिए कि अपग्रेड करने से यह हल हो जाता है। पेलोड एक सौम्य मार्कर बीन है। इस सामग्री का उपयोग उन सिस्टमों के विरुद्ध न करें जिनके आप स्वामी या संचालक नहीं हैं।