VIKIROOT
هذا هو برهان مفهوم (PoC) لـ CVE-2016-5195 لأنظمة أندرويد 6.0.1 مارشميلو 64 بت (ربما 7.0؟)، بالإضافة إلى أداة جذر مؤقتة عالمية ومستقرة. لا يتطلب ملف تنفيذي SUID أو أي تغييرات في نظام الملفات.
الميزات
- تجاوز SELinux (انظر التفاصيل أدناه).
- يعمل في الذاكرة فقط: لا يعدل نظام الملفات أو يحتاج إلى ملف تنفيذي خاص.
- مستقر: لا يؤثر على استقرار جهازك.
- قابل للتوسع: سهل إضافة نواة جديدة و/أو أجهزة جديدة.
- قابل للعكس: يتم مسح الباب الخلفي تلقائيًا بعد انتهاء شل الجذر، مما يعني عدم الحاجة إلى إعادة التشغيل بعد الاستخدام.
تنبيه
بـ "تجاوز SELinux" أعني أن الحمولة ستعمل في نطاق init حتى إذا كان SELinux في وضع الإجبار (enforcing)، ومع ذلك، لا يزال هناك حاجة إلى تصحيح sepolicy لجعل نطاق init غير مقيد. عادةً ما يعني هذا الحاجة إلى صورة إقلاع معدلة.
المتطلبات الأساسية
- I, Robot لإسحاق عظيموف.
- جهاز يدعم "dirtycow".
- سياسة أمن مصححة (patched sepolicy).
البناء
الملفات الثنائية المُجمَّعة مسبقًا متاحة في صفحة الإصدارات. بخلاف ذلك، فقط أضف سلسلة أدوات NDK المستقلة إلى PATH وشغّل make.
الاستخدام
يمكنك تشغيله عبر شل adb (ضعه تحت /data/local/tmp) والحصول على شل جذر إما في الطرفية المدمجة أو في خادم طرفية عن بعد مثل nc. للتفاصيل، شغله بدون أي معاملات.
استكشاف الأخطاء وإصلاحها
- أولاً، يُرجى قراءة جزء "تنبيه" أعلاه.
- "insufficient place for payload" أو "unknown kernel": يلزم إعادة التشغيل.
- "waiting for reverse connect shell": يُرجى إيقاظ جهازك، وفتح تطبيق الساعة/المنبه أو تبديل مفتاح البلوتوث لتفعيل الباب الخلفي.
- لا زالت المشكلة قائمة: يُرجى تشغيل إصدار "dbg" وإرسال بريد إلكتروني إليّ مع الملفات التي تم إنشاؤها، وهي مجرد تفريغ لجزء من النواة ولا تحتوي على أي معلومات شخصية.
الإسناد
- scumjr لطريقة تصحيح vDSO.
- Tzul لمساعدتي في تصحيح مشكلة sepolicy.
- RenaKunisaki لجعلها تعمل مع bionic.
المهام المتبقية
- إثراء قاعدة بيانات النواة لدعم x86 وما إلى ذلك.
- اختبارها على أندرويد 7 Nougat (المساعدة مطلوبة!).