漏洞总结:jv_setpath() / jv_getpath() / delpaths_sorted() 中的无限递归 漏洞概述 在 、 和 函数中存在无限递归漏洞。这些函数在处理路径数组时没有深度限制检查,当路径数组包含超过 60,000 个元素时,会导致栈溢出(SIGSEGV)和程序崩溃。 受影响版本: <= 1.8.1 严重程度: 中等 (Moderate) CVE ID: CVE-2026-33947 影响范围 拒绝服务 (DoS): 任何调用这些函数的 jq 进程,如果接收到足够长的路径数组,都会崩溃 绕过现有深度限制: JSON 解析器的 MAX_PARSING_DEPTH (10,000) 不保护此路径数组,因为路径数组是在 jq 运行时级别构建的,而不是在 JSON 解析期间 受影响场景: - 使用 jq 转换或提取数据的 Web 服务 - 处理未配置或 API 响应的 CI/CD 管道 - 使用 jq 处理路径的 shell 脚本 - 嵌入 jq 库且路径参数可被外部输入影响的应用程序 修复方案 添加深度/长度检查到每个递归函数的入口点: 同样的检查应添加到 和 。 或者,将递归实现转换为迭代实现(如 中 所做的那样)。 POC 代码 方法 1: 通过 JSON 输入攻击 方法 2: 直接过滤器表达式 方法 3: 通过 delpaths 深层路径 验证结果