Rack多部分解析器内存耗尽漏洞分析
漏洞概述
CVE-2025-61771是一个影响Rack多部分解析器的高危漏洞。该漏洞允许攻击者通过发送包含大型非文件字段的多部分表单数据,导致服务器内存耗尽,从而引发拒绝服务(DoS)攻击。
技术细节
受影响版本
< 2.2.19>= 3.1, < 3.1.17>= 3.2, < 3.2.2
已修复版本
2.2.193.1.173.2.2
漏洞原理
内存缓冲机制缺陷
Rack::Multipart::Parser在处理multipart/form-data请求时,对非文件表单字段(不带文件名的部分)采用全内存缓冲策略:
|
|
关键问题
- 文件部分:流式传输到临时文件
- 非文件部分:完全缓冲到内存中的Ruby String对象
- 缺乏限制:这些内存缓冲区没有大小限制
影响分析
攻击场景
攻击者可以发送包含大型文本字段的请求:
- 单个字段可达数百MB或更大
- 消耗等量的进程内存
- 导致内存不足(OOM)条件
- 引发严重的垃圾回收开销
影响范围
所有处理多部分表单提交的Rack应用程序都受到影响。
缓解措施
推荐方案
升级修复版本:使用已修复的Rack版本,这些版本对非文件字段实施了合理的大小限制(例如2 MiB)。
临时解决方案
- Web服务器层限制:在Web服务器或代理层限制最大请求体大小(如Nginx的client_max_body_size)
- 应用层验证:在应用层验证并拒绝异常大的表单字段
技术参考
- GHSA ID: GHSA-w9pc-fmgc-vxvw
- CVE ID: CVE-2025-61771
- 修复提交:
- rack/rack@589127f
- rack/rack@d869fed
- rack/rack@e08f78c
安全指标
CVSS v3.1评分
- 基础分数: 7.5(高危)
- 向量: AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
弱点分类
- CWE-400: 不受控制的资源消耗
致谢
该漏洞由安全研究人员kwkr报告,修复由jeremyevans开发,ioquatix进行修复审查。