Rack内存耗尽漏洞解析:防范无限制URL编码请求导致的DoS攻击

本文详细分析了Rack框架中存在的内存耗尽拒绝服务漏洞(CVE-2025-61919),该漏洞允许攻击者通过发送无限制的URL编码请求体来消耗服务器内存,导致服务不可用。文章包含漏洞技术细节、影响范围和修复方案。

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的请求解析器执行:

1
form_vars = get_header(RACK_INPUT).read

由于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)。

参考信息

安全评分

CVSS总体评分:7.5/10(高危)

CVSS v3基础指标

  • 攻击向量: 网络
  • 攻击复杂度: 低
  • 所需权限: 无
  • 用户交互: 无
  • 范围: 未改变
  • 机密性影响: 无
  • 完整性影响: 无
  • 可用性影响: 高

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

EPSS评分:0.07%(第22百分位)

弱点分类

  • 弱点: CWE-400
  • 描述: 不受控制的资源消耗 - 产品未能正确控制有限资源的分配和维护,从而使参与者能够影响消耗的资源量,最终导致可用资源耗尽。

识别信息

  • CVE ID: CVE-2025-61919
  • GHSA ID: GHSA-6xw4-3v39-52mm

源代码

  • rack/rack

贡献者

  • 报告者: Pirikara
  • 修复开发者: jeremyevans
  • 修复审查者: ioquatix
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计