漏洞概述
Ruby的Rack库中的多部分解析器(Rack::Multipart::Parser)存在一个安全漏洞(CVE-2025-61772)。该漏洞允许远程攻击者通过发送格式错误的多部分请求,导致服务器内存无限制增长,从而引发拒绝服务(DoS)。
受影响版本
- bundler管理的rack
- RubyGems (rack):
- < 2.2.19
-
= 3.1, < 3.1.17
-
= 3.2, < 3.2.2
已修复版本
- 2.2.19
- 3.1.17
- 3.2.2
技术细节
漏洞原理
在解析多部分表单数据的每个部分(part)的头部时,解析器会持续读取数据,直到遇到表示头部结束的特定终止符CRLFCRLF(即两个连续的回车换行)。解析器使用的关键代码是:
|
|
如果恶意请求的某个部分的头部始终不包含这个终止符,解析器就会持续将接收到的字节数据追加到内存缓冲区(@sbuf.concat(content)),而没有任何大小上限。这使得攻击者可以通过一个格式错误的部件,消耗与整个请求体大小成比例的内存。
影响
攻击者可以发送包含不完整多部分头部的请求来触发高内存使用。这可能导致进程因内存不足(OOM)而被终止,或造成严重的性能下降。所有处理文件上传或多部分表单数据的Rack应用都可能受到影响。
缓解措施
- 升级:将Rack升级到已修复的版本。修复方案为每个部分的头部大小设置了上限(例如64 KiB)。
- 临时方案:在升级之前,可以在代理服务器或Web服务器层面(例如Nginx的
client_max_body_size)限制最大请求体大小,以控制潜在的内存消耗。
相关链接
- GHSA-wpv5-97wm-hp9c
- NVD漏洞详情:CVE-2025-61772
- Rack修复提交:589127f, d869fed, e08f78c
- Ruby安全咨询数据库条目
安全评分
- CVSS 3.1 总体评分: 7.5 (高危)
- CVSS 向量: AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- 攻击向量:网络
- 攻击复杂度:低
- 所需权限:无
- 用户交互:无
- 影响范围:未改变
- 机密性影响:无
- 完整性影响:无
- 可用性影响:高
- 弱点类型: CWE-400 不受控制的资源消耗
致谢
- 报告者: kwkr
- 修复开发者: jeremyevans
- 修复审阅者: ioquatix