
Shizuku を利用した CVE-2026-98260 の root 化と、Xiaomi yingtian / lhasa(カーネル 6.18.21)向け KernelSU ランタイム LKM ローダー
中国語訳:
README.zh-CN.md— 本ファイルの翻訳です。両者に相違がある場合は、この英語版ファイルが正式版となります。
Xiaomi yingtian(Pad 9 Pro Max)および lhasa(Xiaomi 18 Fold)ファミリー向けの、HyperOS 4(Android 17、カーネル 6.18.21)上でのローカル権限昇格 + KernelSU。チェーン全体は、シェルモードで Shizuku を駆動し、CVE-2026-98260 を悪用し、インストール済みのマネージャー(KernelSU / KernelSU-Next / SukiSU)に一致する KernelSU ファミリーの LKM をロードする、通常の Android アプリとして提供されます。PC 不要、ブートローダーのアンロック不要、パーティションの変更も不要です。
研究 / 教育 / デバイス修理プロジェクトです。ブートのみ(再起動すると消えます)。所有しているデバイスでのみ実行してください。使用前に
docs/SECURITY.mdをお読みください。
エージェント / 自動コントリビューター: まず AGENTS.md(エントリポイント: 不変条件、ビルド/テスト手順、罠、衛生管理)を読み、次に docs/AGENT_HANDOFF.md(検証済みの状態、失敗した実験、未完了の作業)を読んでください。コミット前に bash scripts/verify.sh を実行してください。ツールチェーン環境が設定されていれば、ペイロード/APK も再ビルドされます。
中文版: AGENTS.zh-CN.md /
docs/AGENT_HANDOFF.zh-CN.md
| リリース | v3.2(release/o3root2-v3.2.apk、14,239,248 B、sha256 64bbc654…) |
| O1 テストビルド | v3.3.3-o1-test(release/test/o3root2-v3.3.3-o1-test.apk、14,247,440 B、sha256 62411f72…): v3.2 に実験的な O1(XRING)プロファイル(dijun / jinghu / violin)と隠しルートコンソールを追加したもの。6.18.21-android17…-4k カーネルシリーズ上の任意の OS4.0.0.x ビルドを受け入れます: 解析済みビルドが検証済みパスであり、その他のビルドは警告付きの緩和モードで実行されます。テスター専用で、実機検証は未実施 |
| 以前のテストビルド | v3.2.1-console(release/beta/o3root2-v3.2.1-console.apk、14,243,344 B、sha256 9cba365a…): 安定版 v3.2 に隠しルートコンソールを追加したもの(バージョン行を長押し、3 回の確認) |
| O1 デバイス | OS4.0.0.x 上の Xiaomi O1 SoC dijun / jinghu / violin: 3 機種すべてが同一の 6.18.21 カーネル(sha256 0d9917ca…、g1d099fcb35e0)を搭載。静的解析ではチェーンが適用可能と判断されているが、実機テストは未実施 |
| カスタム LKM | オプションのユーザー提供 KernelSU ファミリー .ko(基本的な互換性チェックあり。組み込みの適応型モジュールにフォールバック。選択内容は保存され、起動時に復元されます — 行を長押しするとクリア) |
| チェーン | Shizuku シェル → CVE-2026-98260 → uid=0 + 全ケーパビリティ → 一致する KernelSU LKM(KernelSU / KernelSU-Next / SukiSU)→ rootd |
| 永続化 | なし(現在のブートのみ) |
| テスト済みデバイス | Xiaomi Pad 9 Pro Max yingtian、HyperOS OS4.0.16.0.XBMCNXM |
| 2 台目のデバイス | lhasa(Xiaomi 18 Fold、OS4.0.26.0.XPNCNXM): ブートカーネルが yingtian のものとビット単位で同一(sha256 cde87cd7…)であるため、同じペイロードが適用可能。実機テストは未実施 |
newProcess を介して /system/bin/sh -c … を起動するため、
ペイロードは u:r:shell:s0(uid=2000)で実行されます。CLOCK_THREAD_CPUTIME_ID + execve/de_thread
レース(CVE-2026-98260)をトリガーし、解放された posix_timers_cache の order-1 スラブ
ページを、偽造された RB ツリーノードを含むスプレーされた kmalloc-8k バッファで再利用し、
2 回目の timerqueue_del → rb_erase を使って任意のカーネルアドレスに 8 バイトの値を書き込みます。selinux_state-7 への 8 バイトの非アラインド書き込みで
enforcing をクリアします(これにより隣接する notif_lock の pending/tail
バイトもクリアされますが、initialized/policycap はそのまま残ります)。ステージ 1 は
task_struct.cred を偽の cred ページ(uid 0、全権限)に書き込みます。/proc/kallsyms を通じて解決され(フォールバック: 248 シンボルの union 再リンク +
現在の KASLR スライド)、init パッチはありません — policycap が
クリーンなままだったため、KernelSU 自身の setenforce(1) は無害であり、デバイスは
Enforcing のまま終了します。その後 insmod され、rootd デーモンが残されます
(抽象ソケット @o3p_rootd、peer-uid 0/2000)。上流の KernelSU、
KernelSU-Next、SukiSU の LKM はすべて動作します(レガシー: O3P_CODEPATCH=1 は
setenforce の即値をパッチします)。v3.1 以降、アプリは代わりに選択した .ko をロードできます
(基本的な ELF/.modinfo 互換性チェック、拒否またはロード失敗時は組み込み
LKM へ自動フォールバック)。v3.1.1 以降、その選択は
永続化され(files/custom-ko.ko + custom-ko.meta)、起動時に復元されます。
検証に通らなくなった古いファイルは破棄され、モジュール行の長押しでクリアされます。
v3.2 以降、ログボックスは選択可能で、ログ全体をコピーする
复制 アクションがあります。自動スクロールは、すでに最下部付近にいる場合にのみ
行われます。認識された O1 デバイスでは、テストビルドは
ペイロード開始前に 2 段階のリスク確認を求めます。テスト
ビルドはさらに、バージョン行の長押しで root コンソールを隠します。
スキップ不可の確認が 3 回あり、その後コマンドは rootd ソケットを介して root として
実行されます(現在のブートで 1 回ペイロードを実行している必要があります)。
安定版ビルドにはコンソールクラスは含まれていません。オフセット、書き込みプリミティブ、KernelSU パッチ、移植ガイドについては
docs/ARCHITECTURE.md を参照してください。
shizuku_plus_server は uid=2000、u:r:shell:s0 として実行されている必要があります。release/o3root2-v3.2.apk をインストールします(MIUI では「USB 経由でインストール」を許可する必要がある場合があります)。★ UIDNOW uid=0、
★ KSU_MODULE LIVE が表示され、KernelSU マネージャーが自動的に開きます。O1 デバイス(dijun / jinghu / violin)でテストしていますか? 代わりに
release/test/o3root2-v3.3.3-o1-test.apk
をインストールし、docs/TESTING_O1.md に従ってください。ゲートは
任意の 6.18.21-android17…-4k カーネル(OS4.0.0.x)で 3 つのコードネームを受け入れます。
解析済みビルド g1d099fcb35e0 は検証済みパスを取得し、他のビルドは
固件门禁通过(O1 宽松模式:…) をログに記録し、警告付きで O1 アドレスを再利用します。
ペイロードは SELINUX_PROFILE kernel=… base=… src=env|uname をログに記録するため、レポートには
エクスポートされたログだけで十分です。
マネージャーがインストールされていませんか? ボタンは Install KernelSU manager に変わり、 バンドルされた APK をインストールします(システムのプロンプトを受け入れてください)。
AGENTS.md entry point for automated contributors (invariants, traps, checks)
app/ Android app sources (Java), manifest, res, build.sh
payload/ o3p.c (exploit payload + runtime KernelSU loader), 248-symbol
fallback table / relinker, mk_payload.py, build-payload.sh,
legacy/ (earlier revisions)
tools/ OTA/kernel extraction + verification scripts
docs/ architecture, security, build, OTA analysis, feasibility report,
evidence screenshots
scripts/ toolchain fetcher, env template, build-all
release/ prebuilt APK + checksums
third_party/ notices for bundled third-party components
bash scripts/fetch-toolchain.sh
cp scripts/env.example.sh env.sh && . ./env.sh # edit paths
bash payload/build-payload.sh # -> payload/build/libo3p.so
bash app/build.sh # -> app/build/o3root2.apk
完全な前提条件とトラブルシューティング: docs/BUILD.md。
boot/init_bootのパッチが必要ですが(ロックされたブートローダーによりブロックされます)、
対象外です。selinux_stateはクリーン
(policycapは未変更)であるため、MACは有効のままです。レガシーのO3P_SELDIRTY=1
パスのみがPermissive(システム全体でMACオフ)で終了します。セキュリティノートを参照してください。O3P_SELDIRTY=1の場合のみ。このパスは
依然として古いダーティ値を書き込むため、setenforce 1を実行するとWi-Fi TXが
setenforce 0または再起動まで停止します。v3のデフォルトはこれを回避し、リカバリUIを
搭載していません(v1.8〜v2.1にはガードとリカバリボタンがありました)。6.18.32-4k向けにモジュールをビルドしましたが、
この6.18.21カーネル向けに再リンクされているため、カーネルをtaintします。
本番環境のrootソリューションとして扱わないでください。docs/ARCHITECTURE.mdのポーティング
セクションを参照)。O1テストビルドは唯一のガード付き例外です。これは
6.18.21-android17…-4kシリーズの任意のOS4.0.0.xビルドを受け入れ、分析済みのO1
selinux_stateアドレスを再利用し、他の静的値は比較されていないことを警告します。