Featured image of post Rack多部分解析器存在未限制的头缓冲区,可导致拒绝服务攻击

Rack多部分解析器存在未限制的头缓冲区,可导致拒绝服务攻击

本文详细分析了CVE-2025-61772漏洞,该漏洞存在于Rack的multipart解析器中,攻击者可通过发送未正确终止的multipart头来触发无限制的内存消耗,最终导致拒绝服务。文章包含了漏洞细节、影响范围、缓解措施及参考链接。

Rack’s multipart parser buffers unbounded per-part headers, enabling DoS (memory exhaustion) · CVE-2025-61772 · GitHub Advisory Database

漏洞详情

  • 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 在解析多部分(multipart)请求时,如果一个部分的头区块从未以必需的空行(CRLFCRLF)终止,解析器会无限累积数据。解析器会持续将传入的字节附加到内存中,而没有大小上限,这使得远程攻击者能够耗尽内存并导致拒绝服务(DoS)。

细节 在读取多部分头时,解析器使用以下代码等待终止符CRLFCRLF:

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

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

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

缓解措施

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

参考

发布时间线

  • ioquatix 发布到 rack/rack – Oct 7, 2025
  • 由国家漏洞数据库发布 – Oct 7, 2025
  • 发布到GitHub Advisory Database – Oct 7, 2025
  • 已审核 – Oct 7, 2025
  • 最后更新 – Oct 13, 2025

严重程度

  • CVSS 总体评分:7.5

CVSS v3 基本指标

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

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 设计