
PoC لتصعيد الامتيازات في Windows 10 Diagnostics Hub Standard Collector Service
إثبات المفهوم لتصعيد الامتيازات في خدمة Diagnostics Hub Standard Collector على نظام ويندوز 10
مكتبة Diagnostics Hub Packaging، التي تستخدمها خدمة Windows Standard Collector Service، يمكن إجبارها على نسخ ملف عشوائي إلى موقع عشوائي بسبب عدم محاكاة العميل في DiagnosticsHub.StandardCollector.Runtime.dll.
إليك مقالة مفصلة عن كيفية اكتشاف هذه الثغرة واستغلالها: ثغرة تصعيد الامتيازات في خدمة Windows Standard Collector Service.
تسمح خدمة Standard Collector Service بتعريف عدة قيم عند تكوين جلسة التشخيص، بما في ذلك دليل المسح ومعرف الجلسة. يمكن أن يكون معرف الجلسة أي GUID ويمكن أن يكون دليل المسح أي موقع يملك المستخدم صلاحيات الكتابة إليه. إذا تم تكوين جلسة التجميع بمعرف c13851b2-b1e1-438f-bf73-949df897f1bf ومسار مسح C:\Users\Bob\AppData\Local\Temp\Microsoft\F12\perftools\visualprofiler\، تحدث الأحداث التالية عند استدعاء طريقة GetCurrentResult لكائن ICollectionSession:
C:\Users\Bob\AppData\Local\Temp\Microsoft\F12\perftools\visualprofiler\c13851b2-b1e1-438f-bf73-949df897f1bf.1.m.etlC:\Users\Bob\AppData\Local\Temp\Microsoft\F12\perftools\visualprofiler\Report.c13851b2-b1e1-438f-bf73-949df897f1bf.1C:\Users\Bob\AppData\Local\Temp\Microsoft\F12\perftools\visualprofiler\Report.c13851b2-b1e1-438f-bf73-949df897f1bf.1\EAD6A227-31D4-4EA2-94A9-5DF276F69E65يتم إنشاء هذه المجلدات وملفات ETL بواسطة خدمة التجميع لحزمة .diagsession التي يتم إنشاؤها عادةً عند انتهاء الجلسة. يؤدي استدعاء طريقة Stop على كائن ICollectionSession إلى قيام خدمة التجميع بتنفيذ حزمة التشخيص عن طريق استدعاء Microsoft::DiagnosticsHub::Packaging::DhPackageDirectory::CommitPackage. ستقوم دالة CommitPackage بنسخ أو نقل الملف الأصلي {scratch path}\c13851b2-b1e1-438f-bf73-949df897f1bf.1.m.etl إلى مجلد المعرف العشوائي: {scratch path}\Report.c13851b2-b1e1-438f-bf73-949df897f1bf.1\EAD6A227-31D4-4EA2-94A9-5DF276F69E65\c13851b2-b1e1-438f-bf73-949df897f1bf.1.m.etl
يتم تنفيذ عملية النسخ/النقل التي يتم تشغيلها بواسطة دالة CommitPackagingResult في DiagnosticsHub.StandardCollector.Runtime.dll دون محاكاة المستخدم (على عكس إنشاء الملف/المجلد الأولي)، مما يؤدي إلى مشكلة TOCTOU محتملة إذا تم استبدال المجلد الهدف بنقطة تثبيت تعيد توجيه النسخ إلى موقع عشوائي. لاستغلال هذه المشكلة بطريقة مفيدة، سيحتاج المهاجم إلى تبديل محتويات ملف ETL قبل نسخه. يمكن القيام بذلك عن طريق التغلب على حالة السباق باستخدام OpLock بعد تحرير مقبض الملف بواسطة الخدمة.
على الرغم من أننا لا نتحكم بشكل كامل في اسم ملف .etl الذي يتم نسخه، يمكننا استخدام خدعة الرمز المرتبط بدليل الكائنات للتحكم فيه. سيبدو إعداد نقطة التثبيت + الرمز المرتبط كما يلي:
{scratch path}\Report.c13851b2-b1e1-438f-bf73-949df897f1bf.1\EAD6A227-31D4-4EA2-94A9-5DF276F69E65\ -> \RPC Control\\RPC Control\c13851b2-b1e1-438f-bf73-949df897f1bf.1.m.etl -> C:\Windows\System32\anything.dllإن التحكم في محتويات الملف وموقع النسخ واسم الملف يمنح المهاجم العديد من إمكانيات تحميل DLL. ومع ذلك، يوضح إثبات المفهوم المرفق أن التحكم في اسم الملف ليس ضروريًا لأن خدمة التجميع تقوم بتحميل DLL بأي اسم ملف، طالما أنه موجود في دليل C:\Windows\System32 أو C:\Windows\System32\DiagSvcs. يتم ذلك عن طريق بدء جلسة تجميع جديدة مع وكيل يحتوي على اسم تجميع يطابق اسم DLL المنسوخ c13851b2-b1e1-438f-bf73-949df897f1bf.1.m.etl.
إثبات المفهوم المرفق هو حل فيجوال ستوديو (VS) يحتوي على مشروع C++ DLL لحمولة فتح notepad.exe ومشروع C# للتفاعل مع الخدمة واستغلال الثغرة باستخدام مكتبة NtApiDotNet.
خطوات إعادة الإنتاج:
النتيجة المتوقعة:
تقوم عملية تنفيذ الحزمة بمحاكاة المستخدم وتفشل عند محاولة نسخ الملف.
النتيجة الملاحظة:
يتم نسخ الملف إلى مجلد الهدف الخاص بنقطة التثبيت C:\Windows\System32، ثم تحميله كعامل تجميع، وأخيراً، يتم تشغيل notepad.exe بامتيازات SYSTEM.