CVE-2026-40612: jq 栈溢出允许攻击者使 JSON 处理器崩溃
CVE-2026-40612 在 jq 1.8.1 及更早版本中允许攻击者通过深度嵌套的 JSON 输入触发栈溢出,使工具崩溃。CVSS 7.5。

执行摘要
CVE-2026-40612 是 jq 中的一个栈溢出漏洞,jq 是广泛使用的命令行 JSON 处理器,影响 1.8.1 及更早版本。该缺陷存在于 jv_contains 函数中,该函数递归遍历嵌套数组和对象,而不强制执行深度限制。攻击者可以提供精心制作的、深度嵌套的 JSON 输入 —— 使用 jq 的 reduce 操作符以编程方式构建 —— 耗尽 C 栈,导致应用程序崩溃。该漏洞于 2026 年 5 月 12 日通过 GitHub 安全咨询披露,并带有 CVSS v3.1 基础得分 7.5(高严重性)。截至本文撰写时,尚未发布补丁。
技术分析
jq 运行时中的 jv_contains 函数旨在检查一个 JSON 值是否包含在另一个 JSON 值中。根据在 jqlang/jq GitHub 存储库上发布的咨询,该函数递归地深入嵌套数组和对象,没有对递归深度的限制。虽然 jq 的内置 JSON 解析器将输入嵌套限制在 10,000 级 —— 这是对恶意输入的防护 —— 但可以通过 jq 自身的 reduce 操作符访问 jv_contains 函数,该操作符允许以编程方式构建深度嵌套的结构,绕过解析器的深度限制。
能够提供触发 jv_contains 的 jq 过滤器或输入文件的攻击者,将导致 C 运行时栈溢出。C 程序中的栈溢出通常会导致段错误(SIGSEGV),终止进程。在处理不受信任 JSON 的多租户或自动化环境中 —— 例如 CI/CD 管道、日志聚合系统或 API 网关 —— 这可能被用于拒绝服务。
咨询指出,该问题是由 jq 维护者内部发现的。尚未公开发布概念验证漏洞,但技术细节足以使有动机的攻击者复现崩溃。该漏洞被归类在 CWE-674(不受控制的递归)下。
jq 是无数 Linux 发行版、容器镜像和软件堆栈中的依赖项。它的普遍性意味着拒绝服务的表面很广,尽管利用需要能够向运行的 jq 实例提供精心制作的输入。
缓解措施与建议
截至 2026 年 5 月 12 日,尚未发布 jq 的修补版本。jq 维护者已承认该问题,并正在努力修复。防御者应在此期间采取以下步骤:
- 避免在自动化或暴露的上下文中使用 jq 处理不受信任的 JSON。如果 jq 在接受外部输入的 CI/CD 管道或 Web 服务中使用,请考虑用替代的 JSON 处理器(例如
yq、dasel或语言原生 JSON 库)替换它,直到补丁可用。 - 在应用程序层实现输入验证,以拒绝深度嵌套的 JSON 结构在到达 jq 之前。对于大多数用例,嵌套深度限制为 100 或更少是合理的默认值。
- 监控依赖 jq 的系统的崩溃。jq 进程中的未解释的段错误可能表明尝试利用。
- 尽快应用补丁。订阅 jqlang/jq 存储库以获取更新。
订阅更新
将最新的网络安全资讯直接发送到您的邮箱。
