漏洞概要
Rack(Ruby的Web服务器接口)在处理内容类型为 application/x-www-form-urlencoded 的表单提交时,其 Rack::Request#POST 方法会将整个请求体不加限制地读入内存。攻击者通过发送巨大的请求体,可导致服务器进程内存耗尽,从而引发拒绝服务攻击。
受影响版本
bundler包管理器中的rackgem(RubyGems)- 受影响的具体版本:
< 2.2.20>= 3.0.0, < 3.1.18>= 3.2.0, < 3.2.3
已修复版本
2.2.203.1.183.2.3
漏洞详情
在处理非多部分表单提交时,Rack的请求解析器执行以下操作:
form_vars = get_header(RACK_INPUT).read
由于 read 方法在调用时未指定参数(即 read(nil)),它会将整个请求体加载到一个Ruby字符串对象中。此操作发生在进行查询参数解析或应用任何 params_limit 限制之前。因此,如果上游(如代理或Web服务器)未设置请求体大小限制,Rack应用将面临与请求大小成比例的无限制内存分配风险。
影响
攻击者可以发送大型的 application/x-www-form-urlencoded 请求体来消耗服务器进程内存,导致服务变慢或被操作系统因内存不足而终止。其影响与请求大小和并发请求数呈线性关系。关键在于,即使应用程序配置了解析参数的数量限制,此内存分配问题在限制生效前就已经发生了。
缓解措施
- 升级:更新到已修复的Rack版本。修复后的版本使用
query_parser.bytesize_limit来强制执行表单参数的大小限制,从而防止无限制地读取application/x-www-form-urlencoded请求体。 - 上游限制:在代理或Web服务器层强制执行严格的请求体最大尺寸限制。例如:
- Nginx: 使用
client_max_body_size指令。 - Apache: 使用
LimitRequestBody指令。
- Nginx: 使用
参考链接
- GHSA-6xw4-3v39-52mm
- rack/rack 修复提交: 4e2c903, cbd541e, e179614
- NVD漏洞详情: https://nvd.nist.gov/vuln/detail/CVE-2025-61919
- RubySec数据库记录: https://github.com/rubysec/ruby-advisory-db/blob/master/gems/rack/CVE-2025-61919.yml
安全信息
- 严重等级:高
- CVSS 3.1 分数: 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)
- CWE 分类: CWE-400 - 不受控制的资源消耗