针对同一 Apache Camel 漏洞的可运行 PoC 复现器,每种运行时一个:
| 运行时 | 目录 | 技术栈 | 方式 |
|---|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-knative 4.18.2 | 直接解码(见注) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0(内置 Camel 4.20.0) | 完整 HTTP 驱动的 knative source |
两者均为受影响版本(该问题已在 4.14.9 / 4.18.4 / 4.22.0 中修复),并且都展示了完全相同的缺陷:camel-knative consumer 接受两种内容模式的 CloudEvents。在二进制模式下,属性以 HTTP 头形式到达,并通过 HeaderFilterStrategy 进行映射,因此 Camel* 头会被丢弃。在结构化模式(Content-Type: application/cloudevents+json)下,整个事件是一个 JSON 体,受影响版本将该 JSON 的每个扩展字段通过 setHeader(key.toLowerCase(Locale.US), value) 映射到消息头,并且没有 HeaderFilterStrategy。扩展名称由发送者选择,因此攻击者可以设置一个 Camel 内部控制头。这里注入的扩展字段 camelsqlquery 变成了 CamelSqlQuery 头(Camel 头不区分大小写)——即 camel-sql producer 将会执行的语句(头注入 → CWE-74)。
关于 Spring Boot 变体的说明。 knative HTTP 传输基于 Vert.x,用于 camel-main / Camel Quarkus 部署。Spring Boot servlet 应用不承载该传输,因此 Spring Boot 复现器直接驱动完全相同的易受攻击解码逻辑(
CloudEventProcessors.fromSpecVersion("1.0").consumer(...))——这与入站application/cloudevents+json请求在 knative consumer 内部驱动的代码路径相同。Camel Quarkus 变体则是完整的 HTTP 驱动复现器(向运行中的 source POST 一个 CloudEvent)。
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
受影响构建上的预期输出(两个变体):
1) Benign structured CloudEvent (no extension):
CamelSqlQuery ... = [null]
2) Malicious structured CloudEvent (injected extension 'camelsqlquery'):
CamelSqlQuery ... = [SELECT * FROM secrets WHERE 1=1 -- injected-by-attacker]
>>> PROVEN: ... a camel-sql producer downstream would execute this attacker-supplied statement: true
公告:https://camel.apache.org/security/CVE-2026-63621.html
结构化模式的扩展映射现在会在设置每个字段之前,将其通过 HeaderFilterStrategy(一个 DefaultHeaderFilterStrategy)进行处理,与二进制内容模式的路径保持一致——因此来自不可信主体的 Camel* 扩展名称会被丢弃:
// fixed (AbstractCloudEventProcessor.mapExtensionAsHeader)
final String headerName = key.toLowerCase(Locale.US);
if (!headerFilterStrategy.applyFilterToExternalHeaders(headerName, value, exchange)) {
message.setHeader(headerName, value);
}
本仓库发布仅用于教育和防御目的:帮助 Apache Camel 用户理解该漏洞、验证自身是否受影响,并确认升级可以解决该问题。注入的值是一个良性标记(一个此处从未执行的惰性 SQL 字符串)。请勿将本材料用于不属于自己或未经授权操作的系统。
| 属性 | 值 |
|---|
| 组件 | camel-knative(Spring Boot:camel-knative;Quarkus:camel-quarkus-knative) |
| CWE | CWE-20(输入验证不当)→ CWE-74(注入) |
| 攻击向量 | 一个带攻击者选择扩展字段的结构化模式 CloudEvent(application/cloudevents+json) |
| 影响 | 向 Exchange 注入 Camel 内部控制头(此处为 CamelSqlQuery) |
| 受影响版本 | 从 3.15.0 到 4.14.9 之前,从 4.15.0 到 4.18.4 之前,从 4.19.0 到 4.22.0 之前 |
| 已修复版本 | 4.14.9、4.18.4、4.22.0 |
| JIRA | CAMEL-24084 |
| 致谢 | Andrea Cosentino(Apache 软件基金会) |