Rack内存耗尽漏洞解析:防范无限制URL编码表单解析导致的DoS攻击
漏洞详情
包信息
- 包管理器: bundler
- 包名称: rack (RubyGems)
受影响版本
- < 2.2.20
-
= 3.0, < 3.1.18
-
= 3.2, < 3.2.3
已修复版本
- 2.2.20
- 3.1.18
- 3.2.3
漏洞描述
摘要
Rack::Request#POST在处理Content-Type为application/x-www-form-urlencoded的请求时,会通过调用rack.input.read(nil)将整个请求体读入内存,而没有实施长度限制或上限。因此,大型请求体可以在解析之前完全缓冲到进程内存中,导致通过内存耗尽实现的拒绝服务(DoS)攻击。
详细说明
在处理非多部分表单提交时,Rack的请求解析器执行以下操作:
|
|
由于read调用时没有参数,整个请求体将被加载到Ruby字符串中。这种情况发生在查询参数解析或任何params_limit强制执行之前。因此,没有上游请求体大小限制的Rack应用程序可能会遇到与请求大小成比例的无限制内存分配。
影响
攻击者可以发送大型的application/x-www-form-urlencoded请求体来消耗进程内存,导致系统变慢或被操作系统终止(OOM)。影响随请求大小和并发性线性扩展。即使配置了解析限制,该问题也在这些限制强制执行之前发生。
缓解措施
- 更新到已修复的Rack版本,该版本使用query_parser.bytesize_limit强制执行表单参数限制,防止无限制读取application/x-www-form-urlencoded请求体。
- 在代理或Web服务器层强制执行严格的最大请求体大小(例如,Nginx的client_max_body_size,Apache的LimitRequestBody)。
参考链接
- GHSA-6xw4-3v39-52mm
- rack/rack@4e2c903
- rack/rack@cbd541e
- rack/rack@e179614
- https://nvd.nist.gov/vuln/detail/CVE-2025-61919
- https://github.com/rubysec/ruby-advisory-db/blob/master/gems/rack/CVE-2025-61919.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.074%(第23百分位)
弱点分类
CWE-400 - 不受控制的资源消耗
产品没有正确控制有限资源的分配和维护,从而使攻击者能够影响消耗的资源量,最终导致可用资源耗尽。
标识符
- CVE ID: CVE-2025-61919
- GHSA ID: GHSA-6xw4-3v39-52mm
源代码
rack/rack
致谢
- Pirikara - 报告者
- jeremyevans - 修复开发者
- ioquatix - 修复审核者