Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-23552 — CVE-2026-23552 - camel-keycloak 中的跨域令牌接受 | Kitploit
工具/GitHubGitHub/oscerd/cve-2026-23552
身份验证与授权漏洞分析漏洞利用Web安全学习与教育API 安全
GitHuboscerd/cve-2026-23552

CVE-2026-23552

CVE-2026-23552 - camel-keycloak 中的跨域令牌接受

查看仓库
6个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-23552 - camel-keycloak 中的跨领域令牌接受

概述

Apache Camel 的 KeycloakSecurityPolicy 不会根据所配置的领域验证 JWT 令牌的 iss(颁发者)声明。这意味着由某个 Keycloak 领域签发的令牌会被配置给完全不同的领域的策略静默接受,从而破坏租户隔离。

受影响版本:4.15.0、4.16.0、4.17.0

跟踪地址:https://issues.apache.org/jira/browse/CAMEL-22854

根本原因

在 KeycloakSecurityHelper.parseAccessToken() 中,当未显式提供公钥(这是默认配置)时,令牌仅从 Base64 解码——从未被验证:

root@kitploit:~
public static AccessToken parseAccessToken(String tokenString, PublicKey publicKey)
        throws VerificationException {
    if (publicKey != null) {
        return TokenVerifier.create(tokenString, AccessToken.class)
                .publicKey(publicKey)
                .verify()
                .getToken();
    } else {
        // no signature verification, no issuer check
        return TokenVerifier.create(tokenString, AccessToken.class).getToken();
    }
}

由于默认代码路径会命中 else 分支,以下三项均未检查:

  1. 令牌签名从未被验证
  2. iss 声明从未与预期的 {serverUrl}/realms/{realm} 进行比较
  3. 未从 Keycloak 获取 JWKS 公钥

角色检查仍然通过,因为它只查看令牌载荷中的角色名称。如果角色名称(tenant-user)恰好跨领域匹配——这在多租户环境中很常见——请求就会通过。

影响

在多租户应用中,每个租户对应一个独立的 Keycloak 领域时,租户 A 的用户可以访问为租户 B 保护的路由。具体来说:

  • 多租户 SaaS 应用中的跨租户数据访问
  • 当不同领域具有不同角色配置时的权限提升
  • 完全绕过基于领域的安全隔离

复现

本项目使用 Apache Camel 4.17.0 和本地 Keycloak 实例演示该漏洞。

前提条件

  • Java 17+
  • Maven 3.9+
  • Camel JBang CLI(jbang app install camel@apache/camel)
  • Docker 或 Podman(由 camel infra 在底层使用)

设置

启动本地 Keycloak:

root@kitploit:~
camel infra run keycloak

这会在 localhost:8080 上启动 Keycloak,管理员凭据为 admin/admin。

运行

root@kitploit:~
mvn verify

具体过程

集成测试(CrossRealmTokenBypassIT)执行以下操作:

  1. 连接到本地 Keycloak 并创建两个领域:acme 和 globex
  2. 在每个领域中创建一个启用了直接访问授权的机密客户端
  3. 在两个领域中创建 tenant-user 领域角色
  4. 在 acme 领域中创建用户 alice(密码 alice123),并为其分配 tenant-user 角色
  5. 设置一条受绑定到 globex 领域的 KeycloakSecurityPolicy 保护的 Camel 路由(direct:globex-protected)
  6. 从 acme 领域获取 alice 的 JWT 令牌(颁发者:http://localhost:8080/realms/acme)
  7. 将该令牌发送到受 globex 保护的路由

请求成功。acme 令牌未出现任何错误即通过了 globex 策略。

4.17.0 上的预期测试结果

测试结果含义
testAcmeTokenIsObtainable通过健全性检查——令牌获取正常

在已修补的版本(4.18.0+)上,第二个测试将失败,第三个测试将通过。

清理

root@kitploit:~
camel infra stop keycloak

测试还会在 @AfterAll 中移除 acme 和 globex 领域。

修复

KeycloakSecurityPolicy 应拒绝 iss 声明与 {serverUrl}/realms/{realm} 不匹配的令牌。该修复由 CAMEL-22854 跟踪,并将随 Camel 4.18.0(下一个 LTS 版本)一起发布。

下载工具
testCrossRealmTokenAccepted
通过
确认漏洞存在
testCrossRealmTokenShouldBeRejected失败记录正确行为——在 4.17.0 上未抛出异常