
Apache Camel camel-mail MimeMultipart 헤더 인젝션(CVE-2026-59230)에 대한 개념 증명 재현기로, Spring Boot 및 Quarkus 런타임에서 CamelHttpUri 인젝션을 통한 SSRF를 시연합니다.
MimeMultipart 헤더 인젝션 (headersInline)동일한 Apache Camel 취약점에 대한 실행 가능한 개념 증명(PoC) 재현 코드로, 런타임별로 하나씩 있습니다:
두 프로젝트 모두 영향을 받는 버전입니다 (이슈는 4.14.9 / 4.18.4 / 4.22.0에서 수정됨). 둘 다 동일한
결함을 보여줍니다: camel-mail MimeMultipart 데이터 포맷은 headersInline=true로 언마샬링할 때 수신 메시지의 모든
비표준 MIME 헤더를 setHeader를 통해 Camel Exchange에 복사하면서 어떤
HeaderFilterStrategy도 적용하지 않습니다. MIME 헤더 이름은 신뢰할 수 없는 본문에서 오므로, 발신자는
Camel 내부 네임스페이스(예: CamelHttpUri)에 헤더를 배치하여 라우트가 HTTP 경계에서 Camel* 헤더를
제거한 후에도 Exchange에 설정되게 할 수 있습니다. 이후 다운스트림 컴포넌트는 주입된 제어 헤더를 읽습니다 (헤더
인젝션 → CWE-74).
이 재현 코드들에서 주입된 CamelHttpUri는 다운스트림 HTTP 프로듀서를 의도된
/legit-backend에서 내부 /internal/secret 엔드포인트로 리다이렉트하여(SSRF) 내부 데이터를 눈에 보이게 반환합니다.
각 하위 디렉터리는 자체 Dockerfile, docker-compose.yml, 그리고 전체 세부 정보와 재현 단계가 담긴 README를 포함하는
독립적인 프로젝트입니다. 간단히 말해, 둘 중 하나에서 다음을 실행합니다:
cd camel-spring-boot # or: cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
영향을 받는 빌드에서 예상되는 출력:
1) Benign MIME (no injected header):
/ingest responded: LEGIT: your message was accepted
2) Malicious MIME (injected MIME header 'CamelHttpUri: http://localhost:8080/internal/secret'):
/ingest responded: SECRET: internal_db_password=S3cr3t-INTERNAL-9f2a
>>> PROVEN: ... redirecting the HTTP producer to an internal service (SSRF): true
보안 권고: https://camel.apache.org/security/CVE-2026-59230.html
MimeMultipartDataFormat.copyNonStandardHeaders는 이제 각 수신 MIME 헤더를 Exchange에 설정하기 전에
MailHeaderFilterStrategy를 거치게 됩니다. 이는 메일 컨슈머가 이미 적용하는 인바운드 필터링과 일치하므로,
신뢰할 수 없는 본문에서 온 Camel* 헤더는 그대로 복사되지 않고 삭제됩니다:
// fixed
if (headerFilterStrategy.applyFilterToExternalHeaders(header.getName(), header.getValue(),
camelMessage.getExchange())) {
continue; // filtered
}
camelMessage.setHeader(header.getName(), header.getValue());
이 저장소는 교육 및 방어 목적으로 게시되었습니다: Apache Camel 사용자가 취약점을 이해하고, 자신이 영향을 받는지 확인하며, 업그레이드가 이를 해결하는지 확인할 수 있도록 돕기 위한 것입니다. 페이로드는 무해합니다 (로컬 엔드포인트로의 리다이렉트). 이 자료를 소유하거나 운영하지 않는 시스템에 사용하지 마십시오.
| 런타임 | 디렉터리 | 스택 |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-spring-boot 4.18.2 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0 (Camel 4.20.0 번들 포함) |
| 속성 | 값 |
|---|
| Component | camel-mail — MimeMultipart 데이터 포맷 (Spring Boot: camel-mail-starter; Quarkus: camel-quarkus-mail) |
| CWE | CWE-20 (부적절한 입력 검증) → CWE-74 (인젝션) |
| Attack vector | headersInline=true로 언마샬링된 조작된 MIME 멀티파트 본문 |
| Impact | Exchange에 Camel 내부 제어 헤더 주입 (여기서: CamelHttpUri → SSRF) |
| Affected Versions | 2.17.0부터 4.14.9 미만, 4.15.0부터 4.18.4 미만, 4.19.0부터 4.22.0 미만 |
| Fixed Versions | 4.14.9, 4.18.4, 4.22.0 |
| JIRA | CAMEL-23891 |
| Credit | Atuin — 자동화된 취약점 탐지 엔진, Tencent Xuanwu Lab의 anciety |