Rack多部分解析器头缓冲区无限制,可导致拒绝服务(内存耗尽)漏洞分析

本文详细分析了CVE-2025-61772漏洞,该漏洞存在于Rack的多部分解析器中,允许攻击者通过发送未正确终止的请求头来耗尽服务器内存,导致拒绝服务。

Rack的多部分解析器无限缓冲每个部分的头部,导致DoS(内存耗尽)· CVE-2025-61772

漏洞详情

  • 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 在多部分请求的某个部分的头块始终未以必需的空行(CRLFCRLF)终止的情况下,会持续累积无限制的数据。解析器会不断将接收到的字节追加到内存中,而没有大小限制,这使得远程攻击者能够耗尽内存并导致拒绝服务(DoS)。

详情 在读取多部分头部时,解析器使用以下代码等待CRLFCRLF: @sbuf.scan_until(/(.*?\r\n)\r\n/m)

如果终止符从未出现,它会无限期地继续追加数据(@sbuf.concat(content))。对累积的头部字节没有限制,因此单个格式错误的部分可以消耗与请求正文大小成比例的内存。

影响 攻击者可以通过发送不完整的多部分头部来触发高内存使用,导致进程终止(内存不足)或严重减速。其影响随请求大小限制和并发性而扩大。所有处理多部分文件上传的应用程序都可能受到影响。

缓解措施

  • 升级到已修复的Rack版本,该版本限制了每个部分的头部大小(例如,64 KiB)。
  • 在此之前,在代理或Web服务器层限制最大请求大小(例如,Nginx的client_max_body_size)。

参考

漏洞严重程度

高严重性 CVSS总体评分:7.5 / 10

CVSS v3基本指标

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

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

EPSS评分:0.159%(第37百分位)

弱点

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

CVE ID

  • CVE-2025-61772

GHSA ID

  • GHSA-wpv5-97wm-hp9c

源代码

  • rack/rack

致谢

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