Rack多部分解析器存在无限制头缓冲区漏洞,可导致内存耗尽DoS攻击

本文详细分析了Rack多部分解析器中的安全漏洞CVE-2025-61772,该漏洞允许攻击者通过发送未终止的多部分头数据导致内存耗尽,造成拒绝服务攻击,影响范围涵盖所有处理多部分上传的应用程序。

Rack多部分解析器缓冲区无限制导致DoS(内存耗尽)漏洞分析

漏洞详情

包信息

  • 包名: 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/10(高危)

CVSS v3基础指标

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

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

EPSS评分

0.146%(第36百分位)

弱点分类

  • 弱点: CWE-400
  • 描述: 未受控制的资源消耗。产品未能正确控制有限资源的分配和维护,从而使参与者能够影响消耗的资源量,最终导致可用资源耗尽。
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计