CVE-2026-32316jq是一个命令行JSON处理器。在1.8.1及之前版本中,jvp_string_append()和jvp_string_copy_replace_bad函数存在整数溢出漏洞。当拼接总长度超过2^31字节的字符串时,用于计算缓冲区分配大小的32位无符号整数发生溢出,导致系统分配了过小的堆缓冲区。随后的内存拷贝操作将完整的字符串数据写入该缓冲区,引发堆缓冲区溢出。任何处理不受信任jq查询的系统均受影响,攻击者可利用此漏洞导致进程崩溃或通过堆破坏进一步利用。
该漏洞的根源在于jq在处理字符串拼接时未对字符串大小进行边界检查。在jvp_string_append()和jvp_string_copy_replace_bad函数中,当拼接操作的字符串总长度超过2^31字节时,用于计算所需缓冲区大小的变量会发生32位无符号整数回绕(CWE-190)。这导致malloc分配的堆内存空间远小于实际所需大小。随后,程序执行memcpy操作,试图将大量的源数据拷贝到这个微小的缓冲区中,从而覆盖了相邻的堆内存区域(CWE-122)。由于jq通常被用于处理外部输入,攻击者可以通过构造包含超大字符串拼接操作的恶意JSON查询来触发此漏洞,实现拒绝服务攻击或潜在的任意代码执行。