Rack:多部分解析器将大型非文件字段完全缓冲在内存中,导致拒绝服务(内存耗尽)· CVE-2025-61771 · GitHub 安全公告数据库
漏洞详情
软件包
- bundler
- rack (RubyGems)
受影响版本
- < 2.2.19
-
= 3.1, < 3.1.17
-
= 3.2, < 3.2.2
已修复版本
- 2.2.19
- 3.1.17
- 3.2.2
描述
概要
Rack::Multipart::Parser 将非文件表单字段(不含文件名的部分)完全作为 Ruby 字符串对象存储在内存中。multipart/form-data 请求中的单个大型文本字段(数百兆字节或更多)可能消耗等量的进程内存,从而导致内存不足(OOM)状况和拒绝服务(DoS)。
详细信息
在多部分解析期间,文件部分被流式传输到临时文件,但非文件部分被缓冲到内存中:
|
|
这些内存缓冲区没有大小限制。因此,任何大型文本字段——虽然在技术上是有效的——都会在添加到参数之前完全加载到进程内存中。
影响
攻击者可以发送大型非文件字段来触发过度内存使用。影响随请求大小和并发量而增加,可能导致工作进程崩溃或严重的垃圾收集开销。所有处理多部分表单提交的 Rack 应用程序都会受到影响。
缓解措施
- 升级:使用已修复的 Rack 版本,该版本对非文件字段强制执行合理的大小限制(例如 2 MiB)。
- 临时解决方案:
- 在 Web 服务器或代理层限制最大请求正文大小(例如 Nginx 的
client_max_body_size)。 - 在应用程序级别验证并拒绝异常大的表单字段。
- 在 Web 服务器或代理层限制最大请求正文大小(例如 Nginx 的
参考
- GHSA-w9pc-fmgc-vxvw
- https://nvd.nist.gov/vuln/detail/CVE-2025-61771
- rack/rack@589127f
- rack/rack@d869fed
- rack/rack@e08f78c
- https://github.com/rubysec/ruby-advisory-db/blob/master/gems/rack/CVE-2025-61771.yml
严重性
- 严重等级:高
- CVSS 总体评分:7.5
- CVSS v3 基础指标:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- EPSS 分数:0.056% (第17百分位)
弱点
- 弱点:CWE-400 不受控制的资源消耗
- 描述:产品未能正确控制有限资源的分配和维护,从而使攻击者能够影响消耗的资源量,最终导致可用资源耗尽。
标识符
- CVE ID:CVE-2025-61771
- GHSA ID:GHSA-w9pc-fmgc-vxvw
源代码
- rack/rack
致谢
- 报告者:kwkr
- 修复开发者:jeremyevans
- 修复审阅者:ioquatix
本公告已被编辑。请查看历史记录。