SolrParam. / SolrField. 请求头注入针对同一 Apache Camel 漏洞的可运行概念验证复现程序,每种运行时一个:
| 运行时 | 目录 | 技术栈 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.2.0 + camel-spring-boot 4.18.2 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0(捆绑 Camel 4.20.0) |
两者均为受影响版本(已在 4.14.8 / 4.18.3 / 4.21.0 中修复),且都展示了完全相同的缺陷:
camel-solr 生产者会将任何以 SolrField. 开头的入站请求头复制到索引文档中,并将任何以
SolrParam. 开头的请求头复制到 Solr 请求参数中。这些前缀不属于 Camel* 命名空间,因此
HTTP 边界过滤器不会将其剥离——已修复的“保存笔记”/“搜索”端点的客户端可注入
任意文档字段(CWE-74)和 Solr 请求参数,包括用于服务端请求伪造的 shards(CWE-918)。
两种变体均使用 netty-http 消费者(而非 servlet 容器):SolrField. / SolrParam. 前缀匹配
区分大小写,且 netty-http 会保留请求头名称的大小写,而 servlet 容器会将其转换为小写。
每个子目录都是一个自包含项目(外加由其 docker-compose.yml 启动的 Solr 容器),并带有自己的
Dockerfile 和 README。简而言之,对于任一项目:
cd camel-spring-boot # 或:cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Solr 容器以 -Dsolr.disable.allowUrls=true 运行,因此 shards SSRF 可到达内部监听器;
在配置了 allowUrls 的 Solr 上,Solr 自身的防御机制会阻止 shards SSRF,但 SolrField.*
文档字段注入不受影响。
安全公告:https://camel.apache.org/security/CVE-2026-48203.html
这些复现程序仅供安全研究和授权测试使用,针对的是已公开披露并已修复的漏洞。 未经明确许可,请勿将其用于任何系统。
| 属性 | 值 |
|---|
| 组件 | camel-solr |
| 受影响类 | org.apache.camel.component.solr.SolrProducer / SolrRequestConverter(前缀 SolrParam. / SolrField.) |
| CWE | CWE-20 → CWE-74(字段注入)和 CWE-918(SSRF) |
| 影响 | 注入任意 Solr 请求参数(shards/stream.url → SSRF,qt → 管理处理器)以及任意索引文档字段 |
| 受影响版本 | 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-23597(PR apache/camel#23410) |
| 致谢 | Yu Bao(PayPal) |