
CVE-2026-49042(Apache Camel camel-langchain4j-tools)的 PoC 复现器:提示注入的 LLM 其工具调用参数会成为未经过滤的 Exchange 头,从而劫持工具路由的 exec: 接收器(sink)以实现 RCE。已在 4.14.8/4.18.3/4.21.0 中修复。
针对同一 Apache Camel 漏洞的可运行概念验证复现程序,每种运行时一个:
| 运行时 | 目录 | 技术栈 | 被劫持的 sink | 演示的影响 |
|---|---|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.2.0 + camel-spring-boot 4.18.2 | 经由 CamelExecCommand* 的 exec: | 远程代码执行 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0(捆绑 Camel 4.20.0) | 经由 CamelHttpUri 的 http | SSRF + 机密信息泄露 |
两者均为受影响版本(已在 4.14.8 / 4.18.3 / 4.21.0 中修复),并且都演示了完全相同的缺陷:
LangChain4jToolsProducer#invokeTools 会在完全不检查声明的参数 schema 的情况下,将模型工具调用参数 JSON 中的每一个字段直接复制到 Exchange 标头中。该工具只声明了一个参数(host),但被提示注入的模型会发出额外的字段,这些字段会作为 Camel 控制标头落地,并劫持工具路由下游使用的任何 producer(CWE-20)。
无需真实的 LLM 或 API 密钥:注入完全存在于模拟模型发出的工具调用参数中,与越狱或被间接提示注入的模型所产生的参数完全一致。
Spring Boot 变体通过 exec: sink 证实了 RCE。该 sink 在 Camel 4.20.0(即 Camel Quarkus 3.36.0 捆绑的版本)上默认不可达:CAMEL-23315 为 camel-exec 新增了 allowControlHeaders 选项,默认值为 false,首次随 4.20.0 发布。该加固与本 CVE 无关,并且不能修复它——在 4.20.0 中,注入的字段仍然会成为 Exchange 标头(已在路由日志中验证);只是那一个下游 sink 不再遵循其控制标头。因此,Quarkus 变体劫持的是 http producer,该 producer 默认会遵循控制标头,并且还额外夹带了一个 producer 会解析的 Camel 属性占位符——从而造成 SSRF 以及真实应用程序机密信息的泄露。
每个子目录都是一个自包含的项目,带有自己的 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-49042.html
这些复现程序仅供安全研究和授权测试使用,针对的是已公开披露且已修复的漏洞。未经明确许可,请勿将其用于任何系统。
| 属性 | 值 |
|---|
| 组件 | camel-langchain4j-tools(另有 camel-langchain4j-agent、camel-spring-ai-tools) |
| 受影响类 | org.apache.camel.component.langchain4j.tools.LangChain4jToolsProducer#invokeTools |
| CWE | CWE-20(输入验证不当)——未过滤的工具调用参数会变成 Exchange 控制标头 |
| 影响 | RCE / SSRF / 任意文件写入,具体取决于工具路由的下游 producer |
| 受影响版本 | 4.8.0–4.14.7, 4.15.0–4.18.2, 4.19.0–4.20.x |
| 已修复版本 | 4.14.8, 4.18.3, 4.21.0 |
| JIRA | CAMEL-23621(PR apache/camel#23535) |
| 致谢 | Yu Bao (PayPal) |