
هندسة عكسية شاملة واستغلال لـ CVE-2019-17147، وهو تجاوز سعة المخزن المؤقت للمكدس في أجهزة التوجيه TP-Link TL-WR841N. يتضمن تحليل البرامج الثابتة، تصحيح الأخطاء على مستوى العتاد، واستغلال حقن شيلكود مرحلي لـ RCE دون مصادقة.

يُوثّق هذا المستودع عملية الهندسة العكسية الشاملة واستغلال ثغرة CVE-2019-17147، وهي ثغرة حرجة من نوع تنفيذ التعليمات البرمجية عن بعد (RCE) في راوتر TP-Link TL-WR841N (معمارية MIPSEL). توجد الثغرة في خادم الويب httpd، حيث يؤدي التحقق غير الصحيح من المدخلات إلى تجاوز سعة المخزن المؤقت (Stack Buffer Overflow) عبر دالة مخصصة cstr_strncpy، مما يؤدي إلى تنفيذ تعليمات برمجية عشوائية دون مصادقة.
| الثغرة | CVE-2019-17147 |
|---|---|
| CVSS v3.1 | 8.8 (عالية) |
| المتجه | AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| النوع | تجاوز سعة المخزن المؤقت على المكدس |
| المكون | /usr/bin/httpd |
تم إنشاء بيئة التحليل باستخدام المكونات التالية:
flashrom (تفريغ الذاكرة)، binwalk (استخراج البرامج الثابتة)، IDA Pro (التحليل الثابت)، GDB-Multiarch (التصحيح عن بعد)، QEMU (محاكاة MIPSEL).TL-WR841N(US)_V14_180319.تم تحديد الثغرة في الملف الثنائي /usr/bin/httpd. كشف التحليل الثابت عبر IDA Pro عن دالة نسخ سلسلة مخصصة، cstr_strncpy، تُستخدم أثناء تحليل رأس HTTP (تحديداً رأس Host).

تستقبل الدالة cstr_strncpy معامل copy_len المشتق من طول السلسلة المصدر بدلاً من حجم المخزن المؤقت الوجهة. وهذا يسمح بتجاوز سعة المخزن المؤقت التقليدي عند تقديم رأس طويل للغاية. علاوة على ذلك، تتأثر الدالة http_parser_argStrToList، التي تتعامل مع هيكل قائمة مرتبطة، بهذا التجاوز، مما يمنح السيطرة على مؤشرات next و prev.
أكد التصحيح أثناء التشغيل باستخدام gdbserver حدوث التعطل والسيطرة على تدفق التنفيذ. كشف تحليل خريطة الذاكرة (vmmap) عن افتقار حاسم للتصلب:

يسمح هذا التكوين بالتنفيذ المباشر للـ Shellcode الموضوع على الكومة، متجاوزاً الحاجة إلى سلاسل ROP المعقدة.
تستخدم سلسلة الاستغلال بدائية Write-What-Where المستمدة من مؤشرات القائمة المرتبطة التالفة لتحقيق تنفيذ التعليمات البرمجية عن بعد.
strcpy، يتم إرسال الحمولة عبر طلبات متعددة:
atol في جدول الإزاحة العام (GOT) بعنوان الـ Shellcode.atol (عبر رأس Content-Length)، معيداً توجيه التنفيذ إلى الـ Shellcode المحقون.
يعمل النص البرمجي النهائي بلغة Python على أتمتة الهجوم بنجاح، مما يؤدي إلى فتح شل الجذر على المنفذ 31337.

تنبع الثغرة من الممارسات غير الآمنة في إدارة المخازن المؤقتة.
cstr_strncpy ببدائل آمنة تفرض حدود المخزن المؤقت الوجهة بدقة (مثل strncpy مع فحص صريح للحدود بناءً على sizeof(dest)).للحصول على شرح تفصيلي خطوة بخطوة للعملية بأكملها، بما في ذلك تحليل الكود وإعداد البيئة، يرجى مراجعة الأدلة الكاملة المضمنة في هذا المستودع:
هذا المشروع مخصص للأغراض التعليمية والبحثية فقط. المعلومات المقدمة تهدف إلى تحسين أمان أجهزة إنترنت الأشياء. المؤلفون ليسوا مسؤولين عن أي سوء استخدام للمعلومات أو الكود الوارد في هذا المشروع.
بناءً على البحث والتحليل الأصليين.