漏洞详情
摘要
Rack::Request#POST在处理Content-Type: application/x-www-form-urlencoded的请求时,会通过调用rack.input.read(nil)将整个请求体读入内存,且没有强制执行长度或上限限制。因此,大的请求体会在解析前被完全缓冲到进程内存中,从而导致因内存耗尽而造成的拒绝服务攻击。
详情 在处理非多部分表单提交时,Rack的请求解析器执行以下操作:
|
|
由于调用read时没有参数,整个请求体会被加载到一个Ruby字符串中。这发生在查询参数解析或任何params_limit限制生效之前。因此,没有上游请求体大小限制的Rack应用程序可能会分配与请求大小成比例的无限内存。
影响
攻击者可以发送大的application/x-www-form-urlencoded请求体来消耗进程内存,导致系统变慢或被操作系统终止。其影响与请求大小和并发量成线性比例。即使配置了解析限制,该问题在这些限制生效之前就已发生。
缓解措施
- 更新到已打补丁的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
技术信息
受影响的包
- rack (RubyGems)
受影响的版本
- < 2.2.20
-
= 3.0, < 3.1.18
-
= 3.2, < 3.2.3
已修复的版本
- 2.2.20
- 3.1.18
- 3.2.3
严重程度
- 严重性:高
- CVSS v3.1 基本分数:7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)
弱点
- CWE-400:不受控制的资源消耗
信息来源
- 报告者:Pirikara
- 修复开发者:jeremyevans
- 修复审查者:ioquatix
- 发布于:2025年10月10日
- 最后更新:2025年10月13日