
Apache Camel camel-undertow 헤더 필터 우회(CVE-2026-78329)에 대한 개념 증명(PoC) 재현기로, websocket.* 헤더 주입을 시연하고 영향을 받는 버전 세부 정보와 수정 검증 방법을 제공합니다.
websocket.* 주입)Apache Camel 취약점에 대한 실행 가능한 개념 증명(PoC) 재현 도구로, UndertowEndpoint가 headerFilterStrategy를 기본 HttpHeaderFilterStrategy로 설정하고 해당 인스턴스를 자신이 생성하는 UndertowHttpBinding에 주입하여, DefaultUndertowHttpBinding이 설치하는 UndertowHeaderFilterStrategy를 덮어쓰는 문제를 보여줍니다. 배포 시 사용자 정의 바인딩이나 명시적 headerFilterStrategy를 제공하지 않는 한, undertow 특정 필터링은 실행되지 않았습니다 — 전략 객체는 생성 직후, 참조되기 전에 대체되었습니다.
| 런타임 | 디렉터리 | 스택 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-undertow 4.18.2 |
Camel Quarkus:
camel-quarkus-undertow확장은 존재하지 않습니다 (Quarkus는 자체 Vert.x HTTP 스택을 사용). 따라서 이 구성 요소는 Camel Quarkus에서 실행할 수 없습니다 — 재현 도구는 Spring Boot 전용입니다.
그 결과, 레거시 websocket. Exchange 헤더 접두사가 undertow 전송 경계에서 양방향 모두 필터링되지 않습니다. 따라서 undertow HTTP 컨슈머는 해당 형식의 인바운드 와이어 헤더(websocket.connectionKey, websocket.connectionKey.list, websocket.sendToAll, …)를 Exchange에 매핑하고, undertow WebSocket 프로듀서는 이를 디스패치 지시문으로 읽어 라우트가 의도한 대상이 아닌 다른 피어에게 전달하도록 만들 수 있습니다 — atmosphere-websocket CVE-2026-71300과 동일한 디스패치 하이재킹 계열입니다.
이 재현 도구는 websocket.* 디스패치 헤더와 Camel* 제어 헤더를 담은 HTTP 요청을 전송하고, 실제로 Exchange에 도달한 내용을 보여줍니다: websocket.* 헤더는 경계를 통과(필터링되지 않음)하는 반면, Camel*은 제거됩니다 — 기본 필터(undertow 필터가 아닌)가 적용되었음을 증명합니다.
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
영향을 받는 빌드에서 기대되는 출력:
What actually reached the Exchange, as echoed by the undertow route:
websocket.connectionKey.list on Exchange = [attacker-connection-key]
websocket.sendToAll on Exchange = [true]
CamelFoo on Exchange (control) = []
>>> PROVEN: the undertow endpoint applied the base HttpHeaderFilterStrategy (Camel* filtered) instead of the
>>> UndertowHeaderFilterStrategy, so the legacy websocket.* dispatch headers passed onto the Exchange ...
공고: https://camel.apache.org/security/CVE-2026-78329.html
undertow 엔드포인트는 더 이상 바인딩의 UndertowHeaderFilterStrategy를 덮어쓰지 않으며, 이 전략은 (CAMEL-23588에서 추가된) websocket. 접두사를 양방향으로 필터링합니다 — 따라서 디스패치 헤더는 전송 경계에서 제거되고 외부 발신자는 더 이상 이를 주입할 수 없습니다.
이 저장소는 교육 및 방어 목적으로 게시됩니다: Apache Camel 사용자가 취약점을 이해하고, 자신이 영향을 받는지 확인하며, 업그레이드가 문제를 해결하는지 확인할 수 있도록 돕기 위함입니다. 본인 소유 또는 운영 중이 아닌 시스템에 이 자료를 사용하지 마십시오.
| 속성 | 값 |
|---|
| 구성 요소 | camel-undertow (camel-undertow-starter) |
| CWE | CWE-20 (부적절한 입력 검증) → CWE-74 (주입) |
| 공격 경로 | undertow HTTP 컨슈머의 인바운드 websocket.* 헤더가 undertow WebSocket 프로듀서에 의해 디스패치 지시문으로 읽힘 |
| 영향 | WebSocket 프로듀서의 디스패치 결정을 장악 — 임의의 WebSocket 피어에게 전달 또는 전달 차단 |
| 영향 버전 | 4.11.0 이상 4.14.9 미만, 4.15.0 이상 4.18.4 미만, 4.19.0 이상 4.22.0 미만 |
| 수정 버전 | 4.14.9, 4.18.4, 4.22.0 |
| JIRA | CAMEL-24360 |
| 크레딧 | Andrea Cosentino (Apache Software Foundation); Barak Srour (Apiiro) |