CVE-2026-41257CVE-2026-41257 是影响 jq 命令行 JSON 处理器的一个安全漏洞。在版本 1.8.1 及更早版本中,jq 字节码虚拟机的数据栈使用有符号整数来跟踪其分配大小。当通过深度嵌套的生成器分支使堆栈增长超过约 1 GiB 时,其倍增算术运算会发生溢出。这个被包装后的值被传递给 realloc,随后用于具有攻击者影响偏移量的 memmove 操作。该漏洞可能导致应用程序崩溃或潜在的代码执行,攻击者需要诱导本地用户处理特制的恶意 JSON 数据才能触发此漏洞。
该漏洞的根本原因在于 jq 字节码虚拟机的数据栈实现中存在整数溢出缺陷。具体而言,数据栈的分配大小变量被定义为有符号整数。当 jq 处理深度嵌套的生成器分支结构时,堆栈需要进行扩容操作。扩容通常采用倍增策略,即分配当前大小两倍的空间。然而,当堆栈大小接近或超过有符号整数的最大值的一半时,即达到约 1 GiB 时,执行倍增运算会导致整数溢出,产生一个负值或很小的正整数。这个溢出后的错误大小值随后被传递给 realloc 函数。关键在于后续的 memmove 操作,由于使用了错误的堆栈大小作为偏移量或长度参数,且这些参数受到攻击者输入数据的影响,攻击者可以利用这一点触发越界内存读写。这可能导致堆破坏、程序崩溃,或在特定条件下实现任意代码写入。由于攻击向量为本地且需要用户交互,攻击者通常需诱骗用户在命令行中处理恶意构造的 JSON 文件。