
Samsung Galaxy A17 における CVE-2026-43499 のカーネルエクスプロイト。KDPバイパス、KASLR復元、偽造workqueue実行によりroot権限を取得し、永続的なシェルを実現します。
Samsung Galaxy A17 SM-A175F(Android 16 / GKI 6.12 搭載)向けの、CVE-2026-43499("GhostLock") のユーザーから root への完全なエクスプロイトチェーンです。
このチェーンは公開されている GhostLock プリミティブから始まり、以下の権限で実行されるユーザーモードヘルパーで終わります:
uid=0(root) gid=0(root) groups=0(root)
context=u:r:kernel:s0
また、g4d / g4sh を介して起動ごとに永続化される root シェルを開始し、カーネルパニックなしで終了します。
📖 完全な技術解説:
https://www.mobilehackinglab.com/blog/cve-2026-43499-ghostlock-a17-root-shell
研究上の注記
私たちは CVE-2026-43499 を発見したわけではありません。元の脆弱性および IonStack リサーチの功績は Nebula Security に帰属します。
このリポジトリは、Samsung Galaxy A17 への独立したポート、Samsung のカーネル保護のために必要だった変更、および新しい最終エクスプロイト段階を文書化したものです。
許可されたセキュリティ研究および教育目的のみに使用してください。
| CVE | CVE-2026-43499 — "ghostlock" |
| デバイス | Samsung Galaxy A17 (SM-A175F, mt6789) |
| GPU | Mali-G57 |
| カーネル | 6.12.23-android16-5-abA175FXXS3BZA5-4k |
| 結果 | uid=0(root) / u:r:kernel:s0 |
| ルートシェル | g4d デーモン + g4sh クライアント |
| 永続性 | 起動ごと |
| エクスプロイト終了 | クリーン、カーネルパニックなし |
| 遭遇した緩和策 | Samsung KDP、DEFEX、SELinux、PANIC_ON_OOPS、arm64 KASLR |
元の ghostlock リサーチは、最初のエントリプリミティブを提供します:
pselect reclaim
↓
fake rt_mutex_waiter
↓
constrained rb-tree pointer write
しかし Galaxy A17 では、標準的な credential パッチ方式の最終段階は機能しません。
KDP は EL2 で credential 関連のカーネルデータを保護します。
このビルドでは、ターゲットアドレスが正しい場合でも、タスクの credential を変更する試みは静かに破棄されました。
そのため、このポートは root credential を書き込む 代わりに、カーネルに 既存の特権 credential で実行させる ようにしています。
最終段階:
constrained kernel write
↓
physical read/write channel
↓
KASLR slide recovery
↓
discover system_wq / cpu_pwq
↓
forge work_struct
↓
call_usermodehelper_exec_work
↓
/system/bin/sh
↓
uid=0(root), u:r:kernel:s0
偽造した work アイテムは、bound された system_wq プールに配置され、ptmx の確保/解放ストームによってトリガーされます。
その結果、ユーザーモードヘルパーが init の credential で実行されます。
タスクの credential の上書きは一切不要です。
userspace shell (uid 2000)
│
▼
pselect / PI-futex primitive
│
▼
constrained aligned kernel pointer write
│
▼
forged pipe_buffer channel
│
▼
arbitrary physical read/write
│
├── recover KASLR slide
│
├── locate system_wq / cpu_pwq
│
└── prepare forged work_struct
│
▼
queue usermode-helper work
│
▼
ptmx storm wakes worker
│
▼
/system/bin/sh runs with init creds
│
▼
uid=0(root)
│
▼
g4d → @ghostlockd → g4sh
公開されている OnePlus ポートと比較して、最初の書き込みプリミティブ以降のほとんどの段階が作り直されています。
credential パッチ方式の最終段階は、ユーザーモードヘルパーの実行パスをターゲットにした偽造 workqueue アイテムに置き換えられました。
これにより、保護された cred 構造体への書き込みを完全に回避できます。
以前の perf-event アンカリング手法は、このデバイスでは信頼性が低いものでした。
代わりに、このエクスプロイトは boot_id の ctl_table エントリにある 3 つのスライドされたポインタを使用します:
procname
data
proc_handler
3 つすべてを相互検証してから、スライドとして採用します。
cpu_pwq は、固定のデバイス固有オフセットに依存するのではなく、次のように走査して発見されます:
system_wq → pwqs
元のチャネルは struct page の状態に付随する変更を残すため、ティアダウン中に PANIC_ON_OOPS を引き起こす可能性があります。
現在のチェーンはティアダウン時のクラッシュを回避し、root 取得後にクリーンに終了することが実証されています。
ユーザーモードヘルパーが次のものを起動します:
g4d
これは abstract Unix ソケットで待ち受けます:
@ghostlockd
g4sh はこのソケットに接続し、対話型の root シェルまたはワンショットのコマンド実行を提供します。
/data/local/tmp/a/g4sh
/data/local/tmp/a/g4sh -c "id"
このターゲットは、一般的な Android カーネルエクスプロイト技術を無効化する複数の保護を組み合わせています:
このため、通常とは異なるエクスプロイト戦略を余儀なくされました:
arbitrary RW → patch cred → disable SELinux
代わりに:
arbitrary RW → recover runtime state → forge kernel work → execute usermode helper
最近の Android NDK が必要です。
make
生成物:
ghostlock # exploit
g4d # static root-shell daemon
g4sh # root-shell client
バイナリをプッシュします:
adb push ghostlock /data/local/tmp/a/g4
adb push g4d /data/local/tmp/a/g4d
adb push g4sh /data/local/tmp/a/g4sh
adb shell 'chmod 755 /data/local/tmp/a/g4 /data/local/tmp/a/g4d /data/local/tmp/a/g4sh'
再起動に対応したエクスプロイトループを実行します:
./scripts/rr_loop4.sh
ROOTED と表示された後:
adb shell /data/local/tmp/a/g4sh
または、単一のコマンドを実行します:
adb shell '/data/local/tmp/a/g4sh -c "id"'
期待される結果:
uid=0(root) gid=0(root) groups=0(root) context=u:r:kernel:s0
このプリミティブは確率的であり、起動状態に強く依存します。
エクスプロイトの成功には繰り返しの試行が必要な場合があります。同梱の rr_loop4.sh スクリプトが、リトライと再起動サイクルを自動的に処理します。
これは研究用エクスプロイトであり、即座に root 化できるワンショットツールではありません。
qemu-e2e/ には、抽出した Samsung カーネルを使用したエンドツーエンドの検証ハーネスが含まれています。
このハーネスは以下のテストに使用されました:
g4d / g4sh のラウンドトリップSamsung のカーネルイメージ自体は含まれていません。
セットアップ手順については、以下を参照してください:
qemu-e2e/
Makefile
src/ exploit source and device profiles
src/daemon/ g4d root daemon + g4sh client
docs/OFFSETS.md validated device offsets
docs/PORTING.md porting notes
examples/ proof-of-root artifacts
scripts/rr_loop4.sh reboot-aware exploit loop
qemu-e2e/ end-to-end QEMU validation
NebuSec:
https://nebusec.ai/research/ionstack-part-3/
https://github.com/NebuSec/CyberMeowfia/tree/main/IonStack
https://github.com/JoinChang/ghostlock-oneplus
Samsung Galaxy A17 ポート、KDP の制限、KASLR の復元、workqueue ベースの最終段階、そして root シェルの実装について詳しく解説しています:
https://www.mobilehackinglab.com/blog/cve-2026-43499-ghostlock-a17-root-shell
実機での成果物は以下にあります:
examples/
エクスプロイトのログや root コンテキストの検証結果が含まれます。
例:
uid=0(root)
gid=0(root)
groups=0(root)
context=u:r:kernel:s0
この PoC(概念実証)は、教育および許可されたセキュリティ研究目的のみ で提供されています。
所有している、または明示的なテスト許可を得ているデバイスと環境でのみ使用してください。