
TCL 50C721 (RTD1319 / Mali-G31) Root-Toolkit — autonome CVE-2022-22706-Exploit-Kette
Vollständige Root-Exploit-Kette und Post-Root-Toolkit für tethered Root, SELinux Permissive, Werbeblockierung, Debloat und automatisierte Backups auf einer TCL-Android-TV-Firmware. Dies ist firmwarespezifische Forschung und Tooling, kein universelles TCL-Root-Tool und kein unterstützter Installer.
| Element | Erfasste Testeinheit |
|---|---|
| TV | TCL QLED 50C721 / BeyondTV6 |
| Firmware | V8-R51MT02-LF1V903, Build AR10 |
| Android / Kernel | Android 11 / 4.14.198+ |
| SoC / GPU | Realtek RTD1319 / Mali-G31 (Bifrost, kbase r28p0) |
| Userspace | 32-Bit ARMv7 |
| Gemeldeter Sicherheits-Patch | 2024-03-05 |
| Historisches Ergebnis | ADB-Shell mit uid=0; SELinux Permissive |
Nur diese Modell-/Firmware-Kombination hat ein dokumentiertes erfolgreiches Ergebnis. Die exakte SoC-Identifikation und die Mali-Treiber-Revision sind in den Originalaufzeichnungen inkonsistent; siehe Kompatibilitätsgrenzen. Bei der Vorbereitung dieses Quellcode-Release wurde kein frischer Rooting-Test durchgeführt.
Das autonome Root-Binary (auto_root.c) erlangt uid=0 aus einem unprivilegierten App-Kontext in unter 2 Sekunden:
Phase 1 — CVE-2022-22706 (Mali-GPU-Page-Cache-Schreibzugriff): Importiert ein MAP_SHARED-Mapping der __cxa_atexit-Seite von libc.so als GPU-User-Buffer über KBASE_IOCTL_MEM_IMPORT. Verwendet mremap(MREMAP_FIXED), um das Datei-Mapping zu ersetzen. Schreibt 112-Byte-Thumb-2-Shellcode über __cxa_atexit in den Page-Cache (Datei auf dem Datenträger unverändert — dm-verity-geschützt).
Phase 3 — Natürlicher Trigger: Jeder neue C++-Prozess ruft während der CRT-Initialisierung __cxa_atexit() auf und führt so den Shellcode aus. Eine privilegierte Domain (audioserver, rtkm_scene) mappt die physische Seite 0x1DE7000 über /dev/rtkmem und schreibt selinux_state.enforcing = 0.
Phase 4a — Direkte Credential-Modifikation: Mit SELinux Permissive wird die verkettete Liste der Kernel-task_struct über physische Speicherlesezugriffe durch /dev/rtkmem durchlaufen. Findet unseren Prozess durch Abgleich von comm[], überschreibt die cred-Struktur mit uid=0 und vollen Capabilities aus init_cred. Löscht TIF_SECCOMP, um den BPF-seccomp-Filter des zygote zu umgehen.
Phase 4b — System-Härtung: Bind-mountet werbeblockierende hosts, entfernt iptables-Regeln, die Telemetrie-IPs blockieren, deaktiviert 28 Bloatware-Pakete, gewährt APP_AUTO_START für Boot-Persistenz, deaktiviert den Shellcode, setzt SELinux wieder auf Enforcing.
Die beiden eigenständigen Programme (root_cve22706.c, libc_rtkmem_patch2.c) implementieren dieselbe CVE-2022-22706-Page-Cache-Schreibprimitive als separate Tethered-Root-Stufen, nützlich für manuelles ADB-Rooting und zum grundlegenden Verständnis des Exploits.
scripts/root.sh — ADB-Automatisierung: verbindet mit dem TV, führt beide eigenständigen Stufen aus, verifiziert Root- und SELinux-Status.scripts/post_root.sh — Post-Root-Hook, der von auto_root nach der Härtung aufgerufen wird. Erstellt vollständige Geräte-Backups: sideloaded APKs, App-Daten, WiFi-Konfiguration, alle Einstellungen, Paketlisten. Bereinigt automatisch auf die 5 neuesten Backups.Es ist kein APK oder reproduzierbares APK-Anwendungsprojekt enthalten; es gibt hier kein Install-once-Automatic-Boot-Release. Das autonome Root-Binary ist dafür ausgelegt, aus dem nativen Code einer APK aufgerufen zu werden, aber der APK-Wrapper ist nicht Teil dieses Release.
# 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>
Nur auf Hardware verwenden, die Sie besitzen oder deren Prüfung Sie ausdrücklich autorisiert haben. Prüfen Sie zuerst alle C-Dateien und jede firmwarespezifische Annahme. Sichern Sie Daten und beschaffen Sie sich unabhängig ein bekanntes passendes Wiederherstellungsabbild und -verfahren. Setzen Sie ADB keinem nicht vertrauenswürdigen Netzwerk aus. Ein Neustart entfernt die flüchtigen Patches (Page-Cache, Bind-Mounts, iptables), aber Paket-Deaktivierungen und APP_AUTO_START bleiben bestehen.
Flashen Sie keine gepatchten Boot- oder vbmeta-Images, die auf diesem Projekt basieren. Zwei frühere Versuche führten zu Bootloops; weder eine Methode für persistentes Root noch eine universelle Wiederherstellungsgarantie wurde etabliert.
MIT für den gesamten Originalcode. Der Kernel-Auszug (kernel/mem.c) behält seine GPL-2.0-Lizenz und Urheberrechtshinweise. Siehe LICENSE und provenance für Namensnennung und Upstream-Referenzen.