
Kit de herramientas de root para TCL 50C721 (RTD1319 / Mali-G31) — cadena de explotación autónoma de CVE-2022-22706
Cadena de explotación completa para root y kit de herramientas posterior al root para root con conexión por cable, SELinux Permissive, bloqueo de anuncios, debloat y copia de seguridad automatizada en un firmware concreto de TCL Android TV. Se trata de investigación y herramientas específicas para un firmware, no de una herramienta universal de root para TCL ni de un instalador compatible.
| Elemento | Unidad de prueba registrada |
|---|---|
| TV | TCL QLED 50C721 / BeyondTV6 |
| Firmware | V8-R51MT02-LF1V903, compilación AR10 |
| Android / kernel | Android 11 / 4.14.198+ |
| SoC / GPU | Realtek RTD1319 / Mali-G31 (Bifrost, kbase r28p0) |
| Espacio de usuario | ARMv7 de 32 bits |
| Parche de seguridad declarado | 2024-03-05 |
| Resultado histórico | Shell ADB con uid=0; SELinux Permissive |
Solo esta combinación de modelo/firmware tiene un resultado exitoso registrado. La identificación exacta del SoC y la revisión del controlador Mali son inconsistentes entre los registros originales; consulte límites de compatibilidad. No se realizó ninguna prueba de rooting nueva durante la preparación de esta versión del código fuente.
El binario autónomo de root (auto_root.c) obtiene uid=0 desde un contexto de aplicación sin privilegios en menos de 2 segundos:
Fase 1 — CVE-2022-22706 (escritura en la caché de páginas de la GPU Mali): Importa una asignación MAP_SHARED de la página __cxa_atexit de libc.so como búfer de usuario de la GPU mediante KBASE_IOCTL_MEM_IMPORT. Usa mremap(MREMAP_FIXED) para reemplazar la asignación del archivo. Escribe shellcode Thumb-2 de 112 bytes sobre __cxa_atexit en la caché de páginas (el archivo en disco no se modifica — protegido por dm-verity).
Fase 3 — Disparador natural: Cada nuevo proceso C++ llama a __cxa_atexit() durante la inicialización del CRT, ejecutando el shellcode. Un dominio privilegiado (audioserver, rtkm_scene) mapea la página física 0x1DE7000 mediante /dev/rtkmem y escribe selinux_state.enforcing = 0.
Fase 4a — Modificación directa de credenciales: Con SELinux en modo Permissive, recorre la lista enlazada de task_struct del kernel mediante lecturas de memoria física a través de /dev/rtkmem. Encuentra nuestro proceso haciendo coincidir comm[], sobrescribe la estructura cred con uid=0 y todas las capacidades de init_cred. Borra TIF_SECCOMP para eludir el filtro seccomp BPF del zygote.
Fase 4b — Endurecimiento del sistema: Monta mediante bind-mount hosts de bloqueo de anuncios, elimina reglas de iptables que bloquean IPs de telemetría, desactiva 28 paquetes de bloatware, concede APP_AUTO_START para persistencia en el arranque, desactiva el shellcode y vuelve a poner SELinux en Enforcing.
Los dos programas independientes (root_cve22706.c, libc_rtkmem_patch2.c) implementan la misma primitiva de escritura en la caché de páginas de CVE-2022-22706 como etapas separadas de root con conexión por cable, útiles para el rooting manual por ADB y para comprender la primitiva de explotación.
scripts/root.sh — Automatización por ADB: se conecta a la TV, ejecuta ambas etapas independientes y verifica el estado de root + SELinux.scripts/post_root.sh — Hook posterior al root invocado por auto_root tras el endurecimiento. Crea copias de seguridad completas del dispositivo: APKs instalados por sideload, datos de aplicaciones, configuración de WiFi, todos los ajustes y listas de paquetes. Elimina automáticamente hasta conservar las 5 copias de seguridad más recientes.No se incluye ningún APK ni proyecto de aplicación APK reproducible; aquí no hay una versión de instalación única con arranque automático. El binario autónomo de root está diseñado para ser invocado desde el código nativo de un APK, pero el envoltorio APK no forma parte de esta versión.
# 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>
Úselo únicamente en hardware que posea o que esté explícitamente autorizado a evaluar. Revise primero todos los archivos C y cada suposición específica del firmware. Conserve los datos y obtenga de forma independiente una imagen de recuperación compatible conocida y su procedimiento. No exponga ADB a una red no confiable. El reinicio elimina los parches volátiles (caché de páginas, montajes bind, iptables), pero las desactivaciones de paquetes y APP_AUTO_START persisten.
No flashee imágenes de boot o vbmeta parcheadas basadas en este proyecto. Dos intentos históricos provocaron bootloops; no se estableció ni un método de root persistente ni una garantía de recuperación universal.
MIT para todo el código original. El extracto del kernel (kernel/mem.c) conserva su licencia GPL-2.0 y sus avisos de copyright. Consulte LICENSE y provenance para la atribución y las referencias upstream.