
اختراق ويندوز عبر iTunes - تصعيد الامتيازات المحلي 0-day
هذه كتابة تحليلية حول CVE-2024–44193 وهي ثغرة تصعيد صلاحيات محلية في إصدار iTunes 12.13.2.3.
تم تصحيحها في 12 سبتمبر 2024 من قبل Apple. رابط الاستشارة الأمنية من Apple: الاستشارة الأمنية من Apple
إصدار iTunes 12.13.2.3 يثبّت خدمة اكتشاف أجهزة Apple:
C:\Program Files\Common Files\Apple\Mobile Device Support\AppleMobileDeviceService.exe وهي معرضة لثغرة تصعيد صلاحيات محلية.
احترامًا وتفهمًا لمن لا يهتمون بكتابة أخرى سيئة الصياغة وطويلة على الأغلب، إليك النسخة المختصرة:
تحدث الثغرة بسبب سوء إدارة صلاحيات المستخدمين في المسار C:\ProgramData\Apple\*.
يسمح ذلك لأعضاء المجموعة المحلية "Users" بكتابة ملفات عشوائية داخل هذا المسار. وعند إعادة تشغيل خدمة AppleMobileDeviceService.exe، والتي يمكن أن يطلقها مستخدم غير مميز، يمكن تجهيز إمكانية حذف مجلد/ملف عشوائي للحصول على تنفيذ تعليمات برمجية عشوائي على النظام بصلاحيات SYSTEM.
تحذير! شروحات الأدوات التالية متواضعة.
تخطَّ هذا القسم إذا كنت معتادًا على هذه الأدوات.
أداة Oplock هي أداة لاستخدام “قفل انتهازي” في ويندوز. تسمح لنا الأداة بإيقاف عملية مؤقتًا عبر قفل ملف حتى تتحقق متطلبات معينة، إلا أنه يمكن استخدامها أيضًا لإيقاف عملية مؤقتًا لأغراض خبيثة مثل كسب وقت كافٍ لتشغيل حمولة الاستغلال.
تعمل أداة FolderContentsDeleteToFolderDelete عبر إنشاء مجلد يحتوي على ملف تلقائيًا. ثم يتم تعيين oplock على الملف لإيقاف العملية. عندما تتوقف العملية، يُنقل الملف خارج المجلد. بعد ذلك يُحذف المجلد ويُعاد إنشاؤه كـ NTFS junction إلى وجهة مستهدفة. عند إلغاء oplock واستمرار العملية، يتبع حذف الملف/المجلد NTFS junction المنشأ حديثًا إلى الوجهة المستهدفة ويحذف ذلك الملف قبل متابعة التنفيذ.
ربما تكون هذه الأداة مشروحة بشكل أفضل بواسطة Zero Day Initiative، لذا إليك رابطًا لشرح مباشر منهم:
إساءة استخدام عمليات حذف الملفات العشوائية لتصعيد الصلاحيات وحيل رائعة أخرى
AppleMobileDeviceService.exeبمجرد تثبيت iTunes، فإنه يثبّت أيضًا خدمة: AppleMobileDeviceService.exe تعمل بصلاحيات SYSTEM.
عندما فحصت هذه الخدمة باستخدام مراقب العمليات Process Monitor (Procmon) من Windows Sysinternals، رصدت فورًا بعض السلوكيات المقلقة.
تقوم الخدمة بالمرور بشكل متكرر عبر جميع الملفات داخل المسار C:\ProgramData\Apple\Lockdown\* وتحذف جميع المجلدات والملفات التي لا تنتمي إليها.
للاختبار المحلي، استخدمت ProcessHacker2 لإعادة تشغيل الخدمة قسريًا من أجل فحص سلوك البرنامج.
كان السلوك الملاحَظ هو أن الخدمة التي تعمل بصلاحيات SYSTEM تستعلم عن الدليل وجميع الأدلة الفرعية داخله، ثم تنفذ عملية CreateFile مع تفعيل خيار Delete On Close، أي أن خدمة SYSTEM تستعلم عن المسار C:\ProgramData\Apple\Lockdown\* وتستعلم بشكل متكرر عن المجلدات الفرعية والملفات داخل ذلك الدليل وتحذفها.
C:\ProgramData\Apple\*يمكن استخدام accesschk64.exe من Windows Sysinternals https://learn.microsoft.com/en-us/sysinternals/ للتحقق من حقوق الوصول لمجلدات معينة.
أعضاء المجموعة المحلية "Users" لديهم أذونات كتابة داخل مجلد C:\ProgramData\Apple\Lockdown\، مما يمكّن المستخدمين ذوي الصلاحيات المنخفضة من كتابة ملفات عشوائية داخل المجلد.
بما أننا نستطيع كتابة ملفات عشوائية داخل مسار Lockdown، وستقوم عملية SYSTEM بحذفها عند إعادة تشغيل الخدمة، كان من الممكن إنشاء إمكانية حذف ملف/مجلد عشوائي.
لتوضيح ذلك، أنشأت مجلدين فرعيين داخل مجلد Lockdown.
مجلدًا فرعيًا a، ومجلدًا فرعيًا b داخل المجلد الفرعي a.
سيبدو هذا بالشكل التالي: C:\ProgramData\Apple\Lockdown\a\b
داخل المجلد الفرعي a يوجد ملف نصي باسم aa.txt، وداخل المجلد الفرعي b يوجد ملف نصي باسم bb.txt
C:\ProgramData\Apple\Lockdown\a\aa.txt
C:\ProgramData\Apple\Lockdown\a\b\bb.txt
كما يظهر في لقطة الشاشة أعلاه، يتم تنفيذ عملية "CreateFile" مع خيار "Delete On Close" على aa.txt مما يؤدي إلى حذفه.
عندما تشغّل عملية SYSTEM العملية CreateFile على aa.txt وbb.txt مع الخيار Delete On Close على الملفات، فإن عملية SYSTEM AppleMobileDeviceService.exe ستحذف الملفات.
الآن أصبح بإمكاننا إنشاء ملفات عشوائية داخل مجلد Lockdown وحذفها، وهو ما يقودنا إلى الحيلة التالية.
في ويندوز، يمكن استخدام وصلات NTFS لتوجيه مجلد إلى مكان آخر. وهي تشبه إلى حد ما الروابط الرمزية في لينكس.
لتوضيح ذلك، يمكن إنشاء وصلة NTFS (رابط رمزي) داخل مجلد C:\ProgramData\Apple\Lockdown يشير إلى مجلد على سطح المكتب.
يمكنك تحقيق ذلك بنفسك باستخدام PowerShell New-Item -Type Junction -Path whatever -Target "C:\Users\user\Desktop\AAyes"، أو فقط استخدم مجموعة الأدوات المقدمة من ZDI:
شغّل الأمر التالي لتوجيه وصلة NTFS داخل مجلد Lockdown إلى "الهدف" على سطح المكتب.
.\FolderContentsDeleteToFolderDelete.exe /target "C:\Users\user\Desktop\AAyes" /initial "C:\ProgramData\Apple\Lockdown"
عند إعادة تشغيل الخدمة، ستشير وصلة NTFS المنشأة حديثًا إلى AAyes الموجود على سطح المكتب.
بما أن الخدمة تشغّل عملية CreateFile مع خيار Delete On Close بصلاحيات SYSTEM، سيتم حذف الملف.
وبما أن العملية تُنفَّذ بصلاحيات SYSTEM، نحصل على إمكانية حذف مجلد أو ملف عشوائي، ما يعني أنه يمكننا تنفيذ تعليمات برمجية على المضيف بصلاحيات SYSTEM.
ملاحظة:
كان من الضروري إجراء بعض التعديلات على الكود المصدري في مشروع FolderContentsDeleteToFolderDelete بسبب قيود على أسماء الملفات/المجلدات. كان يجب أن تكون أسماء الملفات/المجلدات قصيرة جدًا حتى يتم الحذف. السبب وراء ذلك غير معروف ولم يتم التحقيق فيه لأن الأسماء القصيرة حلت المشكلة بشكل موثوق.
const wchar_t folder2path[] = L"C:\\d";
const wchar_t exploitFileName[] = L"e.txt";
// It was required to shorten the two consstants: “folder2path” and “exploitFileName”
// They where changed to: L"C:\\d" and L"e.txt" because it seemed that file and folder name length had a meaningful impact on exploit functionality.
[...]
// We also needed to edit the “folder1path” value to L”c” in order to shorten it.
folder1path += L"c";
بما أن الخدمة ستتبع أي وصلات (روابط رمزية) بشكل متكرر، كانت الفرضية هي أنه سيكون من الممكن حذف الملفات على النظام بشكل عشوائي بصلاحيات SYSTEM عبر خدمة Apple الثغرة التي ستتبع وصلة NTFS. وبما أن الخدمة الثغرة تسمح بشكل ملائم للمستخدمين غير المميزين بإعادة تشغيلها باستخدام الخدعة ("Apps -> Installed apps -> Apple Mobile Device Support -> Modify -> Repair) عبر واجهة ويندوز الرسومية، فمن الممكن تشغيل الاستغلال في أي وقت. وبمجرد إعادة تشغيل الخدمة، ستتبع وصلة NTFS، ويحدد سلوك البرنامج الثابت أن الخدمة ستحذف الملفات أو المجلدات التي يختار المستخدم الإشارة إليها.
بعبارة أخرى، المستخدم هو من يحدد الملفات أو المجلدات التي ستحذفها الخدمة. ونظرًا لأنها تعمل بصلاحيات SYSTEM، يمكننا حذف أي ملف تقريبًا على النظام (وليس الملفات التي تتطلب صلاحيات TrustedInstaller).