IPBUF安全漏洞报告
English
CVE-2026-43896 CVSS 6.2 中危

CVE-2026-43896 jq拒绝服务漏洞

披露日期: 2026-05-11

漏洞信息

漏洞编号
CVE-2026-43896
漏洞类型
拒绝服务
CVSS评分
6.2 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
jq

相关标签

拒绝服务DoSjq栈溢出递归漏洞

漏洞概述

jq是一款轻量级的命令行JSON处理器。在1.8.1及更早版本中,其核心库中的jv_object_merge_recursive()函数存在严重的逻辑缺陷。该函数在处理对象合并时缺乏对递归深度的检查,导致攻击者可以构造特定的jq程序。当程序使用*运算符对两个对象进行操作时,会触发无限递归,进而导致进程发生段错误崩溃,造成拒绝服务。

技术细节

漏洞根源在于jq源码中jv_object_merge_recursive()函数的实现逻辑不严谨。该函数用于递归合并两个JSON对象,但在实现过程中未设置最大递归深度限制。当攻击者利用*运算符对两个操作数均为对象的表达式进行求值时,如果其中一个对象包含自引用或极深的嵌套结构(如通过函数定义生成递归对象),递归过程将无法终止。这种无限制的递归调用会迅速消耗调用栈空间,最终导致Stack Overflow。由于CVSS向量为AV:L,攻击者需控制本地输入,一旦执行,jq进程将崩溃,影响可用性。

攻击链分析

STEP 1
步骤1:构造恶意数据
攻击者编写包含递归对象结构的jq脚本,利用函数定义生成自引用对象。
STEP 2
步骤2:诱导执行
攻击者诱使受害者使用存在漏洞的jq版本(1.8.1及以下)处理该恶意脚本。
STEP 3
步骤3:触发漏洞
jq解析器执行对象合并操作,调用jv_object_merge_recursive()函数。
STEP 4
步骤4:拒绝服务
函数陷入无限递归,耗尽栈空间导致段错误,jq进程崩溃。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-43896 # Trigger unbounded recursion using object merge operator * def crash: {a: .} * {a: crash}; # Execute the recursive merge crash

影响范围

jq <= 1.8.1

防御指南

临时缓解措施
在无法立即升级的情况下,建议对输入的jq脚本或JSON数据进行严格的复杂度检查,避免处理包含深度嵌套或自引用的数据结构。同时,可以使用操作系统资源限制(如ulimit -s)限制进程栈大小,以减轻崩溃对系统的影响。

参考链接