
Reproducer for CVE-2026-46726: Apache Camel camel-vertx-websocket unfiltered inbound header injection enabling SSRF and secret disclosure via property-placeholder resolution (fixed in 4.14.8/4.18.3/4.21.0)
Runnable proof-of-concept reproducers for the same Apache Camel vulnerability, one per runtime:
| Runtime | Directory | Stack | WebSocket feed |
|---|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.2.0 + camel-spring-boot 4.18.2 | separate port :8090 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0 (bundles Camel 4.20.0) | managed Quarkus HTTP server :8080 |
Both are affected versions (fixed in 4.14.8 / 4.18.3 / 4.21.0), and both demonstrate the identical defect:
VertxWebsocketConsumer#populateExchangeHeaders copies the WebSocket connection's query parameters onto the
Exchange with no HeaderFilterStrategy. A client supplies CamelHttpUri as a query parameter and steers the
downstream camel-http producer wherever it likes (SSRF, CWE-918). Because the producer also resolves Camel
property placeholders on that attacker-controlled URI, an injected {{app.secret}} is expanded to its real value
and sent to the attacker's collector (information exposure, CWE-200).
The two variants differ only in where the feed is served: the
camel-quarkus-vertx-websocketextension always binds the consumer to the managed Quarkus HTTP server and rejects any other host/port, so the Quarkus variant serves/feedon:8080alongside its REST endpoints. The defect is unaffected.
Each subdirectory is a self-contained project with its own Dockerfile, docker-compose.yml, and README. In
short, for either:
cd camel-spring-boot # or: cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Advisory: https://camel.apache.org/security/CVE-2026-46726.html
These reproducers are provided for security research and authorized testing only, for a publicly disclosed and fixed vulnerability. Do not use them against systems without explicit permission.
| Property | Value |
|---|
| Component | camel-vertx-websocket |
| Affected Class | org.apache.camel.component.vertx.websocket.VertxWebsocketConsumer#populateExchangeHeaders (no HeaderFilterStrategy on inbound query/path params) |
| CWE | CWE-20 → CWE-918 (SSRF) and CWE-200 (Information Exposure) |
| Impact | Inject CamelHttpUri via a WebSocket query param → SSRF from a downstream HTTP producer + disclosure of env/property/vault secrets via placeholder resolution |
| Affected Versions | From 4.0.0 before 4.14.8, from 4.15.0 before 4.18.3, from 4.19.0 before 4.21.0 |
| Fixed Versions | 4.14.8, 4.18.3, 4.21.0 |
| JIRA | CAMEL-23532 (PR apache/camel#23285) |
| Credit | Kamalpreet Singh |