Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cve-2025-21479_iqooneo8 — CVE-2025-21479 (Adreno KGSL) の iQOO Neo8 (SM8475) 向けローカルルートエクスプロイト - 物理メモリの読み書き、SELinuxの無効化、rootシェルの起動 | Kitploit
ツール/GitHubGitHub/qingizi7/cve-2025-21479_iqooneo8
Androidセキュリティ特権昇格エクスプロイトフレームワークエクスプロイトリバースエンジニアリングモバイルセキュリティハードウェアとIoTセキュリティペイロード開発バイナリエクスプロイト
GitHubqingizi7/cve-2025-21479_iqooneo8

cve-2025-21479_iqooneo8

CVE-2025-21479 (Adreno KGSL) の iQOO Neo8 (SM8475) 向けローカルルートエクスプロイト - 物理メモリの読み書き、SELinuxの無効化、rootシェルの起動

631071ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
リポジトリを見る

CVE-2025-21479 — Qualcomm Adreno GPU 権限昇格エクスプロイト(SM8475 / iQOO Neo8)

CVE-2025-21479 に対するローカル権限昇格の実験コード。対象は vivo V2301A(iQOO Neo8 / PD2301、Snapdragon 8+ Gen 1 / SM8475、Adreno A730、Android 14、GKI カーネル 5.10)上の Qualcomm Adreno GPU(KGSL)。

原理上、脆弱性の悪用は KGSL の CP_SMMU_TABLE_UPDATE コマンドを通じて GPU の SMMU を操作し、 任意の物理メモリ読み書き能力を獲得し、さらに SELinux を無効化し、カーネルシンボルを特定して root シェルを取得します——その全過程で書き換え(フラッシュ)は不要であり、Bootloader のアンロックにも依存しません。

セキュリティ研究は、自分が所有する、または許可を得たデバイスに対してのみ行ってください。


何をするのか

  1. GPU 物理メモリプリミティブ。 Adreno A730(eureka_panther)マイクロコードのアクセスチェック (and $12, 0x3)に欠陥があり、Self-Draw-State(SDS)パケットを RingBuffer(RB)と誤判定します。そのため、ユーザー空間で偽造した CP_SMMU_TABLE_UPDATE を SDS ブロックに入れて送信すると、GPU の TTBR0 を上書きでき、GPU ページテーブルを任意の物理ページに向けられます——これにより GPU は 任意の物理メモリを読み書きできます。
  2. 安定化された読み書き。 stabilize_rw によりマッピングを 2 MB の自己マッピング領域に強化し、 大量の高速読み取り(fast_pread_bytes など)をサポートします。
  3. SELinux の無効化。 物理メモリ内で selinux_state.enforcing フィールドをゼロにします。 その後、固定物理ベースアドレス 0xA8000000 からカーネルイメージをダンプし(デフォルト上限 43 MB)—— SM8475 には物理 KASLR がない——そして生のダンプから直接 kallsyms 構造を解析します (エンディアン自動判別)。そのため仮想 KASLR の影響も受けません。
  4. root ペイロード。 AArch64 シェルコード(prepare_kernel_cred(0) → commit_creds()、および seccomp の無効化)で __do_sys_capset にパッチを当てます。fork された子プロセスが capset() を呼び出す → uid 0 になる → 上書きされたカーネルコードを復元する → 子プロセスは u:r:shell:s0 ドメインで指定したコマンド(デフォルト sh)を再実行します。カーネルコードは最終的に 実行前とバイト単位で一致します。

テストデバイス

モデルvivo V2301A(iQOO Neo8、コードネーム PD2301、マザーボード taro)
SoCSM8475(Snapdragon 8+ Gen 1)+ Adreno 730
Android14(UP1A.231005.007、SDK 34、qssi-user)
カーネル5.10.198-gki-gfb2f5774872c
SELinuxEnforcing(実行時に本ツールにより無効化)

完全なデバイス情報は device_info.txt を参照してください。

リポジトリ構造

├── source/
│   ├── cheese.c            # 漏洞利用主程序(include 了下面两个文件)
│   ├── kallsyms_lookup.c   # 针对原始内核映像的 kallsyms 解析器
│   └── adrenaline.h        # KGSL ioctl / 命令定义(作者 hawkes)
├── exploit                 # 预编译 arm64 二进制(动态链接,minSdk 21,
│                           #  NDK r30-beta2)
├── device_info.txt         # 用于调参的目标设备信息
└── README.md

注意:cheese.c は kallsyms_lookup.c と adrenaline.h を #include するため、 コンパイル時には3つのファイルを同じディレクトリに置く必要があります。

コンパイル

比較的新しい Android NDK(r25+)であればどれでも使用可能です。例:

# 静态链接(自包含、任意 API 等级可运行;体积较大)
aarch64-linux-android34-clang -o cheese source/cheese.c -static

# 动态链接(体积小,依赖设备自带的 libc;API 等级需匹配设备)
aarch64-linux-android34-clang -o exploit_dyn source/cheese.c
# 若要兼容 API 21+ 设备,请改用 aarch64-linux-android21-clang

使用方法

#推送exploit
adb push exploit /data/local/tmp/

#运行exploit
adb shell
chmod +x /data/local/tmp/exploit
/data/local/tmp/exploit

詳細なチュートリアルはこちら(ワンクリックツールも含まれています)

成功すると uid=0 のシェルが得られ、このセッションの SELinux は無効化されています。プロセスは 権限昇格を完了した後、argv[1..](デフォルトは sh)を再実行します。実行ごとにカウントダウン ("pte wait 3 second")と 43 MB のカーネル読み取り進捗("Read X / 43 MB")が表示されます。 権限昇格成功、uid=0

環境変数

変数役割
CHEESE_PHYADDR=<phys>カーネルの物理ベースアドレスを強制指定する(内蔵の gPhyAddrs 検出テーブルをスキップ)。
CHEESE_ATTEMPT=<n>gPhyAddrs[0] の代わりに gPhyAddrs[n] を使用する。GPU の初期化に失敗すると maybe_retry が自動的にインクリメントして再試行する。
CHEESE_SWAPPER_PG_DIR_OFF=<off>swapper_pg_dir のスキャンをスキップし、その絶対オフセットを直接使用する。
CHEESE_READ_FULL_KERNEL=1カーネルイメージ全体を読み取る(デフォルトの読み取り上限は DEFAULT_KERNEL_SIZE_MB = 43 MB)。
CHEESE_KALLSYMS_MAX_MB=<MB>kallsyms の読み取り上限を上書きする。
CHEESE_FORCE_MANUAL_PATCHFINDER=1手動 patchfinder のフォールバック(init_cred、prepare_kernel_cred)を強制的に使用する。
CHEESE_SKIP_GPU=1GPU の読み書きフェーズをスキップする(デバッグ専用)。
CHEESE_NO_RETRY=1失敗したら直接終了し、番号を変えての再試行を行わない。

vr.koの無効化

vivo 機種の特殊な仕組みにより、iQOO Neo8 では root 権限を安定して維持するためにこれを無効化する必要があります(具体的な原理はここでは説明しません。他の vivo 機種やカーネルバージョンでは通用しない可能性があり、vr.ko を自身で抽出してリバースエンジニアリングする必要があります)。以下の操作を実行する際は、まず現在のシェルセッションが root 権限を取得していることを確認してください。

#备份原始apanic

dd if="$(readlink -f /dev/block/by-name/apanic)" of=/sdcard/apanic_full.bin
#adb shell内执行
adb pull /sdcard/apanic_full.bin ./
#主机端执行

#禁用vr.ko(风险自行评估)
printf '\370\037\000\000\000\000\000\000\000\000\000\000' | dd of=$(readlink -f /dev/block/by-name/apanic) bs=1 seek=$(( $(blockdev --getsize64 /dev/block/by-name/apanic) - 65472 )) conv=notrunc && sync

その後、コールドリブートでスマートフォンを再起動してroot権限が失効した場合は、exploitを再実行してから脱獄を実行するだけで済みます

ReSukiSU脱獄(root権限の永続化)

$(find /data/app -type f -name "libksud.so" | grep resukisu) late-load --kmi android12-5.10

他のデバイスへの移植

デバイス関連の定数は source/cheese.c の先頭にあります:

  • KERNEL_PHYS_BASE — カーネルの物理ベースアドレス(デフォルト 0xA8000000、SM8475)
  • IDMAP_PG_DIR_OFFSET — idmap_pg_dir のオフセット(デフォルト 0x245a000)
  • selinux_state_offset — selinux_state を特定するためのオフセット(デフォルト 0x729030、実際の物理アドレス = idmap_pg_dir の物理アドレス + このオフセット)
  • gPhyAddrs[] — 順番に試行する候補の物理ベースアドレス
  • DEFAULT_KERNEL_SIZE_MB — カーネル読み取り時のフォールバック値 / 上限

前提条件:Adreno A730/A7xx シリーズ GPU(影響を受けるファームウェア)を搭載し、デバイスのシステムに Qualcomm が2025年6月に公開したセキュリティパッチが未適用で、物理ダンプから kallsyms を解析できるカーネルであり、かつ物理 KASLR が無効であること。

よくある質問

  • can't get GPU r/w — GPU の初期化に失敗しています。まず待機し、それでもだめな場合は CHEESE_ATTEMPT=1..n を試すか、手動で CHEESE_PHYADDR を指定してください。単一の試行をデバッグする場合は CHEESE_NO_RETRY=1 を追加します。
  • kallsyms の解析に失敗する — まず CHEESE_READ_FULL_KERNEL=1 で完全なイメージを読み取り(併せて CHEESE_KALLSYMS_MAX_MB で上限を拡大)、その後 CHEESE_FORCE_MANUAL_PATCHFINDER=1 を検討してください。
  • 本ツールは何も書き込まず、永続化もしません:カーネルコードとページテーブルは終了前に復元され、 再起動後のデバイスは実行前と完全に同一です。

謝辞

  • @zhuowei — CVE-2025-21479 の研究者であり、本 ツールの基となったオープンソースの cheese エクスプロイトの作者m/
  • cheese / cheese-cake オープンソースの系譜 — SDS/TTBR0 技術、カーネルダンプに基づく kallsyms 解析
  • hawkes — 2020 年の adrenaline.h KGSL ヘッダーファイル、ioctl インターフェース定義を提供
  • Coolapk@renil — この脆弱性を iQOO Neo8 上で再現した研究(vk.ko のリバースエンジニアリング分析)

このリポジトリは zhuowei/cheese をベースに改変したものです(元リポジトリにはライセンスがありません) 脆弱性の完全な原理については cheese リポジトリおよび脆弱性公告を参照してください。

  • Coolapk@TNTHe — 私の Coolapk アカウント

免責事項

このリポジトリは教育およびセキュリティ研究のみを目的としており、ご自身が所有するか、使用を許可されたデバイスでのみ使用してください。 作者はあらゆる悪用行為について責任を負いません。本ツールの使用により保証が無効になったり、関連する利用規約に違反する可能性があります。

ツールをダウンロード