Rack多部分解析器存在无限制头缓冲区漏洞
漏洞详情
摘要
Rack::Multipart::Parser在处理多部分请求时,如果某个部分的头块从未以必需的空行(CRLFCRLF)终止,则会累积无限制的数据。解析器会持续将传入字节附加到内存中而没有大小上限,允许远程攻击者耗尽内存并导致拒绝服务(DoS)。
详细说明
在读取多部分头时,解析器使用以下代码等待CRLFCRLF:
|
|
如果终止符从未出现,它会无限期地继续附加数据(@sbuf.concat(content))。对累积的头字节没有限制,因此单个格式错误的部分可以消耗与请求体大小成比例的内存。
影响
攻击者可以发送不完整的多部分头来触发高内存使用,导致进程终止(OOM)或严重减速。影响随请求大小限制和并发性而扩展。所有处理多部分上传的应用程序都可能受到影响。
缓解措施
- 升级到已修复的Rack版本,该版本限制了每个部分的头大小(例如64 KiB)
- 在此之前,在代理或Web服务器层限制最大请求大小(例如Nginx的client_max_body_size)
技术规格
受影响版本
- < 2.2.19
-
= 3.1, < 3.1.17
-
= 3.2, < 3.2.2
已修复版本
- 2.2.19
- 3.1.17
- 3.2.2
安全指标
CVSS v3.1评分:7.5(高危)
- 攻击向量:网络
- 攻击复杂度:低
- 所需权限:无
- 用户交互:无
- 范围:未改变
- 机密性:无影响
- 完整性:无影响
- 可用性:高影响
弱点分类
- CWE-400:不受控制的资源消耗
参考链接
- GHSA-wpv5-97wm-hp9c
- https://nvd.nist.gov/vuln/detail/CVE-2025-61772
- rack/rack相关修复提交