Rack框架曝内存耗尽漏洞,URL编码表单解析可致DoS攻击

Rack框架在处理application/x-ww-form-urlencoded类型请求时存在内存耗尽漏洞,攻击者可通过发送超大请求体导致服务拒绝,本文详细分析漏洞原理、影响范围和修复方案。

Rack框架内存耗尽DoS漏洞分析

漏洞概述

Rack框架在处理application/x-www-form-urlencoded内容类型的请求体时存在安全漏洞,攻击者可通过发送无限制的大型请求体导致内存耗尽,从而引发拒绝服务(DoS)攻击。

受影响版本

  • < 2.2.20
  • = 3.0, < 3.1.18

  • = 3.2, < 3.2.3

技术细节

漏洞原理

Rack::Request#POST方法在处理非多部分表单提交时,会执行以下操作:

1
form_vars = get_header(RACK_INPUT).read

由于read方法在没有参数的情况下被调用,整个请求体将被完整加载到Ruby字符串中。这一操作发生在查询参数解析或任何参数限制执行之前,因此没有上游请求体大小限制的Rack应用程序可能会遭受无限制的内存分配。

影响分析

  • 攻击者可发送大型application/x-www-form-urlencoded请求体消耗进程内存
  • 导致系统变慢或被操作系统终止(OOM)
  • 影响程度与请求大小和并发数呈线性关系
  • 即使配置了解析限制,该问题仍会在限制执行前发生

修复方案

立即措施

升级到已修复的Rack版本:

  • 2.2.20
  • 3.1.18
  • 3.2.3

缓解方案

在代理或Web服务器层强制执行最大请求体大小限制:

  • Nginx: client_max_body_size
  • Apache: LimitRequestBody

技术参考

  • GHSA ID: GHSA-6xw4-3v39-52mm
  • CVE ID: CVE-2025-61919
  • CVSS评分: 7.5(高危)
  • 弱点类型: CWE-400(不可控资源消耗)

安全建议

建议所有使用受影响版本Rack框架的用户立即升级到修复版本,或在基础设施层面配置请求体大小限制,以防止潜在的内存耗尽攻击。

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