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方法在处理非多部分表单提交时,会执行以下操作:
|
|
由于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框架的用户立即升级到修复版本,或在基础设施层面配置请求体大小限制,以防止潜在的内存耗尽攻击。