IPBUF安全漏洞报告
English
CVE-2026-39956 CVSS 6.1 中危

CVE-2026-39956 jq内存损坏漏洞

披露日期: 2026-04-13

漏洞信息

漏洞编号
CVE-2026-39956
漏洞类型
内存损坏
CVSS评分
6.1 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
jq

相关标签

内存损坏拒绝服务信息泄露jqCVE-2026-39956指针解引用

漏洞概述

jq命令行JSON处理器中的_strindices内置函数存在漏洞。该函数未验证参数类型直接将其传递给底层函数,而底层函数依赖的断言在发布版本中被移除。攻击者可利用此漏洞通过构造特殊数值输入导致程序崩溃,或实现受控的指针解引用和有限的内存读取。

技术细节

该漏洞发生在jq的src/builtin.c文件中,_strindices内置函数在未验证参数是否为字符串的情况下,直接将其传递给src/jv.c中的jv_string_indexes()函数。jv_string_indexes()内部仅使用assert()来确保参数类型。然而,当jq使用-DNDEBUG标志编译为Release版本时,assert()检查会被剥离。因此,攻击者可以传入数字(如0)代替字符串,导致程序将数值作为指针进行解引用,引发段错误(DoS)。更进一步,通过构造符合IEEE-754格式的特定数值,攻击者可以控制解引用的内存地址,从而建立有限的内存读取和探测原语,泄露敏感信息。

攻击链分析

STEP 1
1. 侦察
攻击者确认目标环境使用了Release版本编译的jq来处理不可信的JSON数据。
STEP 2
2. 构造恶意输入
攻击者构造包含恶意jq过滤器的输入,调用_strindices函数并传入精心设计的数值(如0或特定的IEEE-754数值)。
STEP 3
3. 交付
诱导受害者或系统处理包含恶意过滤器的JSON数据。
STEP 4
4. 执行
jq解析器执行_strindices函数,因缺少类型检查将数值直接作为指针解引用。
STEP 5
5. 影响达成
导致jq进程崩溃(拒绝服务)或根据数值内容读取内存中的特定位置(信息泄露)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-39956 # Triggering a crash in jq release build by passing a number to _strindices echo '{}' | jq '_strindices(0)' # To demonstrate the memory read primitive concept (theoretical): # An attacker would craft a specific IEEE-754 double value representing a target address. # e.g., echo '{}' | jq '_strindices(<crafted_float_value>)'

影响范围

jq (commit 69785bf77f86e2ea1b4a20ca86775916889e91c9 之后)
jq (commit fdf8ef0f0810e3d365cdd5160de43db46f57ed03 之前)

防御指南

临时缓解措施
在无法立即升级的情况下,应严格限制或禁用对不可信数据的jq处理,特别是避免使用内置函数_strindices。开发者可考虑在沙箱环境中运行jq,或重新编译jq以移除-DNDEBUG标志(保留assert检查),但这可能会影响性能。

参考链接

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