
CVE-2026-46726 재현기: Apache Camel camel-vertx-websocket의 필터링되지 않은 인바운드 헤더 주입으로 인한 SSRF 및 property-placeholder 해석을 통한 비밀 정보 노출 가능 (4.14.8/4.18.3/4.21.0에서 수정됨)
| 런타임 | 디렉터리 | 스택 | WebSocket 피드 |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.2.0 + camel-spring-boot 4.18.2 | 별도 포트 :8090 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0 (Camel 4.20.0 번들 포함) | 관리형 Quarkus HTTP 서버 :8080 |
두 버전 모두 영향을 받는 버전이며(4.14.8 / 4.18.3 / 4.21.0에서 수정됨), 두 버전 모두 동일한 결함을 보여줍니다:
VertxWebsocketConsumer#populateExchangeHeaders는 WebSocket 연결의 쿼리 파라미터를 HeaderFilterStrategy 없이
Exchange에 복사합니다. 클라이언트가 쿼리 파라미터로 CamelHttpUri를 제공하면 다운스트림 camel-http 프로듀서를
원하는 곳으로 조종할 수 있습니다(SSRF, CWE-918). 프로듀서는 또한 공격자가 제어하는 해당 URI에서 Camel
프로퍼티 플레이스홀더를 해석하므로, 인젝션된 {{app.secret}}이 실제 값으로 확장되어
공격자의 수집 서버로 전송됩니다(정보 노출, CWE-200).
두 변형의 차이는 피드가 제공되는 위치뿐입니다:
camel-quarkus-vertx-websocket확장은 항상 컨슈머를 관리형 Quarkus HTTP 서버에 바인딩하고 다른 호스트/포트를 거부하므로, Quarkus 변형은 REST 엔드포인트와 함께:8080에서/feed를 제공합니다. 결함 자체는 영향을 받지 않습니다.
각 하위 디렉터리는 자체 Dockerfile, docker-compose.yml 및 README를 포함한 독립적인 프로젝트입니다.
간단히 말해, 둘 중 하나에 대해:
cd camel-spring-boot # 또는: cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
| 속성 | 값 |
|---|---|
| 구성 요소 | camel-vertx-websocket |
| 영향을 받는 클래스 | org.apache.camel.component.vertx.websocket.VertxWebsocketConsumer#populateExchangeHeaders (인바운드 쿼리/경로 파라미터에 HeaderFilterStrategy 없음) |
| CWE | CWE-20 → CWE-918 (SSRF) 및 CWE-200 (정보 노출) |
| 영향 | WebSocket 쿼리 파라미터를 통한 CamelHttpUri 인젝션 → 다운스트림 HTTP 프로듀서의 SSRF + 플레이스홀더 해석을 통한 환경/프로퍼티/vault 비밀 정보 노출 |
| 영향을 받는 버전 | 4.0.0부터 4.14.8 이전, 4.15.0부터 4.18.3 이전, 4.19.0부터 4.21.0 이전 |
| 수정된 버전 | 4.14.8, 4.18.3, 4.21.0 |
| JIRA | CAMEL-23532 (PR apache/camel#23285) |
| 공로 | Kamalpreet Singh |
이 재현 코드는 공개적으로 공개되고 수정된 취약점에 대한 보안 연구 및 승인된 테스트 전용으로 제공됩니다. 명시적 허가 없이 시스템에 대해 사용하지 마십시오.