
CVE-2026-85254에 대한 실행 가능한 Spring Boot 및 Quarkus 재현 프로그램으로, 헤더 이름 대소문자 표기를 통한 Apache Camel camel-platform-http 헤더 에코 억제 우회를 취약 및 수정된 컨트롤과 함께 보여줍니다.
요청 헤더가 응답에 반사되는 것을 막는 가드가 헤더 이름을 대소문자를 구분하여 비교했지만, HTTP 헤더 이름은 대소문자를 구분하지 않는다는 Apache Camel 취약점에 대한 실행 가능한 개념 증명(PoC) 재현기이다. 호출자는 단순히 헤더 이름의 대소문자를 바꾸는 것만으로 억제를 무력화할 수 있었고, HTTP/2에서는 전혀 일치하지 않았는데, 이는 프로토콜이 전송 중 헤더 이름을 소문자로 요구하기 때문에 모든 HTTP/2 요청에 대해 억제가 무효였기 때문이다. 그 결과 호출자가 선택한 콘텐츠가 응답에 그대로 에코되며(응답 분할 및 캐시 포이즈닝 공격의 기반), 억제가 응답에서 차단하려는 바로 그 자격 증명 헤더(Authorization, Cookie, Proxy-Authorization)를 반사한다.
| 런타임 | 디렉터리 | 스택 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-platform-http-vertx 4.22.0 (영향받음; 4.22.1에서 수정됨), Camel의 Vert.x 서버 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-platform-http (Camel 4.15.0, 영향받음; 수정된 대조군 CQ 3.40.0 / Camel 4.22.1) |
두 모듈 모두 영향받는 동작 및 수정된 동작을 보여준다.
platform-http:/echo 엔드포인트가 제공된다. 이 엔드포인트의 HeaderFilterStrategy는 일반적인 요청 헤더를 응답에서 억제하도록 되어 있다. 드라이버는 전략을 직접 검사하고, 소문자(HTTP/2 스타일) 자격 증명 헤더를 담은 실제 요청도 전송한다.
Authorization(정규 표기)은 억제하지만 authorization(소문자)은 억제하지 않으며, authorization: Bearer <secret>을 담은 실제 요청이 응답에 그대로 에코된다.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: lowercase header echoed back; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85254-platform-http-header-echo-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: suppressed; >>> 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): lowercase header echoed back
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: suppressed
| 속성 | 값 |
|---|---|
| 구성 요소 | camel-platform-http (PlatformHttpEndpoint, COMMON_HTTP_REQUEST_HEADERS) |
| CWE | CWE-178 (대소문자 처리 부적절) |
| 심각도 | MEDIUM |
| 공격 벡터 | 이름의 대소문자가 표준 표기와 다른 요청 헤더 (예: 모든 HTTP/2 요청) |
| 영향 | 호출자가 선택한 헤더 내용이 응답에 그대로 반영됨 — 응답 분할 / 캐시 포이즈닝, 그리고 차단 대상인 자격 증명 헤더의 반사 |
| 영향받는 버전 | 4.0.0부터 4.18.5 이전, 4.19.0부터 4.22.1 이전 |
| 수정된 버전 | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24453 |
| 크레딧 | Claude Security Scan Tool |
권고문: https://camel.apache.org/security/CVE-2026-85254.html
PlatformHttpEndpoint는 이제 COMMON_HTTP_REQUEST_HEADERS를 대소문자를 구분하는 Set.of(...) 대신 대소문자를 구분하지 않는 TreeSet(String.CASE_INSENSITIVE_ORDER)에 보관하므로, 호출자가 헤더 이름의 대소문자를 어떻게 지정했든 — HTTP/2가 요구하는 전부 소문자 이름을 포함하여 — 차단이 일치합니다.
Camel 엔드포인트 앞에서 해당 헤더를 제거하거나, 내장된 차단에 의존하는 대신 라우트에서 응답에서 해당 헤더를 제거하십시오.
이 저장소는 교육 및 방어 목적으로 게시됩니다: Apache Camel 사용자가 취약점을 이해하고, 영향을 받는지 확인하며, 업그레이드가 문제를 해결하는지 검증할 수 있도록 돕기 위함입니다. 주입된 헤더 값은 무해한 로컬 픽스처입니다. 소유하거나 운영하지 않는 시스템에 이 자료를 사용하지 마십시오.