
استغلال لـ CVE-2020-6514 يستهدف تلف ذاكرة WebRTC SCTP في تطبيقات Android. يستخدم Frida لربط الوظائف الأصلية وتعديل حزم SCTP لتنفيذ تعليمات برمجية عن بعد.
الاستغلال عند كتابة الاستغلال، قمت في الأصل بتعديل حزم SCTP المرسلة إلى الجهاز المستهدف عن طريق تعديل مصدر WebRTC وإعادة ترجمته. لم يكن هذا عمليًا لمهاجمة التطبيقات مغلقة المصدر، لذا تحولت في النهاية إلى استخدام Frida لربط (hook) ثنائي الجهاز المهاجم بدلاً من ذلك. تسمح وظيفة الربط في Frida بتنفيذ الكود قبل وبعد استدعاء دالة أصلية معينة، مما سمح لاستغلالي بتعديل حزم SCTP الصادرة وكذلك فحص الحزم الواردة. وظيفيًا، هو مكافئ لتعديل مصدر العميل المهاجم، ولكن بدلاً من إجراء التعديلات في المصدر وقت الترجمة، يتم إجراؤها ديناميكيًا بواسطة Frida وقت التشغيل. كود الاستغلال متاح هنا.
هناك سبع دوال يجب على الجهاز المهاجم ربطها، كما يلي.
يمكن ربط هذه الدوال كرموز (symbols) أو كإزاحات (offsets) في الثنائي.
هناك أيضًا ثلاث إزاحات عناوين من ثنائي الجهاز المستهدف ضرورية لنجاح الاستغلال. إزاحة الدالة system عن الدالة malloc، بالإضافة إلى إزاحة الأداة (gadget) الموصوفة في المنشور السابق عن الدالة malloc هما اثنان منها. هذه الإزاحات موجودة في libc، وهي مكتبة نظام أندرويد، لذا يجب تحديدها بناءً على إصدار أندرويد للجهاز المستهدف. إزاحة موقع جدول الدوال الافتراضية (vtable) لـ cricket::SctpTransport عن موقع malloc في جدول الإزاحات العامة (GOT) مطلوبة أيضًا. يجب تحديد ذلك من الثنائي الذي يحتوي على WebRTC في التطبيق الذي يتم مهاجمته.
لاحظ أن نصوص الاستغلال المقدمة لها قيد خطير: في كل مرة تُقرأ فيها الذاكرة، فإنها تعمل فقط إذا كان البت 31 من المؤشر مضبوطًا. أسباب ذلك موضحة في الجزء 2. يحتوي نص الاستغلال على مثال لكيفية إصلاح ذلك وقراءة أي مؤشر باستخدام كتل FWD_TSN، ولكن هذا غير منفذ لكل قراءة. لأغراض الاختبار، قمت بإعادة تعيين الجهاز حتى تم تعيين مكتبة WebRTC في موقع مناسب.
تطبيقات Android تم تحديد قائمة بتطبيقات Android الشائعة التي تدمج WebRTC عن طريق البحث في ملفات APK على Google Play عن سلسلة نصية محددة في usrsctp. ظهر أن ما يقرب من 200 تطبيق يزيد عدد مستخدميها عن خمسة ملايين يستخدمون WebRTC. قمت بتقييم هذه التطبيقات لتحديد ما إذا كان من الممكن أن تتأثر بالثغرات في الاستغلال، وما سيكون التأثير.
اتضح أن طرق استخدام التطبيقات لـ WebRTC متنوعة تمامًا، ولكن يمكن فصلها إلى أربع فئات رئيسية.
الإسقاط: يتم إسقاط شاشة وضوابط تطبيق جوال في متصفح سطح المكتب بموافقة المستخدم لتحسين قابلية الاستخدام البث: يتم إرسال محتوى صوتي ومرئي من مستخدم واحد إلى العديد من المستخدمين. عادة ما يكون هناك خادم وسيط، لذا لا يحتاج المرسل إلى إدارة آلاف الأقران المحتملين، ويتم تسجيل المحتوى للمشاهدة لاحقًا المتصفحات: تحتوي جميع المتصفحات الرئيسية على WebRTC لتنفيذ واجهة برمجة تطبيقات WebRTC في JavaScript المؤتمرات: يتواصل مستخدمان أو أكثر عبر الصوت أو الفيديو في الوقت الفعلي
تأثير الثغرات المستخدمة في الاستغلال يختلف لكل من هذه الفئات. الإسقاط منخفض المخاطر، حيث يتطلب الكثير من تفاعل المستخدم لإعداد اتصال WebRTC، والمستخدم لديه إمكانية الوصول إلى جانبي الاتصال في المقام الأول، لذا فالفائدة من اختراق الجانب الآخر ضئيلة.
البث أيضًا منخفض المخاطر نسبيًا. بينما من المحتمل أن بعض التطبيقات تستخدم اتصالات نظير لنظير عندما يكون عدد المشاهدين منخفضًا، إلا أنها عادةً ما تستخدم خادمًا وسيطًا ينهي اتصال WebRTC من النظير المرسل، ويبدأ اتصالات جديدة مع الأقران المستقبلين. هذا يعني أن المهاجم لا يستطيع عادةً إرسال حزم مشوهة مباشرة إلى نظير. حتى مع إعداد يتم فيه البث من نظير إلى نظير، يتطلب تفاعل المستخدم ليشاهد الهدف البث، وغالبًا لا توجد طريقة للحد من يمكنه الوصول إلى البث. لهذا السبب، فإن تطبيقات البث التي تستخدم WebRTC ربما لا تكون مفيدة للهجمات المستهدفة. بالطبع، من الممكن أن تؤثر هذه الثغرات على الخوادم التي تستخدمها خدمات البث، ولكن لم يتم التحقيق في ذلك في هذا البحث.
المتصفحات شبه مؤكد أنها معرضة لمعظم الأخطاء في WebRTC، لأنها تسمح بقدر كبير من التحكم في كيفية تكوينه. لاستغلال مثل هذا الخطأ في متصفح، سيحتاج المهاجم إلى إعداد مضيف يعمل كنظير آخر في اتصال نظير لنظير، وإقناع الهدف بزيارة صفحة ويب تبدأ مكالمة إلى ذلك المضيف. في هذه الحالة، سيكون تأثير الثغرة مشابهًا لثغرات تلف الذاكرة الأخرى في JavaScript.
المؤتمرات هي أعلى استخدام خطر لـ WebRTC، لكن التأثير الفعلي للثغرة يعتمد كثيرًا على كيفية تواصل مستخدمي التطبيق مع بعضهم البعض. التصميم الأعلى خطرًا هو تطبيق حيث يمكن لأي مستخدم الاتصال بأي مستخدم آخر بناءً على معرف. بعض التطبيقات تتطلب أن يكون المتصل به قد تفاعل بطريقة محددة مع المتصل قبل أن تتم المكالمة، مما يجعل من الصعب على المستخدمين الاتصال بهدف ويقلل المخاطر بشكل عام. بعض التطبيقات تتطلب من المستخدمين إدخال رمز أو زيارة رابط لبدء مكالمة، مما له تأثير مماثل. هناك أيضًا مجموعة كبيرة من التطبيقات حيث يصعب أو يستحيل الاتصال بمستخدم معين، على سبيل المثال تطبيقات chat roulette، والتطبيقات التي تحتوي على ميزات تسمح للمستخدم ببدء مكالمة لدعم العملاء.
لهذا البحث، ركزت على تطبيقات المؤتمرات التي تسمح للمستخدمين بالاتصال بمستخدمين محددين آخرين. هذا قلص قائمتي المكونة من 200 تطبيق إلى 14 تطبيقًا، كما يلي.