针对 Apache Camel 漏洞的可运行概念验证复现程序。在该漏洞中,camel-http 的 OAuth2 客户端令牌缓存
——一个 JVM 全局的 static map——仅以 (uri, clientId, clientSecret) 作为条目的键,遗漏了
实际决定令牌形态的字段:请求的 scope、资源指示符以及令牌端点。因此,仅在上述字段上存在差异的两个
端点会共享同一个缓存条目,导致某个端点可能被发放一个为不同 scope、不同资源或由不同授权服务器签发的令牌
——即请求携带的权限超出了该端点所配置的范围,或者令牌被出示给了并非其签发对象的第三方
(CWE-524)。
仅限 Spring Boot。 本复现程序仅包含一个 Camel Spring Boot 模块。该缺陷位于
camel-http的 OAuth2 客户端中,而该客户端也有一个camel-quarkus-http扩展;但在该扩展的 JVM 打包方式下,端点级别的oauth2*客户端选项不会像在 Spring Boot 下那样被应用(持有令牌缓存的 OAuth2 请求拦截器从未被装配,因此令牌端点从未被调用) ——这与 CVE-2026-85251 所记录的局限性相同。Spring Boot 模块演示了受影响以及修复后的行为。
| 运行时 | 目录 | 技术栈 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-http 4.22.0(受影响;修复版本 4.22.1) |
该驱动程序仿照修复本身自带的回归测试(HttpOAuth2TokenCachingTest)。两个一次性 HTTP 服务器在进程内运行:
一个令牌端点负责签发 bearer 令牌,一个目标要求携带该令牌。验证程序
(/exploit/attack):
oauth2CacheTokens=true&oauth2Scope=read 向目标发出第一次请求——令牌被签发并缓存;oauth2Scope=read+write 外与第一次完全相同。read 令牌——
即使令牌端点已关闭,它仍然成功(此时根本不可能签发新令牌)。HttpHostConnectException)。cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: 2nd request 200 (reused read token); >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85317-http-oauth2-token-cache-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: 2nd request HttpHostConnectException; >>> Not exploited
| 属性 | 值 |
|---|---|
| 组件 | camel-http(OAuth2ClientConfigurer、令牌缓存) |
| CWE | CWE-524(使用包含敏感信息的缓存) |
| 严重程度 | 中危 |
| 攻击向量 | 某部署配置了多个 OAuth2 端点,这些端点仅在 scope、资源指示符或令牌端点方面存在差异;它们共享 JVM 全局令牌缓存 |
| 影响 | 某个端点被提供了为不同 scope/资源/授权服务器签发的令牌——其权限超出配置范围,或令牌被出示给了错误的一方 |
| 受影响版本 | 从 4.0.0 起至 4.18.5 之前,从 4.19.0 起至 4.22.1 之前 |
| 修复版本 | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24456 |
| 致谢 | Claude Security Scan Tool |
公告:https://camel.apache.org/security/CVE-2026-85317.html
OAuth2ClientConfigurer 扩展了缓存键记录
OAuth2URIAndCredentials,使其包含令牌端点、scope 和资源指示符,因此条目不再在
上述任一字段存在差异的端点之间共享。
将 scope、资源指示符或令牌端点存在差异的端点运行在独立的 JVM 中,使它们不共享 静态缓存。
本仓库出于教育和防御目的发布:帮助 Apache Camel 用户理解该漏洞、验证自身是否受影响,并确认升级可解决该问题。令牌
(xxx.yyy.zzz)、客户端 ID 和密钥均为无害的占位符,且两个 HTTP 服务器均在进程内运行。请勿将本
材料用于您不拥有或运营的系统。