Rack多部分数据解析漏洞导致内存耗尽DoS攻击

本文详细分析了CVE-2025-61770漏洞,该漏洞存在于Rack的多部分数据解析器中,由于对前导数据缺乏大小限制,攻击者可通过发送大量数据导致内存耗尽和服务拒绝。

Rack无限制多部分前导数据缓冲导致DoS(内存耗尽)· CVE-2025-61770

漏洞详情

包信息

  • 包管理器: 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在内存中无限制地缓冲整个多部分前导数据(第一个边界之前的字节)。攻击者可以发送一个大的前导数据后跟有效的边界,导致大量内存使用,并可能因内存不足(OOM)条件而导致进程终止。

详细说明

在搜索第一个边界时,解析器将传入数据附加到共享缓冲区(@sbuf.concat(content))并扫描边界模式:

1
@sbuf.scan_until(@body_regex)

如果尚未找到边界,解析器会无限期地继续缓冲数据。前导数据没有修剪或大小上限,允许攻击者在第一个边界之前发送任意数量的数据。

影响

远程攻击者可以通过在multipart/form-data请求中包含长前导数据来触发大的瞬时内存峰值。影响随着允许的请求大小和并发性而扩展,可能由于垃圾回收导致工作进程崩溃或严重减速。

缓解措施

升级

使用修复版本的Rack,强制执行前导数据大小限制(例如16 KiB)或根据RFC 2046 § 5.1.1完全丢弃前导数据。

临时解决方案

  • 在代理或Web服务器级别限制总请求体大小
  • 监控内存并设置每个进程的限制以防止OOM条件

参考信息

安全评分

  • 严重程度: 高
  • CVSS评分: 7.5/10
  • CVSS向量: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

弱点分类

  • CWE: CWE-400 - 不受控制的资源消耗

致谢

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