
التمثيل البصري، Fuzzing، استغلال وتصحيح ثغرة Baron Samedit
التصور، Fuzzing، الاستغلال والتصحيح لثغرة Baron Samedit
انظر التقرير »
Francesco Marchiori
·
Alessandro Lotto
تأتي جميع أنظمة التشغيل المبنية على Unix مع أمر sudo الذي يسمح برفع صلاحيات الجذر مؤقتًا للمستخدمين الذين يُتوقع منهم ذلك. يقدم sudo وظيفة حساسة قد يؤدي إساءة استخدامها إلى اختراق أمان النظام وموثوقيته. وبسبب أهميته داخل نظام التشغيل، يُخضع الكود المصدري لـ sudo لاختبارات ومراجعات كود متكررة. وقد أدت هذه إلى اكتشاف ثغرة تجاوز على الكومة (heap-based overflow) تُسمى CVE-2021-3156، والتي ظلت مخفية بشكل مدهش لنحو 10 سنوات. ولم تسمح حتى تقنيات Fuzzing، وهي إحدى أكثر التقنيات استخدامًا لاكتشاف الأخطاء والثغرات، باكتشافها من قبل. في هذه الورقة، نحلل بالتفصيل ثغرة CVE-2021-3156 في sudo، بدءًا من ثغرة تجاوز سعة المخزن المؤقت (buffer overflow) وصولًا إلى كيفية استغلالها للحصول على root shell حتى لو كان المستخدم غير مميز أو غير مسموح له باستخدام أمر sudo.
يوجد في مجلد Visualization بعض النصوص البرمجية التي استخدمناها لتصور كيفية تحليل الوسائط بوجود أحرف الخط المائل العكسي (backslash) أو بدونها، وتحليل كيفية تأثير متغيرات البيئة على تخطيط الكومة (heap layout)، بغرض فهم بنية الاستغلال المقترح بشكل أعمق.
يوجد في مجلد Fuzzing الملفات اللازمة لإجراء اختبارات Fuzzing على الإصدار الهش من sudo. ويوضح التقرير أيضًا كيفية إجراء الفيزينغ وحل المشكلات التي تمنع AFL من العمل مباشرة دون إعدادات إضافية، مما يفسر كيف ظلت الثغرة مخفية لنحو 10 سنوات.
يوجد في مجلد Exploit الملفات اللازمة لتنفيذ الهجوم على إصدار هش آخر من sudo. نستغل ملء الذاكرة عبر متغيرات البيئة لتنفيذ ما يُعرف بـ heap feng shui والكتابة فوق اسم كائن service_user، من أجل تنفيذ الكود الخاص بنا بدلاً من تحميل مكتبة.
يوجد في مجلد Patch سكربت overflow_simulation_patch.c يحاكي سلوك التجاوز ويصححه بكود إضافي قمنا بكتابته. وبما أن مطوري مشروع Sudo قرروا إصلاح مسار الثغرة بدلاً من الكود نفسه، نعرض نهجًا مختلفًا وكيف يمكن إصلاحها ببضعة أسطر فقط من الكود.