
Writeup و POC لـ CVE-2020-0753 و CVE-2020-0754 وست ثغرات DOS غير مصححة في Windows.
قامت خدمة Windows Error Reporting بإصلاح خطأين من نوع رفع الامتيازات في آخر تحديث Patch Tuesday، وقد تم تخصيص CVE-2020-0753 وCVE-2020-0754 لهذين الخطأين. يستغل كلا الخطأين خلل سباق في عمليات نظام الملفات الخاصة بالخدمة. ومع ذلك، فإن هذين الخطأين ليسا سهلَي الاستغلال بسبب نافذة السباق الصغيرة وعدم اليقين في مواقع إسقاط الملفات. هنا نشارك تقنياتنا لاستغلالهما.
السبب الجذري لخلالي السباق مذكور في تقاريرنا، ويمكن التعبير عن السبب الفعلي بأن المتوقع قابل للاستغلال. عندما تعالج خدمة WER الملفات المؤقتة، فإنها تتعامل مع موقع الملف C:\ProgramData\Microsoft\Windows\WER\Temp، وهو دليل يمكن الكتابة والقراءة فيه للمستخدمين المصادَق عليهم. وهذا يعني أن مستخدمًا عاديًا بصلاحيات medium-IL يمكنه الكتابة فوق ملف أنشأته خدمة WER، بل وتحويله إلى رابط لنظام الملفات لإتلاف/حذف ملفات أخرى لم يكن قادرًا على لمسها.
للحفاظ على سلامة عمليات الملفات، تعتمد خدمة WER على واجهة برمجية قياسية تسمى GetTempFileNameW وتغلّفها بـ wersvc.dll->UtilGetTempFile، وهذه الواجهة تساعد WerSvc على توليد اسم ملف عشوائي غير مشغول بصيغة "WER****.tmp"،
الجزء العشوائي من اسم الملف يُولَّد برقم سداسي عشري من 4 بايت، من 0000-FFFF، وإذا كان الرقم مستخدمًا بالفعل لإنشاء ملف، ستأخذ الواجهة اسم ملف عشوائيًا آخر.
من الواضح أن هذه الاستراتيجية بها عيب إذا قام أحد بإنشاء 65535 ملفًا بأسماء من WER0000.tmp إلى
WERFFFE.tmp، ستختار الواجهة رقمًا عشوائيًا وتختبر اسم الملف لمعرفة ما إذا كان موجودًا، مثل WERA560.tmp، وستجد أن الملف موجود بالفعل، وبالتالي ستواصل الاختبار من WERA560.tmp حتى WERFFFF.tmp، وأثناء استمرار الاختبار، تظهر نافذة تحضيرية لأننا وجدنا طريقة تجعل WerSvc عالقًا في استدعاء GetTempFileNameW لمدة 4-5 ثوانٍ، وهي فجوة زمنية كبيرة جدًا. في هذه الأثناء، نُجبر الخدمة على إسقاط ملف مؤقت باسم ثابت، وهو
WERFFFF.tmp.
بعد أن تنشئ الخدمة الملف المؤقت المسمى WERFFFF.tmp، تغلق الواجهة تلقائيًا
المقبض (handle) الذي تحتفظ به للملف، وتعيد اسم الملف إلى الخدمة لإجراء عمليات إضافية عليه، وهذا هو الموضع الذي يُدخل الخطأ بالضبط. تتحقق ثلاثة شروط:
الملف الذي أنشأته الخدمة في موقع يمكن للمستخدم العادي التحكم به.
الخدمة تغلق جميع المقابض التي تحتفظ بها للملف.
ستستخدم الخدمة الملف لاحقًا (كتابة أو حذف).
هنا ستقوم الخدمة بكتابة محتويات في الملف ثم حذفه. كل من الكتابة والحذف سيسببان رفع امتيازات من خلال الاستفادة من روابط نظام الملفات وتقنيات استغلال معينة.
من أجل تحويل الخطأ إلى حذف ملف تعسفي، نستفيد بشكل إبداعي من تقاطيع دليل متعددة (Multiple directory junctions) لإكمال الاستغلال. يحتوي استغلالنا على الخطوات التالية:
WER***.tmp في $pwd\1\، وننشئ junction $pwd\2\ -> $pwd\1\؛$pwd\2\، ونُنشئ عملية أخرى لتنفيذ الأمر SetOplock $pwd\1\WERFFFF.tmp باستمرار؛$pwd\2\ -> \RPC CONTROL\، ثم نُنشئ رابط كائن رمزي \RPC CONTROL\WERFFFF.tmp -> $target و\RPC CONTROL\WERFFFF.tmp.etl -> $target.الاستغلال المفصل وPoC متاحان في WERReport-CVE-2020-0753.
من خلال استغلال الخلل في GetTempFileNameW، نحصل على موقع يمكن التنبؤ به ستعمل عليه الخدمة؛ وباستخدام junction متعدد المستويات لنظام الملفات، نجعل خلل السباق قابلاً للاستغلال بشكل موثوق.
في الوقت نفسه، لاحظنا أن هذا النوع من خلل السباق يمكن أن يسبب أيضًا مشكلة محتملة في الكتابة فوق الملفات، ومن ثم قد يؤدي إلى أخطاء رفع امتيازات في ظروف معينة.
لشرح السبب وراء إمكانية تحويل إتلاف ملف تعسفي (إذا كان يمكنك التحكم بجزء صغير جدًا من محتوى الملف: أقل من 63 بايت) إلى رفع امتيازات (EoP)، يجب أن ننتبه إلى آلية عمل Windows Defender.
يمتلك Windows Defender قاعدة بيانات لتوقيعات البرامج الضارة. إذا كان بعض الملفات يحتوي على توقيع برنامج ضار، فسيعتبره المدافع برنامجًا ضارًا ويحذفه. ومع ذلك، تؤدي هذه الميزة إلى سطح هجوم إضافي. على سبيل المثال، في WCTF2019 صمم @icchy من tokyowesterns تحدي ويندوز باسم "Gyotaku The Flag"، والذي يستخدم هذه الميزة كوسيلة شاهد (oracle) لتسريب المعلومات.
هنا نستفيد من هذه الميزة في Windows Defender لحذف ملف تعسفي إذا كان لدينا إتلاف ملف تعسفي مع تحكم جزئي في محتوى الملف. يمكننا فقط كتابة توقيع برنامج ضار في ملف وتشغيل فحص افتراضي بواسطة Windows Defender، وسيتم وضع الملف في منطقة العزل الخاصة بـ Defender، والتي يمكن لمستخدم عادي (أي مستخدم غير مسؤول بصلاحيات medium-IL) حذفها ببساطة عن طريق تشغيل عملية الفحص مرتين.
لذا يمكن تحويل خلل إتلاف ملف تعسفي إلى حذف ملف تعسفي طالما يمكن وضع سلسلة توقيع برنامج ضار في الملف الهدف باستخدام الخلل.
إتلاف الملف الهدف باستخدام خلل، ووضع سلسلة مميزة يمكن لـ Windows Defender التعرف عليها فيه.
تشغيل Windows Defender لفحص الملف الهدف، مما يؤدي إلى عزله.
تشغيل الفحص مرة أخرى، فيتم حذف الملف الهدف.
باستخدام هذه التقنية، نحصل على حذف ملف تعسفي بمساعدة Defender.
يمكن استغلال حذف الملف التعسفي بسهولة أكبر للحصول على امتيازات إضافية.
Microsoft OneDrive عبارة عن حزمة تطبيقات توفر خدمة التخزين السحابي الشخصي،
وقد تم دمج هذا التطبيق مع ويندوز كخيار تثبيت افتراضي منذ ويندوز 8. أثناء بحثنا، تم العثور على 6 ثغرات في المهام المجدولة الخاصة بخدمة OneDrive وإرسالها إلى MSRC.
إليك جدول بالثغرات التي سنكشف عنها في المهام المجدولة ذات الصلة بـ Microsoft OneDrive:
| البرنامج المعرض للخطر | النوع | تم توفير PoC |
|---|---|---|
| FileSyncConfig.exe | HardLink | نعم |
| FileSyncHelper.exe | HardLink | نعم |
| OneDriveFileSyncConfig.exe | SymLink | نعم |
| OneDriveSetup.exe | HardLink | نعم |
| OneDriveSetup.exe | HardLink | نعم |
| OneDriveStandaloneUpdater.exe | HardLink | نعم |
جميع الثغرات الست ناتجة عن قيام الخدمة بمعالجة غير صحيحة للروابط الصلبة (hardlinks) والروابط الرمزية (symlinks)، أثناء التعامل مع مواقع يمكن للمستخدم العادي التحكم بها. أثناء استغلال هذه الثغرات، تأتي صعوبة من أن اسم الملف يحتوي عادةً على pid للعملية الحالية أو طوابع زمنية تشير إلى وقت التعامل مع الملف. يمكن حل كلاهما عن طريق إعداد oplock على ملف dll فريد ستحاول الخدمة تحميله عند تشغيلها، حيث نكون قادرين على الحصول على كل ما نحتاجه للتنبؤ باسم الملف الذي ستحاول الخدمة التعامل معه لاحقًا. يتم توفير مثال PoC في دليل FileSyncConfigTemp_hardlink.
جميع الثغرات الست المذكورة أعلاه مقدمة مع تقرير كامل وبرنامج PoC، ورغم أن معظم الثغرات تسبب إتلاف ملف تعسفي في المقام الأول، فإن هذا النوع من الثغرات لا يزال يسبب تعطل النظام (عن طريق الكتابة فوق ملف تكوين نظام حاسم)، وكلها تتطلب إعادة تثبيت ويندوز. وبالتالي فهي تفي بمعيار نوع ثغرة رفض الخدمة في نظام ويندوز.
علاوة على ذلك، يمكن لهذا النوع من الثغرات أن يسبب بالفعل رفع امتيازات في سياقات معينة. لقد ناقشنا تقنية الاستغلال التي يمكنها الاستفادة من مشكلة الكتابة فوق ملف تعسفي لتحقيق بدائية حذف ملف تعسفي، وبالتالي فإن رفع الامتيازات قابل للتحقيق.
Zhiniang Peng of Qihoo 360 Core Security
02 فبراير 2020: تم الإبلاغ عن الثغرات
08 فبراير 2020: قام MSRC بالتحقيق والرد بشأن الثغرات الست في OneDrive التي أرسلناها، وكان استنتاجهم عدم الإصلاح بسبب الحاجة إلى تفاعل كبير من المستخدم / صعوبة كبيرة في بناء استغلال موثوق.
08 فبراير 2020: ردّنا: لا حاجة لتفاعل المستخدم. كل ما عليك فعله هو انتظار تشغيل المهمة المجدولة. لذا، هذا السيناريو نموذجي.
11 فبراير 2020: رد MSRC: كيف تحصل على الملف المحدد على جهاز المستخدم؟ وهل تضع كل التباديل لهذا الملف في ذلك المجلد؟ هل يجب أن يطابق Date/Hour/PID بالضبط؟ لهذه الأسباب يبدو أن هذا يتطلب جهدًا كبيرًا من المستخدم.