
LG Root Exploit
استغلال صلاحيات الجذر لأجهزة LG
المؤلف: [email protected]
شكر خاص: جوجي، لإشارته إلى ملف ثنائي غريب في تحديث (spritebud)، وهو ما قادني إلى اكتشاف هذه الثغرة.
الموضوع: حالة سباق (Race condition) في برنامج النسخ الاحتياطي لشركة Sprite Software، المثبّت من قِبل المُصنّع الأصلي (OEM) على أجهزة LG التي تعمل بنظام أندرويد.
معرف CVE: CVE-2013-3685
التأثير: ثغرة تُستغل محلياً مع حد أدنى من تفاعل مستخدم الجهاز، وتؤدي إلى تنفيذ كود بصلاحيات المستخدم الجذر (root). وفي ظروف معينة، يمكن استغلال هذه الثغرة دون علم مستخدم الجهاز.
المنتجات: "Backup" "spritebud"
الجهات المُصنّعة: Sprite Software LG Electronics ربما جهات مُصنّعة أخرى
الإصدارات المتأثرة: spritebud 1.3.24 backup 2.5.4105 ومن المحتمل أيضاً إصدارات أخرى
الأجهزة المتأثرة (تبعاً لإعدادات البرنامج الثابت): LG-E971 LG Optimus G LG-E973 LG Optimus G LG-E975 LG Optimus G LG-E975K LG Optimus G LG-E975T LG Optimus G LG-E976 LG Optimus G LG-E977 LG Optimus G LG-F100K LG Optimus Vu LG-F100L LG Optimus Vu LG-F100S LG Optimus Vu LG-F120K LG Optimus Vu LG-F120L LG Optimus LTE Tag LG-F120S LG Optimus LTE Tag LG-F160K LG Optimus LTE 2 LG-F160L LG Optimus LTE 2 LG-F160LV LG Optimus LTE 2 LG-F160S LG Optimus LTE 2 LG-F180K LG Optimus G LG-F180L LG Optimus G LG-F180S LG Optimus G LG-F200K LG Optimus Vu 2 LG-F200L LG Optimus Vu 2 LG-F200S LG Optimus Vu 2 LG-F240K LG Optimus G Pro LG-F240L LG Optimus G Pro LG-F240S LG Optimus G Pro LG-F260K LG Optimus LTE 3 LG-F260L LG Optimus LTE 3 LG-F260S LG Optimus LTE 3 LG-L21 LG Optimus G LG-LG870 LG (Unknown) LG-LS860 LG Mach LG-LS970 LG Optimus G LG-P760 LG Optimus L9 LG-P769 LG Optimus L9 LG-P780 LG Optimus L7 LG-P875 LG Optimus F5 LG-P875h LG Optimus F5 LG-P880 LG Optimus 4X HD LG-P940 LG Prada LG-SU540 LG Prada 3.0 LG-SU870 LG Optimus 3D Cube LG-US780 LG Lollipop وربما أجهزة أخرى أيضاً.
معلومات المنتج: "Backup" و"spritebud" هما نظام نسخ احتياطي واستعادة للإعدادات والتطبيقات، كتبته شركة Sprite Software ويُستخدم على هواتف LG الذكية التي تعمل بنظام أندرويد. "Backup" هو التطبيق الأمامي الموجّه للمستخدم النهائي، بينما "spritebud" هو الخدمة التي تنفّذ عمليات النسخ الاحتياطي والاستعادة.
التفاصيل: يتم تشغيل الخفي (daemon) "spritebud" بواسطة سكربتات الإقلاع (init scripts) ويعمل بصلاحيات المستخدم الجذر (root). ومن خلال الاستماع على مقبس يونكس (Unix socket)، يقبل الخفي التعليمات القادمة من تطبيق "Backup". وباستخدام نسخة احتياطية مصمّمة بعناية، يمكننا الكتابة إلى أي ملف وتغيير صلاحياته وتغيير مالكه، نظراً لأن "spritebud" يعمل بصلاحيات المستخدم الجذر.
تحتوي النسخة الاحتياطية المصمّمة على بيانات استعادة لتطبيق الاستغلال خاصتنا، "com.cunninglogic.lgpwn". تتضمن البيانات ملفاً وهمياً بحجم 50 ميغابايت (a) يُستخدم لتوسيع النافذة الزمنية للاستغلال، وثنائي su (b)، وسكربت (c) لتثبيت su، وملفاً نصياً (d) يحتوي على المسار إلى سكربتنا. جميع الملفات مملوكة للتطبيق، ولها صلاحيات قراءة/كتابة/تنفيذ لجميع المستخدمين (world). تتم استعادة جميع الملفات بترتيب أبجدي. يبلغ الحجم الكلي للنسخة الاحتياطية بعد الضغط حوالي 2 ميغابايت. هيكل هذه النسخة الاحتياطية كما يلي:
drwxrwxrwx u0_a114 u0_a114 2013-05-28 20:13 files
./files:
قبل بدء الاستعادة، يعمل تطبيق الاستغلال خاصتنا، ويراقب العملية وينتظر. أثناء الاستعادة، يقوم خفي spritebud أولاً بإنشاء مجلد files، ثم يعيّن صلاحياته ومالكه. بعد ذلك، يفك ضغط الملف "a" — ملفنا الوهمي بحجم 50 ميغابايت — ويستعيده. وخلال استعادة الملف "a"، يتوفر لتطبيق الاستغلال الوقت الكافي لإنشاء رابط رمزي (symlink) للملف "d"، وهو ملفنا النصي الذي يحتوي على المسار الكامل لسكربتنا (c)، إلى /sys/kernel/uevent_helper. وعند استعادة الملف "d"، يُكتب مسارنا إلى uevent_helper. وعند حدوث حدث hotplug (وهي تحدث كل بضع ثوانٍ)، ينفّذ النواة المسار الموجود في uevent_helper، فيُتنفَّذ سكربتنا (c) ويُثبَّت ثنائي su (b).