CVE-2026-95663
Apache Camel:Camel-Keycloak 安全策略因缓存的令牌内省结果未受令牌过期时间约束而接受已过期的访问令牌
- 已发布
- 2026年10月26日
- 已更新
- 2026年10月26日
- 分配 CNA
- apache
- 观察到的证据
- 2026年10月30日
初级CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N低 · 未来 30 天
- 百分位
- 15.6%
- 型号日期
- 2026年10月29日
EPSS 是统计估计,而不是确定性或影响衡量标准。将其与 CVSS、KEV 状态、暴露程度和您的环境相结合。
总结
Apache Camel Keycloak 组件中的会话过期不充分漏洞。此问题影响 Apache Camel:从 4.16.0 到 4.18.5 之前,从 4.19.0 到 4.22.2 之前。当在 camel-keycloak 的 KeycloakSecurityPolicy 上启用令牌内省(useTokenIntrospection=true)时,安全处理器通过将请求的访问令牌发送到 Keycloak 的 OAuth 2.0 令牌内省端点来验证该令牌,并在响应报告令牌为活动状态时接受该令牌。内省端点一旦令牌的 exp(过期)时间已过,就会将令牌报告为非活动状态,因此在此路径上,active 标志才是强制执行令牌过期的依据。内省结果默认会被缓存(introspectionCacheEnabled=true,introspectionCacheTtl=60 秒),而该组件附带的两种缓存实现 ConcurrentMapTokenCache 和 CaffeineTokenCache 都是在条目插入后经过固定时间使其过期,并未用缓存响应中已携带的 exp 声明来限制该生存期。KeycloakSecurityProcessor 则在使用内省的每条路径上仅检查结果的 active 标志,从未将 exp 与当前时间进行比较。因此,在令牌过期前不久缓存的响应,会在令牌过期后最长达到所配置的生存期时间内,被提供给携带同一令牌的后续请求,而这些请求会以该过期令牌曾携带的角色和权限被放行,尽管定义令牌内省的 RFC 7662 规定,包含 exp 的响应不得在该时间之后被缓存。访问令牌由调用方随每个请求提供,通常作为 Authorization 头中的 bearer 令牌,因此持有片刻之前仍然有效的令牌的调用方,可以在令牌过期后继续使用它,只要缓存条目仍然存在。该窗口受 introspectionCacheTtl 限制,默认值为 60 秒,若遵循文档中针对内部服务的建议,则为 300 至 600 秒,并且仅对同一 Camel 进程在令牌仍然活动时内省并缓存的令牌才会开启。此问题不会授予超出令牌已携带内容之外的任何权限:它不允许伪造令牌,也不允许权限提升,并且令牌内省默认未启用,这就是严重性被评定为中危的原因。在内省被禁用时使用的本地 JWT 验证路径不受此问题影响。建议用户升级到 4.23.0 版本,该版本修复了此问题。如果用户处于 4.22.x 发布流,则建议升级到 4.22.2。如果用户处于 4.18.x 发布流,则建议升级到 4.18.5。4.16.x、4.17.x 以及 4.19.x 至 4.21.x 发布线在此问题解决之前已达到生命周期终止,将不会获得修复,因此部署在这些版本上的环境必须迁移到受支持的版本。对于无法立即升级的部署,请在 KeycloakSecurityPolicy 上设置 introspectionCacheEnabled=false,以便每个请求都针对内省端点进行检查,该端点会将过期令牌报告为非活动状态,代价是每个请求进行一次内省调用。降低 introspectionCacheTtl 只会缩小窗口,并不会关闭它。
来源
针对 CVE-2026-95663 的可运行概念验证复现程序,该漏洞中 Apache Camel 的 camel-keycloak 在令牌过期后仍返回缓存的令牌内省结果,并附带 Spring Boot 和 Quarkus 演示。
负责任的使用
仅在您拥有或有权测试的系统上使用漏洞信息。 Kitploit 链接到公共研究元数据,并且不存储漏洞代码或恶意负载。