
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 |
| root シェル | g4d デーモン + g4sh クライアント |
| 永続化 | 起動ごと |
| エクスプロイトの終了 | クリーン、カーネルパニックなし |
| 遭遇した緩和策 | Samsung KDP、DEFEX、SELinux、PANIC_ON_OOPS、arm64 KASLR |
| 対応ファームウェア | A175FXXS3BZA5 (カーネル 6.12.23) および A175FXXS6CZG1 (カーネル 6.12.38、SPL 2026-07-05) — いずれも実機で検証済み、同一チェーン |
元の ghostlock 研究は侵入プリミティブを提供します:
pselect reclaim
↓
fake rt_mutex_waiter
↓
constrained rb-tree pointer write
しかし Galaxy A17 では、標準的な認証情報パッチによる最終段階が機能しません。
KDP は EL2 で認証情報に関連するカーネルデータを保護します。
このビルドでは、対象アドレスが正しくても、タスク認証情報を変更しようとする試みは黙って破棄されました。
そのため、この移植版では root 認証情報を書き込む 代わりに、カーネルを 既存の特権認証情報で実行させる ようにしています。
最終ステージ:
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
偽造されたワークアイテムがバインドされた system_wq プールに配置され、ptmx の割り当て/解放ストームによってトリガーされます。
その結果生じるユーザーモードヘルパーは init の資格情報で実行されます。
タスクの資格情報の上書きは不要です。
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向けポートと比較して、初期の書き込みプリミティブ以降のほとんどのステージが作り直されています。
資格情報を書き換える最終段階は、usermode-helper実行パスを標的とした偽造workqueueアイテムに置き換えられました。
これにより、保護されたcred構造体への書き込みを完全に回避します。
以前のperf-eventアンカリング手法は、このデバイスでは信頼性が低いものでした。
代わりに、このエクスプロイトではboot_idのctl_tableエントリから得られる3つのスライド済みポインタを使用します:
procname
data
proc_handler
3つすべてがスライドを受け入れる前に相互検証されます。
cpu_pwq は以下を辿ることで検出されます:
system_wq → pwqs
固定されたデバイス固有のオフセットに依存するのではなく。
元のチャネルは、ティアダウン中に PANIC_ON_OOPS を引き起こす可能性のある struct page 状態への副次的な変更を残します。
現在のチェーンはティアダウン時のクラッシュを回避し、root 取得後にクリーンに終了することが実証されています。
ユーザーモードヘルパーが起動します:
g4d
抽象 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 # BZA5 firmware (kernel 6.12.23)
make czg1 # CZG1 firmware (kernel 6.12.38): per-target slide anchors,
# offsets are uname-keyed at runtime
生成内容:
ghostlock # exploit (ghostlock-czg1 for the CZG1 build)
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
この概念実証は、教育および許可されたセキュリティ研究の目的のみに提供されています。
ご自身が所有している、またはテストの明示的な許可を得ているデバイスおよび環境でのみ使用してください。