
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 en el 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 de bootloader. Sin flasheo. Sin PC requerido para la activación.
⚠️ Para investigación de seguridad autorizada en dispositivos de tu propiedad. Consulta Disclaimer.
Todos los offsets y comportamientos en este proyecto están ajustados para el siguiente dispositivo. No esperes que funcione en otros modelos/ROMs sin reajustar (consulta 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) |
| Build | 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 funcionando a partir de 2026-09 en el firmware anterior.
| 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 destacables
insmod kernelsu.ko falla. El late-load de ReSukiSU resuelve los símbolos por sí mismo y carga sin problemas.Compila desde el código fuente (consulta Compilación) u obtén el APK desde la página de Releases de GitHub (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'
├── LICENSE / CHANGELOG.md
├── README.md / README.zh-CN.md
├── exploit/ cheese exploit (CVE-2025-21479, ported to TB320FC)
│ ├── source/ cheese.c / kallsyms_lookup.c / adrenaline.h
│ ├── device_info.txt Target device parameters (offsets, verified facts)
│ └── build.sh Build script (requires Android NDK)
├── app/ RootActivator (Kotlin, hand-rolled build, no Gradle)
│ ├── src/ MainActivity.kt (single file, code-only UI)
│ ├── res/ launcher icon (mipmap-xxxhdpi)
│ ├── AndroidManifest.xml
│ ├── debug.keystore debug signing key used by the public APK
│ ├── build.py Build script (kotlinc + d8 + aapt2 + apksigner)
│ └── README.md App documentation
├── tools/ Helper scripts
│ ├── fetch_assets.py Host: prepare native assets (exploit + ksud)
│ ├── neozygisk_setup.sh On-device: NeoZygisk + Vector (see VECTOR.md)
│ ├── status_check.sh On-device: root / module snapshot
│ └── check_mods.sh On-device: module inspection helper
├── docs/ Documentation (English)
│ ├── ARCHITECTURE.md Deep dive into both chains
│ ├── TROUBLESHOOTING.md Failure handling, success-rate data
│ └── VECTOR.md Xposed (NeoZygisk + Vector) setup
└── screenshots/ On-device PNG evidence
cd exploit
NDK=/path/to/android-ndk ./build.sh
# Produces ./cheese (arm64) → used as app/native/libcheese.so
cd app
python ../tools/fetch_assets.py # prepare native assets
python build.py # requires kotlinc + Android build-tools
# Produces RootActivator.apk
Variables de entorno aceptadas por la compilación (consulta app/build.py para más detalles):
KOTLIN_HOME, ANDROID_BUILD_TOOLS, ANDROID_JAR, KEYSTORE, JAVA_HOME.
fetch_assets.py además necesita RESUKISU_APK (ruta a un APK arm64 de ReSukiSU)
para extraer libksud.so.
adb root no está disponible (adbd cannot run as root in production builds)ksud soft-reboot — cuelga el
sistema (usa la inyección ptrace de NeoZygisk en su lugar)Este proyecto se proporciona únicamente con fines de investigación de seguridad y educativos, y solo para dispositivos que poseas o estés explícitamente autorizado a probar. Eres el único responsable de cualquier consecuencia e implicación legal. El exploit puede reiniciar el dispositivo; en casos raros es posible la pérdida de datos — haz una copia de seguridad de los datos importantes primero.
| Capacidad | Implementación |
|---|
| Escalada de privilegios | exploit cheese: bug del SMMU de KGSL → R/W físico arbitrario de la GPU → root en memoria (uid 0 + todas las caps) |
| 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 embebidos; un solo toque tras el arranque |
| 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) |