IS_ACTIVE 检查(接受已过期令牌)针对同一 Apache Camel 漏洞的可运行概念验证(PoC)复现程序,每个运行时一个:
| 运行时 | 目录 | 技术栈 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.2.0 + camel-keycloak 4.18.2 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0(捆绑 Camel 4.20.0) |
两者均为受影响版本(已在 4.18.3 / 4.21.0 中修复),并且都展示了完全相同的缺陷:
KeycloakSecurityHelper.parseAndVerifyAccessToken 会验证令牌的签名、主题(subject)和签发者(issuer),但省略了 Keycloak 的 TokenVerifier.IS_ACTIVE 检查——因此 exp / nbf 永不会被执行,已过期的令牌也会被接受。任何泄露或被截获的令牌都可无限期使用(CWE-613 + CWE-287)。
每个 PoC 都会生成一个签名正确且 exp 已过去 30 分钟的访问令牌,并将它同时传递给存在漏洞的 helper 和一个添加了 IS_ACTIVE 的验证器(即该修复所做的),从而证明该 helper 会接受 IS_ACTIVE 所拒绝的令牌。无需 Keycloak 服务器——令牌使用进程内生成的 RSA 密钥签名。
每个子目录都是一个自包含的项目,带有自己的 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-46455.html
这些复现程序仅供安全研究和授权测试使用,针对的是已公开披露并修复的漏洞。未经明确许可,请勿对任何系统使用它们。
| 属性 | 值 |
|---|
| 组件 | camel-keycloak |
| 受影响的类 | org.apache.camel.component.keycloak.security.KeycloakSecurityHelper#parseAndVerifyAccessToken |
| CWE | CWE-613(会话过期不足)+ CWE-287(身份验证不当) |
| 影响 | 接受已过期/尚未生效的访问令牌 → 请求在令牌有效期限之外通过身份验证 |
| 受影响版本 | 4.18.0 至 4.18.3 之前,4.19.0 至 4.21.0 之前(helper 于 4.18.0 引入;4.14.x LTS 不受影响) |
| 修复版本 | 4.18.3、4.21.0 |
| JIRA | CAMEL-23504 |