ضعف عميل Windows Steam ، ولكن ليس 0day

في السلسلة السابقة


منذ وقت ليس ببعيد ، تحدثت عن اثنين من نقاط الضعف في Steam: CVE-2019-14743 و CVE-2019-15316 . كانت هناك قصة كاملة حول كيفية محاولة تسجيلهم ، ولم تنجح ، لقد تم حظري ، وفقط بعد الكشف العلني ومساعدة المجتمع الذي تمكنت من تحقيق النتائج. تظاهر Valve بالاعتذار وإلغاء الحظر على HackerOne ، لذلك قررت نقل الثغرة الأمنية التالية من خلال هذه الخدمة. في المرة الثالثة ( يجب أن تكون هناك نكتة واضحة حول Half-Life 3 ) ، كل شيء سار بشكل أو بآخر بنجاح.



وصف الضعف


تسمح لك مشكلة عدم الحصانة بإنشاء ملفات ذات محتوى يتم التحكم فيه جزئيًا (أو إضافة محتوى يتم التحكم فيه جزئيًا إلى الملفات الموجودة). إصدار الخدمة المستضعفة هو 5.31.28.21 (بيانات من ملف SteamService.exe). أولاً ، سأشرح كيفية استغلال الثغرة الأمنية ، ثم سأصف العواقب المحتملة.

الخطوة 1. البيئة


يجب عليك إنهاء تطبيق Steam وإيقاف خدمة عملاء Steam إذا كانت تعمل. في معظم الأحيان ، لا يمكن للمستخدمين الذين لا يملكون حقوق المسؤول بدء أي خدمات وإيقافها. ولكن على وجه التحديد لهذه الخدمة ، ضبط Valve الحقوق التي تسمح لجميع المستخدمين بالتوقف وبدء تشغيلها.

قم بإنشاء مجلد في أي مكان يمكن للمستخدم الوصول إليه (على سبيل المثال ، "C: \ test"). في هذا المجلد ، تحتاج إلى نسخ ملفات Steam.exe و steamclient.dll من مجلد مصدر Steam (بشكل افتراضي ، هذا هو "C: \ Program Files (x86) \ Steam"). قم بإنشاء مجلد فرعي لسجلات فارغة ("C: \ test \ logs").

الآن ، دعونا نصلح السجل: في فرع "HKLM \ Software \ wow6432node \ valve \ steam" ، قم بتغيير قيمة المعلمة "InstallPath" إلى "C: \ test \ 1 \ ..". عادة ، بالنسبة للمستخدمين غير المسؤولين ، فإن فروع التسجيل داخل HKLM غير قابلة للكتابة ، ولكن ليس في هذه الحالة. عند تثبيت Valve ، قاموا بتعيين هذه الحقوق على فرعهم داخل HKLM بحيث تكون جميع الإجراءات متاحة لجميع المستخدمين ("تحكم كامل" لمجموعة "Users").

الخطوة 2. دعونا نفعل اختبار قليلا


إطلاق خدمة عملاء Steam. بعد توقفه (سيحدث هذا تلقائيًا بعد بضع ثوانٍ) ، تحقق من محتويات المجلد "C: \ test \ logs" - نجد الملف "service_log.txt" هناك. ستكون محتويات السجل مثل هذا:

08/27/19 13:45:01 : ERROR: SteamService: Invalid file signature C:\test\1\..\bin\SteamService.dll 

لاحظ أن المسار "C: \ test \ 1 \ .." مكافئ للمسار "C: \ test" ، لذلك استخدم Windows المسار الثاني للعمل ، وأول واحد وصل إلى الرسالة. احذف الملف "service_log.txt" وتابع.

الخطوة 3. إضافة المزيد من النص.


حقيقة مثيرة للاهتمام: عندما يعمل Windows مع مسارات تحتوي على "\ .." ، فإنه يبسط هذه المسارات تلقائيًا. عدم إجراء عمليات تدقيق للمجلدات المرحلية.

على سبيل المثال ، سيتم تحويل المسار "C: \ 1 \ <test> \ .." إلى "C: \ 1" على الرغم من حقيقة أن أقواس الزاوية لا يمكن استخدامها في اسم المجلد.

في الخطوة الأولى ، سجلنا المسار في السجل ، والآن سنضيف فواصل الأسطر إليه. يمكن القيام بذلك عن طريق كتابة رمز بسيط ، ولكن يمكن القيام بذلك من خلال واجهة regedit أيضًا. فقط افتح فرع التسجيل "HKLM \ Software \ wow6432node \ valve \ steam" وحدد "تعديل البيانات الثنائية .." في قائمة السياق لمعلمة "InstallPath". سيظهر شيء يشبه محرر hex حيث يمكنك إجراء التعديلات اللازمة.



سنقوم بإجراء اختبار تجريبي آخر للخدمة والتحقق من نتيجة أفعالنا.



بعد الاختبار ، يجب عليك مرة أخرى حذف الملف "service_log.txt".

الخطوة 4. إعادة توجيه الملف الذي تم إنشاؤه


لا يمكن للمستخدمين الذين ليس لديهم حقوق المسؤول إنشاء ارتباطات رمزية من ملف إلى آخر. ولكن هناك تركيز - يمكنك دمج أنواع أخرى من الروابط المتاحة للمستخدمين دون حقوق المسؤول للحصول على تأثير قريب من ارتباط من ملف إلى آخر.

أولاً ، قم بإنشاء نقطة إعادة توزيع NTFS (اسم آخر لنقطة تحميل NTFS) من المجلد "C: \ test \ logs" إلى "\ RPC Control \". "\ RPC Control \" ليس مجلدًا عاديًا بالمعنى المعتاد ، ولا يمكن عرضه ، على سبيل المثال ، في المستكشف. هذا هو دليل كائن النظام ، والذي بداخله ، على سبيل المثال ، تم تسمية mutexes والأحداث وغيرها من الكائنات المشابهة. لماذا إعادة التوجيه عبر NTFS تعمل نقطة إعادة التوزيع من أجلها غير واضحة ، على الأرجح ، تتمثل النقطة في استخدام نفس التجريدات للمجلدات في نظام الملفات ودلائل الكائنات. من دليل الكائنات ، يمكنك إنشاء رابط إلى ملف بدون حقوق المسؤول. قم بإنشاء ارتباط من النموذج "\ RPC Control \ service_log.txt" <-> "C: \ Path \ to \ file".

نتيجةً لذلك ، سيتم إعادة توجيه أي مكالمات إلى "C: \ test \ logs \ service_log.txt" إلى الملف "C: \ Path \ to \ file". لإنشاء إعادة توجيه من هذا القبيل ، يوجد متطلبان أساسيان - يجب أن يكون المجلد الذي تم إنشاء نقطة إعادة توزيع NTFS منه فارغًا ، كما يجب أن يكون قابلاً للكتابة للمستخدم. لتحقيق الشرط الأول ، بعد كل اختبار قمنا بحذف الملف "service_logs.txt" ، يتم ضمان الشرط الثاني بحقيقة أننا أنشأنا المجلد المصدر في مكان يتحكم فيه المستخدم.

هناك أداة مساعدة خاصة تنشئ مثل هذه الأزواج من الروابط - CreateSymlink ومتاحة للتنزيل على GitHub . فائدة الاستخدام:

 CreateSymlink.exe <> <> 

في حالتنا ، سيكون:

 CreateSymlink.exe "C:\test\logs\service_log.txt" "C:\\\" 

بتجميعها معًا ، نحصل على أنه عندما تبدأ خدمة عميل Steam ، سيتم إنشاء ملف على طول المسار المحدد عند إنشاء الارتباط ، وسيحتوي هذا الملف على محتوى يمكننا التحكم فيه (جيدًا ، باستثناء السطر الأول والأخير). إذا حددنا المسار إلى ملف موجود ، فسيتم إلحاق المحتويات بنهاية الملف. سيتم كل ذلك نيابة عن Steam Client Service مع امتيازات NT AUTHORITY \ SYSTEM.

تأثير


الآن سأدرج الآثار المحتملة لأقلها أهمية وتصاعدياً.

  1. دوس

    إذا كان هدف الارتباط هو تعيين "C: \ Windows \ System32 \ config \ SAM" أو "C: \ Windows \ System32 \ config \ SECURITY" ، فمن غير المرجح أن يكون نظام التشغيل قادرًا على التمهيد بعد إعادة التشغيل.
  2. إعادة توجيه المستخدم على الإنترنت

    حدد هدف الارتباط "C: \ Windows \ system32 \ drivers \ etc \ hosts" وأضف سطرًا مثل "127.0.0.1 google.com" هناك.

    النتيجة:

  3. EoP أفقي
    الزيادة الأفقية في الامتيازات هي تغيير في الحقوق نتمكن فيه من الوصول ليس إلى حقوق أعلى ، ولكن إلى حقوق من نفس المستوى ، ولكن بالنسبة إلى كائنات أخرى ، على سبيل المثال ، إلى حقوق المستخدمين الآخرين.

    حدد هدف الارتباط "C: \ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs \ StartUp \ run.bat" وقم بإضافة سطر مثل "start C: \ test \ 1.exe" هناك.
    يتم تنفيذ جميع الملفات من المجلد C: \ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs \ StartUp بواسطة المستخدمين عند تسجيل الدخول. وبالتالي ، يمكن لمستخدم واحد فرض مستخدم آخر لتشغيل التعليمات البرمجية. من ملف الخفافيش ، سيتم تنفيذ جميع الخطوط بدورها. الأول والأخير ببساطة لن يفعل أي شيء ، لكن الأمر المطبق "start C: \ test \ 1.exe" سيعمل.

    مع إدخال مثل هذا الأمر ، هناك دقة واحدة - سيتم أخذ الأحرف "\" في الاعتبار أثناء تطبيع المسار ، لذلك من أجل التشغيل الصحيح ، سيكون من الضروري إضافة المزيد من "\ .." إلى المسار في السجل.
  4. عمودي eoP
    تصعيد الامتياز العمودي هو تصعيد معتاد ، على سبيل المثال ، من مستخدم بدون حقوق المسؤول إلى NT AUTHORITY \ SYSTEM.

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

بالإضافة إلى ذلك ، للتحسين ، يمكنك التحقق من القدرة على إنشاء ملفات xml ، ملفات ini بتنسيق معطل. لسوء الحظ ، هناك العديد من الخيارات - إنشاء مهام لـ TaskSheduler ، والعمل مع .manifest وتنزيلات المكتبة الأخرى ، والعديد من الخيارات الأخرى. يبدو لي أن النتائج الموضحة أعلاه كافية بالفعل لفهم نتائج الضعف.

جدول زمني


لإكمال الصورة ، سأعطي جدولًا زمنيًا مملًا حول مشكلة عدم الحصانة هذه.
08/26 - العثور على ثغرة أمنية.
27 أغسطس - إلغاء الحظر على h1 ، نشر تقرير.
12.09 - تم إصدار تصحيح .

النتائج


هذا هو المكان الذي أنهيت فيه أبحاث Steam - 3 نقاط ضعف تم العثور عليها بتحليل سطحي إلى حد ما ، هذا لا يكفي. للذهاب أعمق تحتاج إلى مزيد من الوقت والرغبة. لسوء الحظ ، يمثل موقف Valve وعدم كفاءة موظفي HackerOne حواجز قوية للغاية.

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

هذا المقال باللغة الإنجليزية.

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


All Articles