Rack多部分解析器存在无限制头部缓冲漏洞,可导致内存耗尽型拒绝服务攻击

本文详细分析了Ruby Rack框架多部分解析器(CVE-2025-61772)中的一个高危漏洞。该漏洞由于未对每个部分的头部数据大小进行限制,攻击者可通过发送恶意构造的请求导致服务器内存耗尽,从而实现拒绝服务攻击。

Rack多部分解析器缓冲区无限制漏洞分析(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

1
@sbuf.scan_until(/(.*?\r\n)\r\n/m)

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

影响

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

缓解措施

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

参考链接

安全评估

严重等级: 高 CVSS综合评分: 7.5

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百分位数) 此分数估计了该漏洞在未来30天内被利用的概率。

弱点分类

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

标识符

  • CVE ID: CVE-2025-61772
  • GHSA ID: GHSA-wpv5-97wm-hp9c

源代码

仓库: rack/rack

贡献者

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