SandboxEscaper / PoC-LPE: ما الذي بداخله؟


يوجد بالفعل خبر عن هذه الثغرة الأمنية على أحد الخوادم ، ولكن للأسف ، بدون تفاصيل فنية. أقترح عليك أن تنظر داخل الأرشيف المنشور (المؤلف - SandboxEscaper ).

تحت القاطع هو ترجمة وثيقة الوصف في الأرشيف.

وصف الضعف


تحتوي خدمة جدولة المهام على واجهة RPC (يمكن الوصول إليها عبر النقل ALPC) تدعم طريقة SchRpcSetSecurity.

هذا هو النموذج الأولي لهذه الطريقة:

long _SchRpcSetSecurity( [in][string] wchar_t* arg_1, //Task name [in][string] wchar_t* arg_2, //Security Descriptor string [in]long arg_3); 

تقوم المهام التي تم إنشاؤها بواسطة برنامج جدولة المهام بإنشاء الدليل / الملف المقابل في المهام c: \ windows \ system32 \. ربما هذه الطريقة مخصصة لتسجيل مهام DACL'a الموجودة هناك. لكن التسجيل سيحدث بعد انتحال الهوية. ومع ذلك ، لسبب ما ، يتحقق تنفيذ الطريقة أيضًا من وجود ملف .job في مهام c: \ windows \ ويكتب عليه DACL بدون انتحال . نظرًا لأن المستخدم (حتى المستخدم في مجموعة الضيف) يمكنه إنشاء ملفات في هذا الدليل ، يمكننا ببساطة إنشاء رابط صلب لأي ملف آخر يمكننا قراءته. باستخدام مثل هذا الرابط الثابت ، يمكننا فرض خدمة المجدول (تنفيذ بامتيازات النظام) لكتابة DACL تعسفي (انظر معلمة SchRpcSetSecurity الثانية) إلى ملف من اختيارنا.

وبالتالي: بالنسبة لأي ملف يمكن قراءته ، يمكنك تغيير DACL ، مما يتيح لك استبداله بالكامل.

استغلال الضعف


يعطينا هذا الضعف بدائية قوية حقا! تكمن المشكلة الرئيسية في أنه بعد التثبيت (افتراضيًا) ، يمكن تعديل العديد من الملفات المهمة فقط بواسطة مستخدم TrustedInstaller (ولكن ليس بواسطة مستخدم النظام).

يحتوي الأرشيف على برنامج نصي powerhell لإدراج الملفات التي يمكنك التحكم فيها. فقط قم بتشغيل:
./enumerate.ps1 >output.txt

النظام لديه العديد من الأهداف. يمكنك التحكم في ملفات البرنامج ، وإذا تم استخدام الملف الهدف من قبل مسؤول / مستخدم آخر ، يمكن تشغيل الملفات التي قمت بالكتابة فوقها بالامتيازات المطلوبة.

المشكلة الثانية هي أنه على الرغم من أنه يمكننا التحكم في العديد من الملفات ، إلا أن الكتابة عليها غالبًا ما تكون مستحيلة ، لأن ملفات DLL هذه تم تحميلها بالفعل في مكان ما للتنفيذ. ستؤدي محاولة كتابة DACL لملف تم تحميله للتنفيذ إلى حدوث خطأ في الوصول المشترك. ولكن يمكن استخدام الثغرة لأنواع أخرى من الملفات ، والتي قد تكون هدفًا أفضل من DLL.

للتشغيل ، تم تحديد الملف C: \ Windows \ System32 \ DriverStore \ FileRepository \ prnms003.inf_amd64_4592475aca2acf83 \ Amd64 \ printconfig.dll (قد يختلف اسم الدليل ، يؤخذ هذا في الاعتبار في PoC). يبدو أن هذا الملف ينتمي إلى طابعة XPS ولا يتم تحميله في خدمة الطباعة بشكل افتراضي (قد يحدث أن الملف تم تحميله بالفعل ... ولكن في أغلب الأحيان لا يتم تحميله).

وعندما نبدأ مهمة الطباعة باستخدام طابعة XPS ، ستقوم الخدمة بتحميل ملف DLL هذا ، والذي يمكننا إعادة كتابته مسبقًا. يمكن تطبيق ناقلات الهجوم (الاختطاف) بسهولة على شيء أفضل. يمكنني أن أجد أفضل الخيارات ... فقط أعلمني.

ملاحظة : على جهاز كمبيوتر محمول قديم ، حيث يعمل Windows 10 منذ عدة سنوات ، يوجد دليلان prnms003.inf_amd64_ *. لا يحذف الإصدار الجديد الإصدار القديم ، مما يعني أنه لا يوجد ضمان بأن FindFirstFile (المستخدم في PoC) سيجد الدليل الحالي. لذلك ، يمكنك توسيع التعليمات البرمجية عن طريق الكتابة فوق كافة printconfig.dll الموجودة أو التحقق من سمة السجل الأخير في الملف وتحديد سجل أحدث.

تجريبي


يمكنك أيضًا العثور على مقطع فيديو مع عرض توضيحي في الأرشيف:
نص مخفي

Source: https://habr.com/ru/post/ar421593/


All Articles