针对同一 Apache Camel 漏洞的可运行概念验证(PoC)复现程序,每种运行时各一个:
| 运行时 | 目录 | 技术栈 | 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 在没有 HeaderFilterStrategy 的情况下,将 WebSocket 连接的查询参数复制到
Exchange 上。客户端可将 CamelHttpUri 作为查询参数提供,从而将下游的 camel-http 生产者引导到
任意位置(SSRF,CWE-918)。由于生产者还会在攻击者控制的 URI 上解析 Camel
属性占位符,注入的 {{app.secret}} 会被展开为真实值并发送到攻击者的收集器
(信息暴露,CWE-200)。
这两种变体的唯一区别在于数据源的服务位置:
camel-quarkus-vertx-websocket扩展始终 将消费者绑定到 Quarkus 托管的 HTTP 服务器,并拒绝任何其他主机/端口,因此 Quarkus 变体 在:8080上与其 REST 端点一同提供/feed。缺陷本身不受影响。
每个子目录都是一个自包含的项目,带有自己的 Dockerfile、docker-compose.yml 和 README。简而言之,
对任一变体:
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
安全公告:https://camel.apache.org/security/CVE-2026-46726.html
这些复现程序仅用于安全研究和授权测试,针对的是已公开披露 并已修复的漏洞。未经明确许可,请勿将其用于任何系统。
| 属性 | 值 |
|---|
| 组件 | 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 |