Rack内存耗尽漏洞:通过无限制URL编码表单解析导致的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错误)
- 影响程度与请求大小和并发数呈线性关系
- 即使配置了解析限制,该问题仍会在限制生效前发生
修复方案
已修复版本
2.2.203.1.183.2.3
缓解措施
- 更新到已修复的Rack版本,该版本使用
query_parser.bytesize_limit强制执行表单参数限制 - 在代理或Web服务器层强制执行严格的最大请求体大小限制:
- Nginx:
client_max_body_size - Apache:
LimitRequestBody
- Nginx:
参考链接
- GHSA-6xw4-3v39-52mm
- https://nvd.nist.gov/vuln/detail/CVE-2025-61919
- 相关修复提交:4e2c903、cbd541e、e179614
安全评分
- CVSS v3.1评分:7.5(高危)
- 攻击向量:网络
- 影响:可用性高