jq 算法复杂度 DoS 漏洞总结 漏洞概述 jq 在处理 JSON 对象哈希表操作时,使用了硬编码的 MurmurHash3 种子( )。由于种子是固定的且公开可见,攻击者可以离线计算哈希碰撞,构造出所有键都哈希到同一个桶的 JSON 对象。这导致操作复杂度从 $O(1)$ 退化到 $O(n^2)$,使得任何 jq 表达式的时间复杂度变为 $O(n^2)$。 影响范围 受影响版本:所有版本 影响场景:CPU 耗尽型拒绝服务(DoS)。影响 CI/CD 管道(如 )、Web 服务、数据处理脚本等。 资源消耗:仅需约 100KB 的精心构造 JSON 即可触发,无需像堆溢出漏洞那样需要 1-43GB 数据。 修复方案 建议将硬编码的种子改为随机生成的种子。 1. 在启动时生成随机种子。 2. 如果系统支持,从 读取随机数作为种子。 3. 如果无法获取随机数,则使用当前时间作为种子。 POC 代码