
Escalade de privilèges du noyau en mémoire pour Lenovo Legion Y700 2023 (TB320FC) exploitant CVE-2025-21479, une faille SMMU du GPU Qualcomm Adreno, avec la gestion root ReSukiSU.
English | 简体中文
Élévation de privilèges du noyau en mémoire pour le Lenovo Legion Y700 2023 (TB320FC), exploitant CVE-2025-21479 (vulnérabilité SMMU du GPU Qualcomm Adreno), avec une gestion complète du root fournie par ReSukiSU.
Pas de déverrouillage du bootloader. Pas de flashage. Pas de PC requis pour l'activation.
⚠️ Pour la recherche en sécurité autorisée sur des appareils que vous possédez. Voir Avertissement.
Tous les offsets et comportements de ce projet sont ajustés pour l'appareil suivant. Ne vous attendez pas à ce qu'il fonctionne sur d'autres modèles/ROMs sans réajustement (voir exploit/device_info.txt).
| Modèle | Lenovo Legion Y700 2023 (TB320FC) / TB320FC_PRC |
| SoC | Qualcomm SM8475 (Snapdragon 8+ Gen 1, Adreno 730) |
| Système | 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) |
| Noyau | 5.10.209-android12-9-gef44381c3e04-ab50 |
| Correctif de sécurité | 2025-03-05 |
| Bootloader | Verrouillé (ce projet ne le déverrouille pas) |
Vérifié fonctionnel en 2026-09 sur le firmware ci-dessus.
| RootActivator (activé) | ReSukiSU (fonctionnel, 2 modules) |
|---|---|
![]() | ![]() |
À gauche : RootActivator après activation réussie — SELinux Enforcing, kernelsu chargé, su disponible.
À droite : gestionnaire ReSukiSU — mode LKM fonctionnel avec 2 modules (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
Points d'ingénierie notables
insmod kernelsu.ko échoue. Le late-load de ReSukiSU résout les symboles lui-même et se charge correctement.Compilez depuis les sources (voir Compilation) ou récupérez l'APK depuis la page GitHub Releases (non stocké dans le dépôt).
Téléchargez depuis ReSukiSU Releases et installez l'APK du gestionnaire.
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 d'environnement acceptées par la compilation (voir app/build.py pour les détails) :
KOTLIN_HOME, ANDROID_BUILD_TOOLS, ANDROID_JAR, KEYSTORE, JAVA_HOME.
fetch_assets.py nécessite en plus RESUKISU_APK (chemin vers un APK ReSukiSU arm64)
pour extraire libksud.so.
adb root n'est pas disponible (adbd cannot run as root in production builds)ksud soft-reboot — cela bloque le
système (utilisez plutôt l'injection ptrace de NeoZygisk)Ce projet est fourni à des fins de recherche en sécurité et d'éducation uniquement, et uniquement pour les appareils que vous possédez ou que vous êtes explicitement autorisé à tester. Vous êtes seul responsable des conséquences et des implications légales. L'exploit peut redémarrer l'appareil ; dans de rares cas, une perte de données est possible — sauvegardez d'abord les données importantes.
| Capacité | Implémentation |
|---|
| Élévation de privilèges | exploit cheese : bug KGSL SMMU → lecture/écriture physique arbitraire GPU → root en mémoire (uid 0 + toutes les capacités) |
| Gestion du root | ReSukiSU (fork de KernelSU) en mode late-load charge kernelsu.ko ; su servi par un hook dans le noyau (u:r:ksu:s0) |
| SELinux | Restauré en Enforcing après activation (les règles de politique ReSukiSU restent appliquées) |
| UX en un tap | APK RootActivator avec exploit + ksud intégrés ; un seul tap après le démarrage |
| Modules Xposed | Pris en charge via NeoZygisk (injection ptrace du zygote) + Vector |
| Persistance | Aucune par conception (en mémoire) : réactiver après chaque redémarrage (~3-4 min) |