
مجموعة أدوات الجذر لجهاز TCL 50C721 (RTD1319 / Mali-G31) — سلسلة استغلال مستقلة لثغرة CVE-2022-22706
سلسلة استغلال كاملة للحصول على الجذر ومجموعة أدوات ما بعد الجذر لـ الجذر المقيّد (tethered root)، وSELinux Permissive، وحظر الإعلانات، وإزالة البرامج غير المرغوب فيها، والنسخ الاحتياطي الآلي على إصدار برنامج ثابت واحد لجهاز TCL Android TV. هذه أبحاث وأدوات خاصة بإصدار برنامج ثابت معيّن، وليست أداة جذر عالمية لأجهزة TCL ولا مثبّتًا مدعومًا.
| العنصر | وحدة الاختبار المسجّلة |
|---|---|
| التلفاز | TCL QLED 50C721 / BeyondTV6 |
| البرنامج الثابت | V8-R51MT02-LF1V903، إصدار AR10 |
| Android / النواة | Android 11 / 4.14.198+ |
| SoC / GPU | Realtek RTD1319 / Mali-G31 (Bifrost, kbase r28p0) |
| مساحة المستخدم | 32-bit ARMv7 |
| تحديث الأمان المُبلَّغ عنه | 2024-03-05 |
| النتيجة التاريخية | ADB shell مع uid=0؛ SELinux Permissive |
فقط هذه التركيبة من الطراز/البرنامج الثابت لديها نتيجة ناجحة مسجّلة. تحديد SoC الدقيق ومراجعة برنامج Mali التعريفي غير متسقين عبر السجلات الأصلية؛ راجع حدود التوافق. لم يُجرَ أي اختبار جذر جديد أثناء إعداد إصدار المصدر هذا.
يحقق الملف التنفيذي المستقل للحصول على الجذر (auto_root.c) قيمة uid=0 من سياق تطبيق غير مميّز في أقل من ثانيتين:
المرحلة 1 — CVE-2022-22706 (كتابة في ذاكرة التخزين المؤقت للصفحات عبر Mali GPU): يستورد تعيينًا MAP_SHARED لصفحة __cxa_atexit الخاصة بـ libc.so كمخزن مؤقت لمستخدم GPU عبر KBASE_IOCTL_MEM_IMPORT. يستخدم mremap(MREMAP_FIXED) لاستبدال تعيين الملف. يكتب شيفرة شل Thumb-2 بحجم 112 بايت فوق __cxa_atexit في ذاكرة التخزين المؤقت للصفحات (الملف على القرص غير معدّل — محمي بواسطة dm-verity).
المرحلة 3 — المحفّز الطبيعي: كل عملية C++ جديدة تستدعي __cxa_atexit() أثناء تهيئة CRT، فتنفّذ شيفرة الشل. يقوم نطاق مميّز (audioserver، rtkm_scene) بتعيين الصفحة الفيزيائية 0x1DE7000 عبر /dev/rtkmem ويكتب selinux_state.enforcing = 0.
المرحلة 4a — تعديل بيانات الاعتماد المباشر: مع SELinux Permissive، يتنقّل عبر القائمة المترابطة task_struct في النواة عبر قراءات الذاكرة الفيزيائية من خلال /dev/rtkmem. يجد عمليتنا بمطابقة comm[]، ويستبدل بنية cred بـ uid=0 وقدرات كاملة من init_cred. يمسح TIF_SECCOMP لتجاوز مرشّح BPF seccomp الخاص بـ zygote.
المرحلة 4b — تقوية النظام: يقوم بعمل bind-mount لملفات hosts الخاصة بحظر الإعلانات، ويُسقط قواعد iptables التي تحظر عناوين IP الخاصة بالقياس عن بُعد، ويعطّل 28 حزمة من البرامج غير المرغوب فيها، ويمنح APP_AUTO_START لاستمرارية الإقلاع، ويعطّل شيفرة الشل، ويعيد تفعيل SELinux إلى Enforcing.
ينفّذ البرنامجان المستقلان (root_cve22706.c، libc_rtkmem_patch2.c) نفس بدائية الكتابة في ذاكرة التخزين المؤقت للصفحات الخاصة بـ CVE-2022-22706 كمراحل جذر مقيّد منفصلة، وهي مفيدة للحصول على الجذر يدويًا عبر ADB وفهم الاستغلال بشكل أساسي.
scripts/root.sh — أتمتة ADB: يتصل بالتلفاز، ويشغّل المرحلتين المستقلتين، ويتحقق من حالة الجذر + SELinux.scripts/post_root.sh — خطاف ما بعد الجذر يُستدعى بواسطة auto_root بعد التقوية. ينشئ نسخًا احتياطية كاملة للجهاز: تطبيقات APK المحمّلة جانبيًا، وبيانات التطبيقات، وإعدادات WiFi، وجميع الإعدادات، وقوائم الحزم. يقلّم تلقائيًا إلى أحدث 5 نسخ احتياطية.لا يتضمن أي APK أو مشروع تطبيق APK قابل لإعادة الإنتاج؛ لا يوجد هنا إصدار يُثبَّت مرة واحدة ويقلع تلقائيًا. صُمّم الملف التنفيذي المستقل للحصول على الجذر ليُستدعى من الشيفرة الأصلية لتطبيق APK، لكن غلاف APK ليس جزءًا من هذا الإصدار.
# Build (requires Android NDK)
cd exploit && make
# Push to TV
adb connect <TV_IP>:5555
adb push bin/auto_root /data/local/tmp/
adb push bin/root_cve22706 /data/local/tmp/
adb push bin/libc_rtkmem_patch2 /data/local/tmp/
# Option A: Run the autonomous chain (includes hardening + backup)
adb shell /data/local/tmp/auto_root
# Option B: Manual two-stage root via script
bash scripts/root.sh <TV_IP>
استخدمه فقط على أجهزة تملكها أو لديك تفويض صريح بتقييمها. راجع جميع ملفات C وكل افتراض خاص بالبرنامج الثابت أولاً. حافظ على البيانات واحصل على صورة استرداد مطابقة معروفة وإجراء مستقل. لا تعرّض ADB لشبكة غير موثوقة. إعادة التشغيل تزيل التصحيحات المتطايرة (ذاكرة التخزين المؤقت للصفحات، وتركيبات bind، وiptables)، لكن تعطيل الحزم وAPP_AUTO_START يبقيان.
لا تقم بوميض صور boot أو vbmeta المصححة بناءً على هذا المشروع. أدت محاولتان تاريخيتان إلى حلقة إقلاع (bootloop)؛ ولم يتم إثبات أي طريقة جذر دائم ولا ضمان استرداد شامل.
MIT لجميع الشيفرة الأصلية. يحتفظ مقتطف النواة (kernel/mem.c) بترخيص GPL-2.0 وإشعارات حقوق النشر الخاصة به. راجع LICENSE وprovenance للإسناد والمراجع الأصلية.