
Escalada de privilegios en el kernel en memoria para Lenovo Legion Y700 2023 (TB320FC) explotando CVE-2025-21479, una falla del SMMU de la GPU Qualcomm Adreno, con gestión de root ReSukiSU.
English | 简体中文
Escalada de privilegios de kernel en memoria para el Lenovo Legion Y700 2023 (TB320FC), explotando CVE-2025-21479 (vulnerabilidad del SMMU de la GPU Qualcomm Adreno), con gestión completa de root proporcionada por ReSukiSU.
Sin desbloqueo del bootloader. Sin flasheo. Sin PC para la activación.
⚠️ Para investigación de seguridad autorizada en dispositivos de su propiedad. Consulte Descargo de responsabilidad.
Todos los offsets y comportamientos de este proyecto están ajustados para el siguiente dispositivo. No espere que funcione en otros modelos/ROMs sin reajustarlos (consulte exploit/device_info.txt).
| Modelo | Lenovo Legion Y700 2023 (TB320FC) / TB320FC_PRC |
| SoC | Qualcomm SM8475 (Snapdragon 8+ Gen 1, Adreno 730) |
| Sistema | ZUXOS 1.1.350 / Android 15 (SDK 35) |
| Compilación | AQ3A.240812.002 (TB320FC_CN_OPEN_USER_Q00031.0_V_ZUXOS_1.1.350_ST_250418) |
| Kernel | 5.10.209-android12-9-gef44381c3e04-ab50 |
| Parche de seguridad | 2025-03-05 |
| Bootloader | Bloqueado (este proyecto no lo desbloquea) |
Verificado como funcional a fecha de 2026-09 en el firmware anterior.
| Capacidad | Implementación |
|---|---|
| Escalada de privilegios | exploit cheese: fallo del SMMU de KGSL → lectura/escritura física arbitraria de la GPU → root en memoria (uid 0 + todas las capabilities) |
| Gestión de root | ReSukiSU (fork de KernelSU) en modo late-load carga kernelsu.ko; su servido por un hook en el kernel (u:r:ksu:s0) |
| SELinux | Restaurado a Enforcing tras la activación (las reglas de política de ReSukiSU permanecen aplicadas) |
| UX de un toque | APK RootActivator con exploit + ksud integrados; un solo toque tras el arranque |
| Autorrecuperación (opcional) | Cadena de autocuración activada por el arranque: disparador adaptativo condicionado por la carga → cheese → pipeline de root → hosts/Vector opcional. Desactivado por defecto (com.poc.roottool.CONFIG) |
| Módulos Xposed | Compatibles mediante NeoZygisk (inyección ptrace en zygote) + Vector |
| Persistencia | Ninguna por diseño (en memoria): reactivar tras cada reinicio (~3-4 min; o habilitar la cadena de autorrecuperación) |
| RootActivator (activado) | ReSukiSU (funcionando, 2 módulos) |
|---|---|
![]() | ![]() |
Izquierda: RootActivator tras una activación exitosa — SELinux Enforcing, kernelsu cargado, su disponible.
Derecha: gestor ReSukiSU — modo LKM funcionando con 2 módulos (NeoZygisk + Vector).
RootActivator APK
│
├─ libcheese.so ── KGSL SMMU exploit (CVE-2025-21479)
│ 1. Adreno 730 microcode access-check flaw (SDS packet mistaken for RingBuffer)
│ 2. Fake CP_SMMU_TABLE_UPDATE overwrites GPU TTBR0 → arbitrary physical R/W
│ 3. Zero selinux_state.enforcing; dump kernel from fixed PA 0xA8000000,
│ parse kallsyms from the raw image (SM8475 has no physical KASLR)
│ 4. Patch __do_sys_capset with an escalation shellcode
│ (prepare_kernel_cred(0) + commit_creds + clear TIF_SECCOMP);
│ forked child calls capset() → uid 0 + full caps
│
└─ libksud.so (ReSukiSU) ── late-load mode
1. kernelsu.ko loaded from ksud's embedded assets with manual relocation
(does not rely on kernel symbol exports)
2. install → /data/adb/ksu (ksud/busybox/bootctl)
3. su channel online: /system/bin/su → kernel hook redirect → u:r:ksu:s0
4. setenforce 1 — Enforcing restored, policy rules already injected by the ko
Puntos de ingeniería destacados
insmod kernelsu.ko falla. La carga tardía de ReSukiSU resuelve los símbolos por sí misma y carga correctamente.Compila desde el código fuente (consulta Compilación) u obtén el APK desde la página de GitHub Releases (no está almacenado en el repositorio).
Descárgalo desde ReSukiSU Releases e instala el APK del gestor.
su -c 'sh /data/adb/modules/zygisksu/post-fs-data.sh'
El repositorio contiene el PoC (el exploit) y su activador de un solo toque. Las capas personalizadas del dispositivo (scripts de debloat, módulo privacy-hosts, herramientas de alcance de Xposed, asistentes de puesta en marcha) se mantienen fuera del árbol en un archivo privado separado — deliberadamente no forman parte de este repositorio. Detalles: docs/ARCHITECTURE.md.