Rack多部分解析器内存耗尽漏洞分析:CVE-2025-61771技术详解

本文详细分析Rack多部分解析器在处理大型非文件字段时存在的内存耗尽漏洞,攻击者可通过发送大型文本字段触发拒绝服务,影响所有处理多部分表单提交的Rack应用。

Rack多部分解析器内存耗尽漏洞分析

漏洞概述

CVE-2025-61771是一个影响Rack多部分解析器的高危漏洞。该漏洞允许攻击者通过发送包含大型非文件字段的多部分表单数据,导致服务器内存耗尽,从而引发拒绝服务(DoS)攻击。

技术细节

受影响版本

  • < 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/form-data请求时,对非文件表单字段(不带文件名的部分)采用全内存缓冲策略:

1
2
body = String.new  # 非文件字段 → 内存缓冲区
@mime_parts[mime_index].body << content

关键问题

  • 文件部分:流式传输到临时文件
  • 非文件部分:完全缓冲到内存中的Ruby String对象
  • 缺乏限制:这些内存缓冲区没有大小限制

影响分析

攻击场景

攻击者可以发送包含大型文本字段的请求:

  • 单个字段可达数百MB或更大
  • 消耗等量的进程内存
  • 导致内存不足(OOM)条件
  • 引发严重的垃圾回收开销

影响范围

所有处理多部分表单提交的Rack应用程序都受到影响。

缓解措施

推荐方案

升级修复版本:使用已修复的Rack版本,这些版本对非文件字段实施了合理的大小限制(例如2 MiB)。

临时解决方案

  1. Web服务器层限制:在Web服务器或代理层限制最大请求体大小(如Nginx的client_max_body_size)
  2. 应用层验证:在应用层验证并拒绝异常大的表单字段

技术参考

  • GHSA ID: GHSA-w9pc-fmgc-vxvw
  • CVE ID: CVE-2025-61771
  • 修复提交:
    • rack/rack@589127f
    • rack/rack@d869fed
    • rack/rack@e08f78c

安全指标

CVSS v3.1评分

  • 基础分数: 7.5(高危)
  • 向量: AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

弱点分类

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

致谢

该漏洞由安全研究人员kwkr报告,修复由jeremyevans开发,ioquatix进行修复审查。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计