
مهمة جامعية توثق ثغرة CVE-2020-8597، وهي تجاوز سعة المخزن المؤقت (stack buffer overflow) في محلل EAP لـ pppd، مع عرض استغلال لتنفيذ تعليمات برمجية عن بعد باستخدام إعداد خادم pppoe وعميل.
معهد سريلانكا لتكنولوجيا المعلومات
الواجب 1
م. ب. د. م. دياس
IT19165530
MLB_WD_Y2S1_13.1
ثغرة تنفيذ التعليمات البرمجية عن بُعد في برنامج خادم بروتوكول نقطة إلى نقطة (CVE-2020-8597)
برمجة الشبكات والأنظمة – IE2012
المحتوى
المقدمة
بروتوكول نقطة إلى نقطة (PPP) هو بروتوكول مزدوج الاتجاه يسمح بتغليف البيانات البسيطة وتوزيعها عبر البنية التحتية للطبقة الثانية أو طبقة ارتباط البيانات، والتي تمتد من اتصالات الطلب الهاتفي عبر DSL إلى الشبكات الخاصة الافتراضية (VPN) التي تتضمن تشفير SSL. نظرًا لأن هذه البروتوكولات لا تسمح بالاتصالات من نقطة إلى نقطة، يُستخدم PPP أيضًا لفرض IP و TCP عبر عقدتين متصلتين مباشرة. pppd هو برنامج خادم يُستخدم في أنظمة التشغيل الشبيهة بـ Unix لإدارة إنشاء جلسات PPP وإنهاء الجلسات بين عقدتين.
PPP هو البروتوكول المستخدم لإنشاء اتصالات الإنترنت عبر مودمات الطلب الهاتفي واتصالات DSL والعديد من أشكال الاتصالات الأخرى من نقطة إلى نظير عبر الشبكات الخاصة الافتراضية (VPN)، مثل بروتوكول tunneling من نقطة إلى نقطة (PPTP). يمكن لبرنامج pppd أيضًا مصادقة النظير المتصل بالشبكة و/أو تزويد النظير بتفاصيل المصادقة باستخدام بروتوكولات مصادقة متنوعة مثل EAP.
بسبب خلل في معالجة برنامج خادم بروتوكول نقطة إلى نقطة (pppd) لحزمة بروتوكول المصادقة القابل للتوسيع (EAP)، يمكن لمهاجم بعيد غير موثوق أن يتسبب في تجاوز سعة المخزن المؤقت للمكدس، مما قد يسمح بتنفيذ تعليمات برمجية عشوائية على النظام المستهدف. يحدث هذا الضعف بسبب خطأ في التحقق من حجم الإدخال قبل نسخ البيانات المقدمة إلى الذاكرة. نظرًا لعدم صحة التحقق من صحة حجم البيانات، يمكن نسخ بيانات عشوائية إلى الذاكرة مما قد يؤدي إلى تسرب الملفات والمساهمة في تنفيذ تعليمات برمجية غير مقصودة.
يكمن الضعف في منطق كود تحليل EAP، وتحديدًا في دوال eap request() و eap response() في ملف eap.c والتي يستدعيها معالج إدخال الشبكة. تستخدم هذه الدوال، باستخدام البايت الأول كنوع، مؤشرًا وطولًا كمدخلات. إذا كان النوع هو EAPT MD5CHAP(4)، فإنها تنظر إلى منطقة مضمنة بطول 1 بايت. يهدف المنطق في هذا الكود إلى التأكد من أن المدة المضمنة أقل من الطول الإجمالي للحزمة. بعد هذا التحقق، تحاول نسخ البيانات المقدمة (اسم المضيف)، والتي توجد في مخزن مؤقت محلي للمكدس بعد حقل الطول المضمن. هذا التحقق للحدود غير صحيح ويسمح بنسخ الذاكرة بطول بيانات عشوائي.
يؤدي خطأ منطقي إضافي إلى عدم قيام الدالة eap input() باختبار ما إذا تم حل EAP أثناء عملية بروتوكول التحكم في الخط (LCP). يسمح هذا لمهاجم غير موثوق بإرسال حزمة EAP حتى إذا رفض ppp التفاوض على المصادقة بسبب عدم دعم EAP أو بسبب عدم الامتثال لعبارة مرور مشتركة متفق عليها مسبقًا في مرحلة LCP. في eap input، يجب أن يستمر كود pppd غير الآمن في معالجة حزمة EAP ويسبب تجاوز سعة المخزن المؤقت للمكدس. يمكن استخدام هذه البيانات غير المؤكدة وغير المعروفة الحجم لاختراق ذاكرة الجهاز الهدف. يعمل pppd أيضًا بامتيازات عالية (النظام أو الجذر)، ويعمل بالتكامل مع برامج تشغيل kernel.
يُستخدم برنامج pppd أيضًا مع مشروع LWIP (IP خفيف الوزن) لتوفير قدرة pppd لأجهزة الكمبيوتر الصغيرة. تركيبات وتثبيتات lwIP الافتراضية ليست عرضة لفيض المخزن المؤقت هذا. ومع ذلك، إذا تم استخدام كود مصدر lwIP وتم تعديله صراحةً للسماح بـ EAP في وقت الترجمة، فقد يكون البرنامج عرضة لفيض المخزن المؤقت.
CVE-2020-8597 هو خطأ في فيض المخزن المؤقت في pppd بسبب عيب مفاهيمي في معالج حزمة بروتوكول المصادقة القابل للتوسيع (EAP). يمكن لمهاجم بعيد غير موثوق يرسل حزمة EAP مصممة خصيصًا إلى عميل أو خادم PPP ضعيف أن يتسبب في حالة رفض الخدمة أو تنفيذ تعليمات برمجية عشوائية. نظرًا لأن pppd يعمل بالتكامل مع برامج تشغيل kernel وله أيضًا امتيازات عالية، مثل الجهاز أو النواة، فإن أي تنفيذ تعليمات برمجية قد يتم أيضًا بنفس الامتيازات.
الإشارة إلى من اكتشف الثغرة
اكتشفها الباحث في أمان IOActive، إيلجا فان سبرونديل، المشكلة الحرجة هي ثغرة فيض مخزن مؤقت للمكدس تنشأ بسبب خطأ منطقي في محلل وحدة بروتوكول المصادقة القابل للتوسيع (EAP) في تطبيقات pppd، وهو امتداد يوفر دعمًا لطرق مصادقة إضافية في اتصالات PPP.
يمكن استغلال الضعف، الذي يُراقب تحت CVE-2020-8597 بنتيجة CVSS 9.8، من قبل مهاجمين غير موثوقين لتنفيذ تعليمات برمجية عشوائية عن بُعد على الأجهزة المتأثرة والسيطرة الكاملة عليها.
كيف تم اكتشافها
يُعزى هذا الضعف إلى خطأ في التحقق من حجم الإدخال قبل نقل البيانات إلى الذاكرة. نظرًا لأن التحقق من صحة حجم البيانات خاطئ، يمكن نسخ بيانات عشوائية إلى الذاكرة وقد يؤدي ذلك إلى تجزئة قاعدة البيانات، مما يساهم على الأرجح في تنفيذ تعليمات برمجية غير مصرح بها.
تم العثور على الثغرة في منطق كود تحليل EAP، وتحديدًا في دوال eap request() و eap response() في ملف eap.c، والتي يتم استدعاؤها بواسطة معالج إدخال الشبكة.
من الخطأ الاستنتاج أن pppd ليس غير آمن إذا لم يتم السماح بـ EAP أو إذا لم يتم بدء EAP بواسطة نظير بعيد باستخدام كلمة مرور أو عبارة مرور. وذلك لأن متطفلاً موثوقًا قد يكون دائمًا قادرًا على إرسال حزمة EAP غير مرغوب فيها لإحداث فيض مخزن مؤقت.
تم تحديد الثغرة في برنامج خادم بروتوكول نقطة إلى نقطة (PPP)، أو pppd. PPP هو بروتوكول طبقة 2 يُستخدم لإنشاء اتصالات عبر مودمات الطلب الهاتفي واتصالات DSL والعديد من الشبكات المادية الأخرى، بما في ذلك الشبكات المحمولة. تم تضمين PPP وتوسيعه ليشمل بروتوكولات إضافية، مثل بروتوكول tunneling من نقطة إلى نقطة (PPTP) المستخدم في الشبكات الخاصة الافتراضية (VPN) لتوفير اتصالات مشفرة.
طوال هذه الحالة، تعاون فريق تعاون SEI CERT مع محلل الأمان إيلجا فان سبرونديل (IOActive) الذي اكتشف هذا الخلل والمطور البرمجي بول ميكراس (OZlabs) الذي يدير الكود المصدري لفحص المشكلة بسهولة وإيجاد حل بديل. تضمنت المشكلة فيض مخزن مؤقت في الكود المصدري لـ pppd بسبب فيض مخزن مؤقت أساسي في التعبير المنطقي وتنفيذ العبارات الشرطية الناتجة. يمكن خداع الجملة أدناه للسماح بتغذية راجعة ذات مدة غير معروفة ونسخها إلى مخزن مؤقت للمكدس. يُشار إلى ذلك عادةً باسم تحميل الإطار أو فيض المخزن المؤقت للمكدس.
if (vallen >= len + sizeof(rhostname)) { // Copy to buffer rhostname
كان إصلاح الثغرة هو ببساطة تغيير العبارة أعلاه إلى المنطق المنطقي أدناه.
if (len-vallen >= sizeof(rhostname)) { // Copy to buffer rhostname
أصدر بول CVE-2020-8597 لهذا الخلل واستمر في إصلاحه في الكود المصدري الذي يديره. تحديث النظام المطلوب لتصحيح الخطأ هو تحديث بسيط يتطلب بضعة أسطر فقط من التعليمات البرمجية. ومع ذلك، توجد هذه التكنولوجيا غير الآمنة في آلاف مكتبات مشاريع البرمجيات. تم اعتمادها من قبل أكثر من 100 شركة تقدم أجهزة وصول إلى الشبكة تتراوح من أجهزة التوجيه المنزلية إلى أجهزة الشبكات التجارية. نظرًا لأن هذا الضعف يؤثر على جميع عملاء وخوادم PPP، فإنه يؤثر أيضًا على مزودي خدمة الإنترنت (ISPs).
متى تم اكتشافها
في 4 مارس 2020، نشر باحثون في مركز تنسيق CERT (CERT/CC) ملاحظة ثغرة # 782301 لثغرة حرجة في إصدارات برنامج خادم بروتوكول نقطة إلى نقطة (pppd) من 2.4.2 إلى 2.4.8، مع الإفصاح المنسوب إلى إيلجا فان سبرونديل من IOActive.
ما الضرر الذي يمكن أن تسببه
من خلال إرسال حزمة EAP غير مرغوب فيها إلى عميل أو خادم PPP ضعيف، يمكن لمتطفل بعيد غير موثوق أن يتسبب في تلف الذاكرة في عملية pppd، مما قد يتطلب تنفيذ تعليمات برمجية عشوائية.
وفقًا للباحث، فإن إصدارات برنامج خادم بروتوكول نقطة إلى نقطة من 2.4.2 إلى 2.4.8 — جميع الإصدارات المنشورة في آخر 17 عامًا — معرضة لخطأ تنفيذ التعليمات البرمجية عن بُعد الجديد هذا. تم بالفعل الإبلاغ عن تأثر العديد من توزيعات Linux الشائعة والناجحة المذكورة أدناه، ومن المحتمل أن تتأثر العديد من المشاريع الأخرى أيضًا.
Debian Ubuntu SUSE Linux Fedora NetBSD Red Hat Enterprise Linux
بالإضافة إلى ذلك، من المحتمل أيضًا أن يكون عدد التطبيقات والأجهزة الأخرى القابلة للتأثر (بعضها مذكور أدناه) التي تشحن تطبيقات pppd واسعًا، مما يوفر سطح هجوم واسع للمتسللين.
Cisco CallManager منتجات TP-LINK نظام التشغيل المضمن OpenWRT منتجات Synology