Rack多部分解析器内存耗尽漏洞分析
漏洞概述
CVE-2025-61771 是一个影响Rack多部分解析器的高危漏洞,该漏洞允许攻击者通过发送大型非文件字段触发内存耗尽,导致拒绝服务(DoS)攻击。
技术细节
受影响版本
- Rack < 2.2.19
- Rack >= 3.1, < 3.1.17
- Rack >= 3.2, < 3.2.2
漏洞成因
Rack::Multipart::Parser在处理multipart/form-data请求时存在设计缺陷:
|
|
关键问题:
- 文件部分会被流式传输到临时文件
- 但非文件字段完全缓冲在内存中的Ruby String对象中
- 对这些内存缓冲区没有大小限制
攻击影响
- 单个大型文本字段(数百MB或更多)会消耗等量的进程内存
- 可能导致内存不足(OOM)条件
- 造成工作进程崩溃或严重的垃圾回收开销
- 所有处理多部分表单提交的Rack应用程序都受影响
修复方案
官方修复
升级到已修复的Rack版本:
- 2.2.19
- 3.1.17
- 3.2.2
这些版本对非文件字段实施了合理的大小限制(如2 MiB)。
临时解决方案
-
在Web服务器或代理层限制最大请求体大小
- 例如:Nginx的client_max_body_size配置
-
在应用层验证和拒绝异常大的表单字段
参考信息
- GHSA ID: GHSA-w9pc-fmgc-vxvw
- CVSS评分: 7.5(高危)
- 攻击向量: 网络
- 权限要求: 无
- 用户交互: 无
- 影响范围: 可用性高
技术特征
- 弱点类型: CWE-400(不受控制的资源消耗)
- 影响组件: rack/rack RubyGem
- 修复提交: rack/rack@589127f, rack/rack@d869fed, rack/rack@e08f78c