IPBUF安全漏洞报告
English
CVE-2026-44777 CVSS 5.5 中危

CVE-2026-44777 jq模块加载器无限递归漏洞

披露日期: 2026-05-11

漏洞信息

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

相关标签

拒绝服务DoS无限递归jqJSON

漏洞概述

CVE-2026-44777是jq命令行JSON处理器中存在的一个拒绝服务漏洞。该漏洞影响1.8.2rc1及更早版本。由于普通模块加载器在处理模块依赖时未实施循环检测机制,当两个原本有效的模块相互包含引用时,加载器将进行无限递归。攻击者可诱导用户加载特制的相互引用的JSON模块文件,触发无限循环,导致应用程序崩溃或资源耗尽,从而造成拒绝服务。

技术细节

该漏洞的核心原理在于jq的模块加载器逻辑存在缺陷。在正常情况下,模块加载器应维护一个已加载或正在加载的模块列表,以防止循环依赖导致的无限递归。然而,受影响的jq版本在解析`include`指令时,没有检查目标模块是否已经在当前的调用栈中。当模块A包含模块B,且模块B又包含模块A时,程序将陷入死循环。随着递归深度的增加,调用栈会被迅速填满,导致栈溢出错误,或者CPU资源被长时间占用。攻击向量为本地(AV:L),需要用户交互(UI:N - 等等,输入说是UI:R),意味着攻击者需要诱骗用户执行命令来处理恶意文件。

攻击链分析

STEP 1
1. 构造恶意文件
攻击者创建两个jq模块文件(如a.jq和b.jq),并配置它们相互包含(include)对方,形成循环依赖。
STEP 2
2. 投递载荷
攻击者将包含这些文件的压缩包或仓库发送给目标用户,诱导用户下载并使用jq处理这些文件。
STEP 3
3. 触发漏洞
用户在终端执行jq命令加载恶意模块。模块加载器开始解析,遇到循环依赖时进入无限递归状态。
STEP 4
4. 拒绝服务
由于无限递归消耗大量栈空间或CPU时间,jq进程崩溃或无响应,导致服务不可用。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Create two files that include each other # File: exploit_a.jq include "exploit_b"; # File: exploit_b.jq include "exploit_a"; # Execute the command to trigger the vulnerability # The program will hang or crash due to stack overflow from infinite recursion. # $ jq -n -f exploit_a.jq

影响范围

jq <= 1.8.2rc1

防御指南

临时缓解措施
建议用户不要随意执行包含未知模块的jq脚本。在无法立即升级的情况下,可以使用操作系统的资源限制工具(如`ulimit -s`限制栈大小)来运行jq,从而降低因栈溢出导致系统不稳定的风险,但这仅作为临时缓解手段。

参考链接

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