CVE-2025-15284CVE-2025-15284是qs库中的一个输入验证漏洞,该漏洞影响qs版本低于6.14.1。qs是一个流行的JavaScript查询字符串解析库。漏洞的根本原因在于arrayLimit选项的实现不一致:arrayLimit只对索引表示法(如a[0]=1&a[1]=2)强制执行数组大小限制,但对括号表示法(如a[]=1&a[]=2)没有进行限制检查。这导致攻击者可以通过构造特殊的查询字符串绕过数组大小限制,潜在导致拒绝服务(DoS)攻击。不过,由于默认的parameterLimit设置为1000,在默认配置下实际风险较低,因为parameterLimit会限制总参数数量。需要注意的是,如果parameterLimit被设置为较高的值,潜在的安全风险会增加。
漏洞存在于qs库的lib/parse.js文件中。在解析查询字符串时,代码对两种数组表示法的处理方式不一致:
1. 索引表示法处理(第175行):代码正确检查了index <= options.arrayLimit,在超出限制时跳过处理。
2. 括号表示法处理(第159-162行):代码直接调用utils.combine([], leaf)创建数组,完全没有进行arrayLimit检查。
具体问题代码:
if (root === '[]' && options.parseArrays) {
obj = utils.combine([], leaf); // No arrayLimit check
}
攻击者可以通过设置arrayLimit为较低值(如5),然后使用括号表示法传入超过限制数量的数组元素(如6个),来验证漏洞存在。输出数组长度将为6而非预期的最大5。