
TCL 50C721 (RTD1319 / Mali-G31) रूट टूलकिट — स्वायत्त CVE-2022-22706 एक्सप्लॉइट चेन
एक TCL Android TV फर्मवेयर पर टेथर्ड रूट, SELinux Permissive, विज्ञापन अवरोधन, डीब्लोट और स्वचालित बैकअप के लिए पूर्ण रूट एक्सप्लॉइट चेन और पोस्ट-रूट टूलकिट। यह फर्मवेयर-विशिष्ट शोध और टूलिंग है, न कि कोई सार्वभौमिक TCL रूट टूल या समर्थित इंस्टॉलर।
| आइटम | दर्ज परीक्षण इकाई |
|---|---|
| TV | TCL QLED 50C721 / BeyondTV6 |
| फर्मवेयर | V8-R51MT02-LF1V903, बिल्ड AR10 |
| Android / कर्नेल | Android 11 / 4.14.198+ |
| SoC / GPU | Realtek RTD1319 / Mali-G31 (Bifrost, kbase r28p0) |
| यूज़रस्पेस | 32-बिट ARMv7 |
| रिपोर्ट किया गया सुरक्षा पैच | 2024-03-05 |
| ऐतिहासिक परिणाम | uid=0 के साथ ADB शेल; SELinux Permissive |
केवल इसी मॉडल/फर्मवेयर संयोजन का सफल परिणाम दर्ज है। मूल रिकॉर्ड में सटीक SoC पहचान और Mali ड्राइवर संशोधन असंगत हैं; देखें संगतता सीमाएँ। इस स्रोत रिलीज़ को तैयार करते समय कोई नया रूटिंग परीक्षण नहीं किया गया।
स्वायत्त रूट बाइनरी (auto_root.c) एक अनप्रिविलेज्ड ऐप कॉन्टेक्स्ट से 2 सेकंड से कम समय में uid=0 प्राप्त करती है:
चरण 1 — CVE-2022-22706 (Mali GPU पेज-कैश लेखन): KBASE_IOCTL_MEM_IMPORT के माध्यम से libc.so के __cxa_atexit पेज के MAP_SHARED मैपिंग को GPU यूज़र बफ़र के रूप में आयात करता है। फ़ाइल मैपिंग को बदलने के लिए mremap(MREMAP_FIXED) का उपयोग करता है। पेज कैश में __cxa_atexit के ऊपर 112-बाइट Thumb-2 शेलकोड लिखता है (डिस्क पर फ़ाइल अपरिवर्तित — dm-verity द्वारा संरक्षित)।
चरण 3 — प्राकृतिक ट्रिगर: प्रत्येक नया C++ प्रोसेस CRT इनिट के दौरान __cxa_atexit() को कॉल करता है, जिससे शेलकोड निष्पादित होता है। एक प्रिविलेज्ड डोमेन (audioserver, rtkm_scene) /dev/rtkmem के माध्यम से भौतिक पेज 0x1DE7000 को मैप करता है और selinux_state.enforcing = 0 लिखता है।
चरण 4a — प्रत्यक्ष क्रेडेंशियल संशोधन: SELinux Permissive के साथ, /dev/rtkmem के माध्यम से भौतिक मेमोरी रीड्स द्वारा कर्नेल task_struct लिंक्ड लिस्ट को ट्रैवर्स करता है। comm[] का मिलान करके हमारे प्रोसेस को ढूँढता है, cred स्ट्रक्चर को uid=0 और init_cred से पूर्ण क्षमताओं के साथ ओवरराइट करता है। zygote के BPF seccomp फ़िल्टर को बायपास करने के लिए TIF_SECCOMP को साफ़ करता है।
चरण 4b — सिस्टम हार्डनिंग: विज्ञापन-अवरोधक hosts को बाइंड-माउंट करता है, टेलीमेट्री IPs को अवरुद्ध करने वाले iptables नियम हटाता है, 28 ब्लोटवेयर पैकेज अक्षम करता है, बूट पर्सिस्टेंस के लिए APP_AUTO_START प्रदान करता है, शेलकोड को निष्क्रिय करता है, SELinux को पुनः Enforcing में लागू करता है।
दो स्टैंडअलोन प्रोग्राम (root_cve22706.c, libc_rtkmem_patch2.c) उसी CVE-2022-22706 पेज-कैश लेखन प्रिमिटिव को अलग टेथर्ड-रूट चरणों के रूप में लागू करते हैं, जो मैन्युअल ADB रूटिंग और एक्सप्लॉइट को प्राथमिक रूप से समझने के लिए उपयोगी हैं।
scripts/root.sh — ADB ऑटोमेशन: TV से कनेक्ट होता है, दोनों स्टैंडअलोन चरण चलाता है, रूट + SELinux स्थिति सत्यापित करता है।scripts/post_root.sh — हार्डनिंग के बाद auto_root द्वारा कॉल किया जाने वाला पोस्ट-रूट हुक। पूर्ण डिवाइस बैकअप बनाता है: साइडलोडेड APKs, ऐप डेटा, 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 को किसी अविश्वसनीय नेटवर्क पर उजागर न करें। रीबूट करने से अस्थिर पैच (page-cache, bind mounts, iptables) हट जाते हैं, लेकिन पैकेज डिसेबल और APP_AUTO_START बने रहते हैं।
इस प्रोजेक्ट के आधार पर पैच किए गए boot या vbmeta इमेज फ़्लैश न करें। दो ऐतिहासिक प्रयासों में बूटलूप हुआ; न तो कोई स्थायी-रूट विधि स्थापित हुई और न ही कोई सार्वभौमिक रिकवरी गारंटी।
सभी मूल कोड के लिए MIT। कर्नेल अंश (kernel/mem.c) अपना GPL-2.0 लाइसेंस और कॉपीराइट सूचनाएँ बनाए रखता है। श्रेय और अपस्ट्रीम संदर्भों के लिए LICENSE और provenance देखें।