
Escalation di privilegi in-memory nel kernel per Lenovo Legion Y700 2023 (TB320FC) che sfrutta CVE-2025-21479, una vulnerabilità SMMU della GPU Qualcomm Adreno, con gestione root ReSukiSU.
English | 简体中文
Escalatione di privilegi in-memory del kernel per il Lenovo Legion Y700 2023 (TB320FC), sfruttando CVE-2025-21479 (vulnerabilità SMMU della GPU Qualcomm Adreno), con gestione completa del root fornita da ReSukiSU.
Nessuno sblocco del bootloader. Nessun flashing. Nessun PC richiesto per l'attivazione.
⚠️ Per ricerca di sicurezza autorizzata su dispositivi di tua proprietà. Vedi Disclaimer.
Tutti gli offset e i comportamenti in questo progetto sono ottimizzati per il seguente dispositivo. Non aspettarti che funzioni su altri modelli/ROM senza una nuova taratura (vedi exploit/device_info.txt).
| Modello | 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 |
| Patch di sicurezza | 2025-03-05 |
| Bootloader | Bloccato (questo progetto non lo sblocca) |
Verificato funzionante a partire da 2026-09 sul firmware sopra indicato.
| RootActivator (attivato) | ReSukiSU (funzionante, 2 moduli) |
|---|---|
![]() | ![]() |
A sinistra: RootActivator dopo l'attivazione riuscita — SELinux Enforcing, kernelsu caricato, su disponibile.
A destra: gestore ReSukiSU — modalità LKM funzionante con 2 moduli (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
Punti ingegneristici notevoli
insmod kernelsu.ko fallisce. Il late-load di ReSukiSU risolve i simboli da solo e si carica correttamente.Compila dal sorgente (vedi Building) oppure scarica l'APK dalla pagina GitHub Releases (non memorizzato nel repository).
Scarica da ReSukiSU Releases e installa l'APK del gestore.
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
Variabili d'ambiente accettate dalla build (vedi app/build.py per i dettagli):
KOTLIN_HOME, ANDROID_BUILD_TOOLS, ANDROID_JAR, KEYSTORE, JAVA_HOME.
fetch_assets.py necessita inoltre di RESUKISU_APK (percorso di un APK ReSukiSU arm64)
per estrarre libksud.so.
adb root non è disponibile (adbd cannot run as root in production builds)ksud soft-reboot — blocca il
sistema (usa invece l'iniezione ptrace di NeoZygisk)Questo progetto è fornito solo per ricerca di sicurezza e scopi educativi, e solo per dispositivi di tua proprietà o che sei esplicitamente autorizzato a testare. Sei l'unico responsabile di qualsiasi conseguenza e implicazione legale. L'exploit può riavviare il dispositivo; in rari casi è possibile la perdita di dati — esegui il backup dei dati importanti prima.
| Capacità | Implementazione |
|---|
| Escalatione di privilegi | exploit cheese: bug KGSL SMMU → R/W fisico arbitrario della GPU → root in-memory (uid 0 + caps completi) |
| Gestione root | ReSukiSU (fork di KernelSU) in modalità late-load carica kernelsu.ko; su servito da un hook in-kernel (u:r:ksu:s0) |
| SELinux | Ripristinato a Enforcing dopo l'attivazione (le regole di policy di ReSukiSU restano applicate) |
| UX one-tap | APK RootActivator con exploit + ksud integrati; un singolo tap dopo il boot |
| Moduli Xposed | Supportati tramite NeoZygisk (iniezione ptrace nello zygote) + Vector |
| Persistenza | Nessuna per design (in-memory): riattivare dopo ogni riavvio (~3-4 min) |