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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ghostlock-sabrina — CVE-2026-43499 Google TV搭載Chromecast(sabrina)向けGhostLock rootエクスプロイト | Kitploit
ツール/GitHubGitHub/k-o-n-t-o-r/ghostlock-sabrina
Androidセキュリティ組み込みシステムセキュリティ特権昇格脆弱性分析エクスプロイトハードウェアとIoTセキュリティ論文と研究ペイロード開発バイナリエクスプロイト
GitHubk-o-n-t-o-r/ghostlock-sabrina

ghostlock-sabrina

CVE-2026-43499 Google TV搭載Chromecast(sabrina)向けGhostLock rootエクスプロイト

113731ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

GhostLock Sabrina

Chromecast with Google TV(sabrina)における CVE-2026-43499 を悪用した root エクスプロイト -- Linux カーネルの futex PI(優先度継承)サブシステムにおける use-after-free です。

Android 14、カーネル 5.15.170(PGO+BOLT+LTO、clang 17)を搭載したブートローダーロック状態のデバイスで root を取得します。

脆弱性

GhostLock は、rt_mutex_start_proxy_lock() の -EDEADLK ロールバックパスから呼び出される remove_waiter() のバグを悪用します。この関数は、ウェイタータスクのものではなく、current->pi_blocked_on(requeuer のもので、すでに NULL)をクリアしてしまいます。ウェイターの pi_blocked_on は決してクリアされず、カーネルスタック上の解放済み rt_mutex_waiter へのダングリングポインタが残ります。

その後の sched_setattr が rt_mutex_adjust_pi -> rt_mutex_adjust_prio_chain をトリガーし、ダングリングポインタをたどって、再利用されたヒープページ上の攻撃者制御データを対象に PI チェーンをたどります -- これにより rb_erase を介した任意書き込みプリミティブが得られます。

エクスプロイトチェーン

ステージ手法
KASLR リークPERF_SAMPLE_IP を用いた perf_event_open(TID ゲート付き) — 最小カーネル IP は .entry.text(+0x10000)内にあり、_text は 2MB アラインメントで KASLR スライドは 2MB の倍数であるため、min_ip & ~0x1fffff により実行時の _text を正確に復元できる
タスク構造体リークPERF_SAMPLE_REGS_INTR を用いた perf_event_open(TID ゲート付き、リニアマップアドレスのモード)
シンボルテーブル検証setpriority(-20) ストーム中に security_capable() のレジスタ引数から perf-samples で &init_user_ns を取り出し、kaslr_base + off_init_user_ns と照合する — これにより、実行中のカーネルの .data/.bss レイアウトが、ブラインド書き込み前にオフセットテーブルと一致することを証明する
mm_struct リークKernelSnitch -- futex ハッシュ衝突タイミングのサイドチャネル
ヒープスプレーSLUB 破棄の振り付け(memfd-close、CPU パーシャルオーバーフロー)+ io_uring_setup(256) による order-2 ページ回収
スタックオーバーレイAF_UNIX SOCK_SEQPACKET sendmsg -- move_addr_to_kernel が 128 バイトの sockaddr をカーネルスタックにコピーし、ダングリングウェイターの task/lock/prio フィールドを上書きする
ウォークトリガー単調な nice ラダー(7 -> 14 -> 19)を伴う sched_setattr が PI チェーンウォークを発火させる(オーバーレイのラウンドごとに 1 回)
書き込みプリミティブrb_erase ケース 1: `{pc=(TARGET-8)
SELinux 無効化(ウォーク 0)selinux_state への 8 バイトゼロ書き込みにより enforcing、checkreqprot、initialized、policycap[0..4] がクリアされる — avc_denied() は決して拒否せず(enforcing=0)、security_compute_av() は allow-all にショートサーキットする(!initialized)ため、スワップ後のカーネル SID(u:r:kernel)は問題にならなくなる
資格情報スワップ(ウォーク 1+2)task->cred = fake_cred および task->real_cred = fake_cred(uid=0、caps FULL、スプレーページ上の自己完結型フェイク user_namespace。両方の書き込みが必要 — exec 時の commit_creds() は cred == real_cred でない限り BUG_ON する)
root バッテリーraw システムコールのみのプローブ(uid/SELinux//proc/1//dev/kmsg/wifi/packages//data/data/kallsyms)を /data/local/tmp/.ghostlock_out に出力
root シェルexecve("/system/bin/sh") — exec パス内の commit_creds が fake_cred をクリーンな slab 資格情報にコピーする。計画されたすべての消去が完了したことを条件とする

主要な革新

  • SIGUSR1 walk-before-cleanup: SEQPACKET オーバーレイは futex 待機を中断するシグナルハンドラ内で実行されるため、PI チェーンの走査は futex クリーンアップ経路がスプレーページのスピンロックを競合する前に発火します(MCS qspinlock のウェッジを排除)
  • 1 回の回収から 3 回の書き込み(モード 7): SELinux-off + cred + real_cred はすべて同一ページオーバーレイのリトライラウンドを介して同じ回収済みページに対して発火し、nice ラダーのちょうど 3 段を消費します — ヒープ回収のサイコロはチェーン全体で 1 回だけ振られます
  • ゼロ書き込みによる SELinux 無効化: rb_right = 0 を伴う rb_erase プリミティブは、任意のカーネルアドレスに対して単一のクリーンな 8 バイトゼロストアを実行します(サイドストアなし、不正なデリファレンスなし)。selinux_state の最初の qword をゼロ化すると二重パーミッシブ(enforcing=0 + !initialized → allow-all)になり、カーネル SID にもかかわらず root 取得後のすべてのファイル I/O がブロック解除されます
  • デバイス側のシンボル検証: オフセットテーブルは参照用 vmlinux から取得されますが、デバイスのカーネルは異なるツールチェーンでビルドされています — ブラインド SELinux 書き込みの前に、エクスプロイトは perf を用いて稼働中の security_capable() 経路から &init_user_ns をリークし、kaslr_base + off_init_user_ns と一致しない限り cred のみのフローへ中止します
  • 偽の user_namespace: スプレーページ上に自己完結した名前空間を構築し、identity の uid/gid マップと ucounts = NULL を持たせます -- cap_capable は最初のイテレーションで一致し、inc_rlimit_ucounts は 1 回のループで終了するため、&init_user_ns をリークする必要がなくなります
  • TID ゲート付き perf サンプリング: PERF_SAMPLE_TID フィルタにより、呼び出し元スレッドのレジスタスナップショットのみがカウントされ、ホットなシステムサービスがモード投票を支配するのを防ぎます

ターゲット

  • デバイス: Chromecast with Google TV(sabrina)、Amlogic S905X3(4x A55)、2 GB RAM
  • カーネル: 5.15.170-android14-11-gf4a1f03072af(aarch64、PGO+BOLT+LTO、clang 17.0.2)
  • Android: 14、ビルド UTTC.250917.004、セキュリティパッチ 2025-10-01
  • 設定: CONFIG_FUTEX_PI=y、CONFIG_IO_URING=y、perf_event_paranoid=-1、SELinux enforcing、panic_on_oops=1、ユーザー名前空間なし

ビルド

export ANDROID_NDK_HOME=/path/to/android-ndk
make -j$(nproc)

Android NDK が必要です(r27 でテスト済み)。静的にリンクされた aarch64 バイナリを生成します。

使用方法

adb push ghostlock /data/local/tmp/
adb shell "cd /data/local/tmp && ./ghostlock --cred"

エクスプロイトは約25秒かかります(KASLR/タスク/レイアウトのリーク + ヒープスプレー + KernelSnitchのブルートフォース + 3秒のオーバーレイを3ラウンド)。成功すると、rootバッテリーを /data/local/tmp/.ghostlock_out に、マーカーを /data/local/tmp/.ghostlock_root に書き込み、寛容なカーネル下で uid=0 の /system/bin/sh を exec します。

環境変数による調整:

  • GHOST_SELINUX=0 — SELinux書き込みをスキップし、実績のあるcredのみのルート(モード6)を実行
  • GHOST_SELINUX_FORCE=1 — デバイスのシンボルレイアウト検証が失敗してもSELinux書き込みを有効化
  • GHOST_EXEC=0 — バッテリーを書き込んでシェルをexecする代わりに exit(99) する
  • CRED_ATTEMPTS=n — 実行がreclaimを逃した場合のフルスプレー再試行回数(デフォルト3)

著者

このエクスプロイトは Claude Opus 4.6(Anthropic)によって GLM-5.3(Z.ai)をカーネルエクスプロイトコンサルタントとして迎えて移植・開発されました。

参考文献

  • CyberMeowfia / IonStack -- この移植の元となったNebuSecによるオリジナルのGhostLockエクスプロイト
  • ghostlock-oneplus -- GhostLockのOnePlus/Pixel向け適応版
  • KernelSnitch -- futexハッシュ衝突を利用してカーネルヒープアドレスをリークするタイミングサイドチャネル(Grussら、TU Graz)
  • CVE-2026-43499 -- futex PIのuse-after-free脆弱性
  • Linuxカーネル5.15ソース -- kernel/futex/、kernel/locking/rtmutex.c、lib/rbtree.c

免責事項

このエクスプロイトはセキュリティ研究および教育目的で公開されています。対象は研究者が所有するデバイスです。所有していないデバイス、または許可なく使用しないでください。

ライセンス

MIT

ツールをダウンロード