Rack参数限制绕过漏洞分析
漏洞概述
Rack::QueryParser在2.2.18之前的版本中存在不安全默认配置,允许通过分号分隔的参数绕过params_limit限制。
技术细节
问题根源
Rack::QueryParser中的check_query_string方法仅计算&字符来确定参数数量,但默认分隔符正则表达式DEFAULT_SEP = /[&;] */n同时基于&和;进行分割。这种不匹配意味着使用;分隔符的查询未被计入参数数量,从而允许绕过params_limit。
影响范围
- 受影响版本:< 2.2.18
- 已修复版本:2.2.18
影响分析
直接影响
直接使用Rack::QueryParser默认配置(无显式分隔符)的应用程序或中间件可能面临CPU和内存消耗增加的风险。这可能被滥用作有限的拒绝服务攻击向量。
安全边界
Rack::Request作为典型Rack应用程序的主要入口点,以安全方式使用QueryParser,默认情况下不易受到攻击。因此,严重性被认为较低,影响仅限于直接使用QueryParser的边缘情况。
缓解措施
立即行动
-
升级到修复版本:升级到Rack的修补版本,其中
&和;都被一致地计入params_limit。 -
配置显式分隔符:如果无法立即升级,使用显式分隔符(例如
&)配置QueryParser以避免不匹配。
长期防护
作为一般预防措施,在Web服务器或代理层(例如Nginx、Apache或CDN)强制执行查询字符串和请求大小限制,以减轻过多的解析开销。
技术参考
- GHSA ID:GHSA-625h-95r8-8xpm
- CVE ID:CVE-2025-59830
- 修复提交:rack/rack@54e4ffd
安全评分
- CVSS v3.1评分:7.5(高危)
- 向量:AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- EPSS评分:0.058%(第18百分位)
相关弱点
- CWE-400:不受控制的资源消耗
- CWE-770:无限制或节流的资源分配