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

本文详细分析了Rack多部分解析器在处理大型非文件字段时存在内存耗尽漏洞的技术细节,包括漏洞成因、影响范围和修复方案,涉及内存管理和DoS攻击防护。

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

漏洞概述

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

技术细节

受影响版本

  • Rack < 2.2.19
  • Rack >= 3.1, < 3.1.17
  • Rack >= 3.2, < 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.2.19
  • 3.1.17
  • 3.2.2

这些版本对非文件字段实施了合理的大小限制(如2 MiB)。

临时解决方案

  1. 在Web服务器或代理层限制最大请求体大小

    • 例如:Nginx的client_max_body_size配置
  2. 在应用层验证和拒绝异常大的表单字段

参考信息

  • GHSA ID: GHSA-w9pc-fmgc-vxvw
  • CVSS评分: 7.5(高危)
  • 攻击向量: 网络
  • 权限要求: 无
  • 用户交互: 无
  • 影响范围: 可用性高

技术特征

  • 弱点类型: CWE-400(不受控制的资源消耗)
  • 影响组件: rack/rack RubyGem
  • 修复提交: rack/rack@589127f, rack/rack@d869fed, rack/rack@e08f78c
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计