
استغلال لإثبات المفهوم لثغرة تنفيذ تعليمات برمجية عن بُعد في عنصر تحكم ActiveX الخاص بـ RealPlayer G2، يستغل مسارات javascript: و mhtml: لتحقيق تنفيذ التعليمات البرمجية عبر ملفات قوائم تشغيل مصمَّمة خصيصًا.
عرض فيديو: https://www.youtube.com/watch?v=9c9Q4VZQOUk
يحتوي مكوّن G2 Control في Real Player على ثغرة تنفيذ التعليمات البرمجية عن بُعد لأنه يسمح بتمرير URIs بصيغة 'javascript:' كوسيط، وهو أمر غير آمن عادةً لأنه في بعض السيناريوهات قد يسمح بحقن كود برمجي في نطاقات عشوائية (Universal Cross Site Scripting - uXSS) والتي يمكن استخدامها على سبيل المثال لسرقة ملفات تعريف الارتباط (cookies) وغير ذلك. من خلال تعيين الوسيط 'URL' إلى URI بصيغة 'javascript:' والوسيط 'target' إلى عنصر HTML من نوع 'iframe'، من الممكن جعل كود جافاسكربت يعمل في سياق صفحة خطأ محلية تُعرض بعد استخدام المكوّن نفسه للانتقال إلى URI غير صالح مثل 'mhtml:http://%SERVER%/frame.htm': عندما يتم استدعاء URI بصيغة 'mhtml:' بواسطة محرك العرض MS IE، فإنه يتوقع ملف MHTML بامتداد يكون نوع MIME الخاص به مضبوطاً على "message/rfc822"، وهذا هو الحال بالنسبة لملفات '.mht'؛ بينما ملفات '.htm' يكون نوع MIME الخاص بها مضبوطاً على 'text/html' وبالتالي سيلغي IE تحميل المستند ويعرض صفحة خطأ محلية (تم إلغاء التنقل). عنوان صفحة الخطأ المحلية هو 'res://ieframe.dll/navcancl.htm' الذي ينتمي إلى منطقة الأمان 'My computer' في IE / Windows والتي تسمح بقراءة الملفات المحلية العشوائية وكذلك تنفيذ كود عشوائي بحكم التصميم. إن منع URI بصيغة 'javascript:' في المكوّن يخفف من المشكلة.
يستخدم الـ PoC عنصر تحكم ActiveX باسم 'SYSMON' لوضع ملف HTA في مجلد بدء التشغيل (Startup) الخاص بالمستخدم، والذي سيتم تنفيذه عند تسجيل الدخول أو الإقلاع التالي. يمكن أن يحتوي ملف HTA على كود لتنزيل أو استخراج ملف EXE مضمّن وتشغيله، على سبيل المثال. يفترض الـ PoC أن دليل العمل الحالي لـ Real Player مضبوط على مجلد فرعي من دليل المستخدم الرئيسي. عند تنزيل الملفات باستخدام متصفحات الويب مثلاً، سيتم تنزيلها إلى مجلد 'Downloads' الخاص بالمستخدم افتراضياً، لذلك لا نحتاج إلى استرجاع اسم مستخدم Windows لنتمكن من وضع ملف HTA في مجلد بدء التشغيل. هذا فقط من باب التسهيل لأنه من الممكن استرجاع هذه المعلومات عبر طرق متنوعة، بما في ذلك عنصر تحكم ActiveX الخاص بمتصفح MS Web Browser.
يمكن استغلال الثغرة عن طريق فتح ملف قائمة تشغيل Real Player مثل ملفات RAM.
لإعادة إنتاج المشكلة، قم بما يلي:
أ) قم بإعداد خادم ويب. ب) في الدليل الجذر لخادم الويب، قم باستخراج المجلد "RP_G2" إليه. ج) افتح المجلد "RP_G2" المستخرج للتو ثم افتح الملفات التالية في محرر نصوص: "poc.htm", "sm_rpx.js", "start.ram". فقط استبدل كل ظهور للسلسلة %SERVER% بعنوان IP الفعلي لخادم الويب (في كل ملف من هذه الملفات). د) تأكد من أن خادم الويب متاح وأن جميع الملفات المعنية متاحة أيضاً. في خادم الويب MS IIS قد تحتاج إلى إضافة امتداد جديد وربطه بنوع MIME، فافعل ذلك لربط الامتداد .RAM بنوع MIME "audio/x-pn-realaudio". هـ) على جانب العميل (الضحية)، افتح متصفح الويب وقم بتنزيل الملف "start.ram" (أو يمكن الوصول إليه مثلاً باستخدام بروتوكول URL مثل 'rtsp:') ثم افتحه. يجب أن ترى ملف HTA يتم وضعه في مجلد بدء التشغيل الخاص بالمستخدم بعد بضع ثوانٍ.
ملاحظة: لفتح مجلد بدء التشغيل، قم بذلك: افتح قائمة "Run" ثم اكتب:
shell:Startup
اضغط Enter وانتهى الأمر.
تم اختباره بنجاح على Real Player v.20.0.8.310 (والإصدارات الأقدم التي تعود لعدة سنوات، مثل 2014 تقريباً) التي تعمل على Windows XP SP3 وVista و7 و8.1 و10 و11 جميعها محدثة بالكامل بأحدث تصحيحاتها. (مثال: آخر تحديث لـ Windows XP كان في أبريل 2014... وWindows 7 في يناير 2020، وهكذا)