
Lenovo Legion Y700 2023 (TB320FC) 向けのインメモリカーネル特権昇格。Qualcomm Adreno GPU の SMMU 脆弱性 CVE-2025-21479 を悪用し、ReSukiSU による root 管理を行う。
English | 简体中文
Lenovo Legion Y700 2023 (TB320FC) 向けのインメモリ・カーネル権限昇格。CVE-2025-21479(Qualcomm Adreno GPU SMMU 脆弱性)を悪用し、完全な root 管理を ReSukiSU が提供します。
アクティベーションにブートローダーのアンロック不要。書き込み不要。PC 不要。
⚠️ 所有するデバイス上での許可されたセキュリティ研究向けです。免責事項を参照してください。
このプロジェクトのすべてのオフセットと動作は、以下のデバイス向けに調整されています。再調整なしで他のモデル/ROM で動作することを期待しないでください(exploit/device_info.txt を参照)。
| モデル | Lenovo Legion Y700 2023 (TB320FC) / TB320FC_PRC |
| SoC | Qualcomm SM8475 (Snapdragon 8+ Gen 1, Adreno 730) |
| システム | ZUXOS 1.1.350 / Android 15 (SDK 35) |
| ビルド | AQ3A.240812.002 (TB320FC_CN_OPEN_USER_Q00031.0_V_ZUXOS_1.1.350_ST_250418) |
| カーネル | 5.10.209-android12-9-gef44381c3e04-ab50 |
| セキュリティパッチ | 2025-03-05 |
| ブートローダー | ロック済み(このプロジェクトではアンロックしません) |
2026-09 時点で上記ファームウェアでの動作を確認済みです。
| 機能 | 実装 |
|---|---|
| 権限昇格 | cheese エクスプロイト: KGSL SMMU バグ → GPU による任意物理メモリ読み書き → インメモリ root(uid 0 + 全ケーパビリティ) |
| root 管理 | ReSukiSU(KernelSU フォーク)が late-load モードで kernelsu.ko をロード。su はカーネル内フック(u:r:ksu:s0)が提供 |
| SELinux | アクティベーション後に Enforcing へ復元(ReSukiSU のポリシールールは適用されたまま) |
| ワンタップ UX | エクスプロイト + ksud を内蔵した RootActivator APK。起動後にワンタップするだけ |
| 自動復旧(オプション) | 起動時トリガーの自己修復チェーン: 適応型ロードゲート付きトリガー → cheese → root パイプライン → オプションの hosts/Vector。デフォルトではオフ(com.poc.roottool.CONFIG) |
| Xposed モジュール | NeoZygisk(ptrace による zygote インジェクション)+ Vector 経由でサポート |
| 永続化 | 設計上なし(インメモリ): 再起動ごとに再アクティベーションが必要(約 3〜4 分。または自動復旧チェーンを有効化) |
| RootActivator(アクティベーション済み) | ReSukiSU(動作中、モジュール 2 個) |
|---|---|
![]() | ![]() |
左: アクティベーション成功後の RootActivator — SELinux Enforcing、kernelsu ロード済み、su 利用可能。
右: ReSukiSU マネージャー — LKM モードがモジュール 2 個(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
注目すべきエンジニアリング上のポイント
insmod kernelsu.ko は失敗する。ReSukiSU の遅延ロードはシンボルを自身で解決し、正常にロードされる。ソースからビルドする(ビルド を参照)か、GitHub Releases ページから APK を取得する(リポジトリには保存されていない)。
ReSukiSU Releases からダウンロードし、マネージャー APK をインストールする。
su -c 'sh /data/adb/modules/zygisksu/post-fs-data.sh'
このリポジトリには PoC(エクスプロイト)とそのワンタップアクティベーターが含まれています。カスタム デバイスレイヤー(debloat スクリプト、privacy-hosts モジュール、Xposed スコープツール、 bring-up ヘルパー)は別のプライベートアーカイブに ツリー外 で保管されており、 意図的にこのリポジトリには含まれていません。 詳細: docs/ARCHITECTURE.md。
├── LICENSE / CHANGELOG.md
├── README.md / README.zh-CN.md
│
├── exploit/ the PoC — root acquisition (CVE-2025-21479)
│ ├── source/ cheese.c / kallsyms_lookup.c / adrenaline.h
│ ├── device_info.txt Target device parameters (offsets, verified facts)
│ ├── build.sh Build script (requires Android NDK)
│ └── README.md Boundary statement, runtime chain, known failure modes
│
├── app/ RootActivator — one-tap activator (all extras OFF by default)
│ ├── src/ BootReceiver / HealGuardService / HealConfig / MainActivity (Kotlin)
│ ├── assets/ selfheal.sh / waiter.sh / xposed-up.sh
│ ├── native/ libcheese.so + libksud.so (built from exploit/; see tools/fetch_assets.py)
│ ├── 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/ Build / inspection helpers
│ ├── fetch_assets.py Host: prepare native assets (exploit + ksud)
│ ├── status_check.sh On-device: root / module snapshot
│ └── check_mods.sh On-device: module inspection helper
├── docs/ Documentation (English)
│ ├── ARCHITECTURE.md Chains, engineering notes, root-cause records
│ ├── TROUBLESHOOTING.md Failure handling, success-rate data
│ └── VECTOR.md Xposed (NeoZygisk + LSPosed/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
ビルドが受け付ける環境変数(詳細は app/build.py を参照):
KOTLIN_HOME、ANDROID_BUILD_TOOLS、ANDROID_JAR、KEYSTORE、JAVA_HOME。
fetch_assets.py はさらに RESUKISU_APK(ReSukiSU の arm64 APK へのパス)を必要とし、
libksud.so を抽出します。
adb root は利用不可(adbd cannot run as root in production builds)ksud soft-reboot は絶対に使用しないこと — ディスプレイが
ウェッジ状態にあるとユーザー空間の起動がデッドロックする(SurfaceFlinger ↔ ActivityManager)。
代わりに NeoZygisk の ptrace インジェクションを使用すること