IPBUF安全漏洞报告
English
CVE-2026-28810 CVSS 3.7 低危

CVE-2026-28810 Erlang/OTP DNS缓存投毒漏洞

披露日期: 2026-04-07
来源: 6b3ad84c-e1a6-4bf7-a703-f496b71e49db

漏洞信息

漏洞编号
CVE-2026-28810
漏洞类型
DNS缓存投毒
CVSS评分
3.7 低危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Erlang/OTP

相关标签

DNS Cache PoisoningErlang/OTPPredictable IdentifierCVE-2026-28810

漏洞概述

Erlang/OTP 内核组件(inet_res和inet_db模块)存在可预测数字生成漏洞,导致 DNS 缓存投毒风险。内置 DNS 解析器使用顺序的、进程全局的 16 位事务 ID 进行 UDP 查询,且未实现源端口随机化。由于响应验证几乎完全依赖此 ID,攻击者若能观察一次查询或预测下一个 ID,即可伪造 DNS 响应污染缓存。此漏洞违背了 RFC 5452 建议,影响多个 OTP 版本。

技术细节

该漏洞源于 Erlang/OTP 内置 DNS 解析器(inet_res)在实现上的严重缺陷。首先,解析器使用顺序的、进程全局的 16 位事务 ID(Transaction ID)来标识 UDP DNS 查询。这种可预测性使得攻击者能够轻易猜出后续查询的 ID。其次,解析器未实现源端口随机化,这进一步减少了攻击者伪造响应所需猜测的信息熵。根据 RFC 5452 标准,DNS 查询应通过随机化端口和事务 ID 来防止投毒攻击,但 inet_res 未能遵循此最佳实践。攻击者利用此漏洞,只需观察到一次合法查询或通过计算预测下一个 ID,即可构造伪造的 DNS 响应。由于验证机制薄弱,解析器会接受这些伪造响应并将其存入缓存,从而将用户流量重定向至恶意服务器。尽管官方文档建议仅在受信任网络使用,但未明确标注导致误用风险。

攻击链分析

STEP 1
1. 信息收集
攻击者定位使用 Erlang/OTP 内置解析器的目标,并监听其 DNS 流量。
STEP 2
2. 预测 ID
攻击者捕获一个合法的 DNS 查询包,获取当前的 16 位事务 ID,并根据顺序递增特性预测下一个 ID。
STEP 3
3. 构造恶意响应
攻击者构造一个伪造的 DNS 响应包,包含预测的事务 ID 和恶意 IP 地址(如钓鱼网站地址)。
STEP 4
4. 竞速投毒
攻击者在合法 DNS 服务器响应之前,将伪造的响应包发送给目标。
STEP 5
5. 缓存污染
由于目标验证机制薄弱,接受伪造响应并更新本地 DNS 缓存,导致后续请求被重定向。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # PoC for CVE-2026-28810: Predictable DNS Transaction ID # This script demonstrates the logic to predict the next Transaction ID. # In a real attack, the attacker would spoof a DNS response with this ID. from scapy.all import * def predict_next_id(current_id): # Erlang/OTP uses a sequential 16-bit ID return (current_id + 1) % 65536 def monitor_dns_traffic(interface): print(f"[*] Monitoring DNS traffic on {interface}...") sniff(iface=interface, prn=dns_callback, filter="udp port 53", store=0) def dns_callback(packet): if packet.haslayer(DNS) and packet[DNS].qr == 0: current_id = packet[DNS].id predicted_id = predict_next_id(current_id) print(f"[+] Observed Query ID: {current_id}") print(f"[+] Predicted Next ID: {predicted_id}") print("[!] Attacker can now spoof a response with ID {}".format(predicted_id)) # Note: This requires root privileges and Scapy installed. # Usage: python3 poc.py

影响范围

Erlang/OTP 17.0 至 28.4.2
Erlang/OTP 27.3.4.10 之前版本
Erlang/OTP 26.2.5.19 之前版本

防御指南

临时缓解措施
在无法立即升级的情况下,建议禁用 Erlang/OTP 内置的 inet_res 解析器,转而配置操作系统级别的 DNS 解析(如 systemd-resolved 或 dnsmasq),或者确保应用程序仅在严格受信任的内网环境中运行,并配置防火墙规则限制 DNS 流量的来源。

参考链接

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