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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cve-2026-43499 — PD2229Bの43499(ghostlock)実現可能性調査 | Kitploit
ツール/GitHubGitHub/catxiaoshi/cve-2026-43499
Androidセキュリティ特権昇格脆弱性分析エクスプロイトリバースエンジニアリングモバイルセキュリティバイナリエクスプロイト
GitHubcatxiaoshi/cve-2026-43499

cve-2026-43499

PD2229Bの43499(ghostlock)実現可能性調査

リポジトリを見る
692ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
# GhostLock の PD2229 (SM8475, 5.10.233 GKI) における悪用失敗のまとめ


## 一、脆弱性とデバイスの事実

### 1.1 CVE-2026-43499 (GhostLock) 基本情報

| 項目 | 値 |
|---|---|
| 脆弱性タイプ | rt_mutex / futex PI パスにおける**スタック上の Use-After-Free** |
| 導入バージョン | Linux 2.6.39-rc1 (2011年5月、commit 8161239a8bcc) |
| 修正バージョン | メインライン 7.1 (commit 3bfdc63936dd)、各安定ブランチ: 6.1.175 / 6.6.140 / 6.12.86 / 6.18.27 / 7.0.4 |
| 前提条件 | `CONFIG_FUTEX_PI=y`(主流カーネルではデフォルト有効) |
| CVSS | 7.8 High |
| 悪用安定性 | NebuSec オリジナルチェーン 97%、約 5 秒で root 取得 |
| kernelCTF 報奨金 | $92,337 USD |

**影響を受けるカーネル範囲**:
- 2.6.39 ≤ Linux < 6.1.175 ✅ 影響あり
- 6.2 ≤ Linux < 6.6.140 ✅ 影響あり
- 6.7 ≤ Linux < 6.12.86 ✅ 影響あり
- 6.13 ≤ Linux < 6.18.27 ✅ 影響あり
- 6.19 ≤ Linux < 7.0.4 ✅ 影響あり
- **Android GKI 5.10 はどの修正ブランチにも含まれない** → PD2229 の 5.10.233 は**理論上影響あり**

### 1.2 PD2229 デバイス実測

| 項目 | 値 |
|---|---|
| SoC | Qualcomm SM8475 (Snapdragon 8 Gen 1 Plus) |
| カーネルバージョン | 5.10.233-gki-g6e61de9f5b58 #1 SMP PREEMPT (Nov 24 2025) |
| Android バージョン | 15 (OriginOS 5) |
| コンパイル日時 | 2025/11/25 |
| Android パッチ | 2025/11/01 |
| `CONFIG_FUTEX_PI` | y ✅ |
| `CONFIG_UNMAP_KERNEL_AT_EL0` | y (KPTI 有効) |
| `kptr_restrict` | enforced |
| `CONFIG_IO_URING` | y ✅(vmlinux シンボルで確認、seccomp も `io_uring_setup` をブロックしていない) |


---

## 二、理想的な悪用チェーン vs PD2229 の実際の進捗

### 2.1 NebuSec オリジナルチェーン(x86_64 / Pixel 10 で成功)

```
1. KASLR バイパス     → prefetch timing / PR_SET_MM_MAP auxv
2. UAF トリガー       → 3スレッド PI 依存デッドロック → FUTEX_CMP_REQUEUE_PI が -EDEADLK を返す
3. スタック再利用     → PR_SET_MM_MAP で auxv を waiter スタックフレームにコピー
4. rb_erase 制限付き書き込み → inet6_protos[IPPROTO_UDP] を上書き
5. CEA + ROP          → 制御フロー乗っ取り
6. core_pattern 反転  → root shell (97% 成功率)
```

### 2.2 PD2229 各段階の実際の進捗

| 段階 | ステータス | 説明 |
|---|---|---|
| 1. KASLR バイパス | ✅ **実装済み** | `perf_event_open` + callchain sampling サイドチャネル(OPPO Find X6 Pro 5.15.149 適応方法と同一) |
| 2. UAF トリガー | ✅ **実装済み** | 3スレッド PI デッドロック成功、FUTEX_CMP_REQUEUE_PI が -EDEADLK を返す |
| 3. スタック再利用プリミティブ | ❌ **アーキテクチャ上失敗** | 既知の全 syscall のスタックフレームが waiter と重ならない(詳細は第3節) |
| 4. rb_erase 制限付き書き込み | ❌ ブロック中 | 前提条件未達 |
| 5. inet6_protos 上書き | ❌ 未開始 | 段階 4 に依存 |
| 6. ROP / 制御フロー乗っ取り | ❌ 未開始 | 段階 5 に依存 |
| 7. root shell | ❌ 未開始 | 段階 6 に依存 |

---

## 三、スタック再利用プリミティブの総当たり結果(PD2229 実測)

### 3.1 スタックフレームレイアウトの主要計算

```
futex パスの総深度:
  __arm64_sys_futex    0x90
  + do_futex           0xc0
  + futex_wait_requeue_pi  0x1b0
  = 0x300
waiter 位置 = SYS_SP - 0x300 + 0x20 = SYS_SP - 0x2e0

pselect パス:
  core_sys_select スタックフレーム 0x1c0、stack_fds は sp+0x50
  カバー範囲: SYS_SP - 0x1c0 + 0x50 = SYS_SP - 0x170 から
  waiter (SYS_SP - 0x2e0) との差 0x170 (368 バイト) → 重ならない
```

### 3.2 試行した 17 種のスタック書き込み方法

| # | 方法 | システムコール | PD2229 結果 | 核心的な失敗理由 |
|---|---|---|---|---|
| 1 | `stamp_prctl` | `PR_SET_MM_MAP` | ❌ EPERM | Android がハードにブロック |
| 2 | `stamp_pselect` | `pselect6` (NFDS=320) | ❌ 重ならない | waiter が fd_set の 120B 下 |
| 3 | `stamp_pselect` | `pselect6` (NFDS>336) | ❌ ヒープ割り当て | kvmalloc パス |
| 4 | `stamp_socket` | `MCAST_JOIN_SOURCE_GROUP` | ❌ 書き込み不足 | `lock` フィールドのみ書き込み |
| 5 | `stamp_sendmsg` | `sendmsg` | ❌ waiter から 80B | スタックフレーム 0x90 で深度不足 |
| 6 | `stamp_sendmmsg` | `sendmmsg` | ❌ waiter から 112B | スタックフレーム不足 |
| 7 | `stamp_recvmmsg` | `recvmmsg` | ❌ task/lock をゼロ化 | 0x1d0 スタックフレームが重要ポインタを破壊 |
| 8 | `stamp_process_vm` | `process_vm_writev` | ❌ 重ならない | 子スレッドスタックは独立割り当て |
| 9 | `stamp_keyctl` | `KEYCTL_INSTANTIATE_IOV` | ❌ EOPNOTSUPP | システムコール非対応 + スタックフレーム 0x40 |
| 10 | `stamp_tcp` | `TCP_ZEROCOPY_RECEIVE` | ❌ スタックフレーム不足 | 推定深度が不十分 |
| 11 | `stamp_futex` | `FUTEX_CMP_REQUEUE_PI` 再帰 | ❌ 論理的に不可 | UAF ウィンドウを破壊 |
| 12 | binder ioctl | `BINDER_WRITE_READ` | ❌ EACCES | shell に /dev/binder 権限なし |
| 13 | `poll` | `poll` | ❌ ヒープ割り当て | pollfd がヒープ上 |
| 14 | `epoll_wait` | `epoll_wait` | ❌ フレームが浅すぎ | スタックフレーム 0xE0 |
| 15 | `sched_setattr` | `sched_setattr` | ❌ 深度不足 | スタックフレーム 0xb0 |
| 16 | `timerfd_settime` | `timerfd_settime` | ❌ スタックコピーなし | 大きなスタックバッファなし |
| 17 | `io_uring_register` | `IORING_REGISTER_*` | ❌ **二重失敗** | ①スタックフレームは 0xF0 のみ、`copy_from_user` ターゲットは固定 `sp+0x8`(waiter の `sp+0x1D0` と 424 バイト差);②`io_uring_setup` は seccomp にブロックされていないが(ENOSYS ではなく EFAULT を返す)、スタックレイアウトが不一致 |

**17/17 全て失敗。**

### 3.3 失敗の根本原因

PD2229 の SM8475 5.10 GKI コンパイラ(PGO + LTO + BOLT)が出力するスタックレイアウトにより、`core_sys_select` の `stack_fds` と `futex_wait_requeue_pi` の `rt_mutex_waiter` が**アーキテクチャ上重ならない**。これはコンパイラによって決定される客観的事実であり、悪用テクニックの問題ではない。

JoinChang リポジトリは明確に述べている: "The pselect stack overlay only works when the freed rt_mutex_waiter lands within the user-controllable region of the stack_fds buffer"——PD2229 はこの条件を満たさない。

---

## 四、公開リファレンスリポジトリの比較分析

####  NebuSec/CyberMeowfia — オリジナル悪用フレームワーク
- **リポジトリ**: https://github.com/NebuSec/CyberMeowfia
- **ターゲット**: x86_64 Linux / Pixel 10 (6.x GKI)
- **スタック再利用**: `PR_SET_MM_MAP` で auxv をカーネルスタックにコピー
- **成功率**: 97%、約 5 秒で[root shell]
- **PD2229 への適用性**: ❌ `PR_SET_MM_MAP` は Android で EPERM によりブロック

####  JoinChang/ghostlock-oneplus — OnePlus ロック解除 BL jailbreak
- **リポジトリ**: https://github.com/JoinChang/ghostlock-oneplus
- **検証済みデバイス**:
  - OnePlus Ace 6T (PLR110, SM8845) — 6.12.38 GKI ✅
  - OnePlus 15 (PLK110, SM8845) — 6.12.23 GKI ✅
- **技術的要点**:
  - オフセット自動抽出: kallsyms (28) + BTF (57) + 派生 (9) + 定数 (12) = 103/103
  - pselect スタックオーバーレイ、**SP diff = -64**
  - `PSELECT_SHIFT = -2`
  - 悪用チェーン: futex UAF → waiter 偽装 → pselect でスタック制御 → rb_erase 制限付き書き込み → selinux_state.enforcing=0 → cred を init_cred で上書き
- **明確に不可と宣言**: "Not Feasible (stack layout incompatible)" — pselect stack_fds と waiter が重なるカーネルのみに適用
- **PD2229 への適用性**: ❌ カーネル世代が不一致(6.12 vs 5.10)、かつスタックレイアウトが重ならない

####  p2p3p/GhostLock-for-OnePlus — OnePlus 6.12 完全悪用
- **リポジトリ**: https://github.com/p2p3p/GhostLock-for-OnePlus
- **検証済み**: OnePlus Ace 6T (SM8845, 6.12.38) ✅
- **PD2229 への適用性**: ❌ JoinChang と同様、カーネル世代が不一致

####  YuKongA/ghostlock-oplus — OPPO Find N5/X8
- **リポジトリ**: https://github.com/YuKongA/ghostlock-oplus
- **カーネル**: 6.6.118 GKI
- **PD2229 への適用性**: ❌ カーネル世代が不一致

####  OPPO Find X6 Pro (PGEM10) 適応 — 5.15.149
- **デバイス**: SM8550, 5.15.149-android13, Android 15
- **進捗**: ✅ KASLR バイパス(perf_event_open + callchain sampling);以降の段階は完全な悪用は未公開
- **意義**: **5.15 GKI で KASLR バイパスが可能**であることを証明、ただしスタック再利用段階は未公開検証


####  pubglite55/oppo-ghostlock — OPPO Find N2
- **リポジトリ**: https://github.com/pubglite55/oppo-ghostlock
- **デバイス**: OPPO Find N2 (CPH2413, **SM8475**)
- **カーネル**: **5.10.236**-android12-9-o-g74d132f4467a
- **Android**: 16 (BP2A.250605.015)
- **実装済み**:
  - ✅ Firefox CVE-2026-10702 AAW(Stage 1)
  - ✅ KASLR bypass(kaslr_base を直接計算)
  - ✅ GhostLock FUTEX トリガー(FUTEX_CMP_REQUEUE_PI ret=0)
  - ✅ KernelSnitch mm_struct リーク
  - ✅ sk_buff ヒープスプレー(4/4 send 成功)
  - ✅ IDA Pro 70+ オフセット検証
- **核心的なブロック**:
  > "pselect は waiter 構造を操作できない — NFDS >336 では fd_set がヒープ上;configfs/ashmem は非対応(ashmem SET_NAME は切り詰められる);他の全てのカーネル書き込みパスはブロック(/proc/self/mem, /dev/mem, binder)"
- **PD2229 との関係**: **同一プラットフォーム・同一世代(SM8475, 5.10.236 vs 5.10.233)**、わずか 3 マイナーバージョンの差で、**まったく同じアーキテクチャ上の制約に直面**

####  harry1080/oppo-ghostlock — OPPO Find N2
- **リポジトリ**: https://github.com/harry1080/oppo-ghostlock
- **デバイス**: OPPO Find N2 (CPH2413, SM8475)
- **カーネル**: 5.10.236-android12-9-o-g74d132f4467a
- **Android**: 16 (BP2A.250605.015)
- **コミュニティ公開声明**:
  > "pixel10 で悪用可能なバージョンの pselect stack_fds は rt_waiter とカーネルスタック上でちょうど重なるが、この部分が実際には最も面倒な箇所で、OPPO findN2 のカーネルではこれら 2 つの呼び出しのスタック部分が完全に重ならないか、重なっても制御不能であり、別のスタック制御方法を見つける必要がある。他の制御可能なカーネルスタックを持つシステムコールに切り替えてスタックを構築する必要があり、単純なオフセット適応では成功不可能である。**oppo の rt_waiter は pselect stack_fds と完全に重ならない**"
- **PD2229 との関係**: PD2229 と同じく SM8475 5.10 GKI、**結論は完全に適用**

### 4.3 リファレンスリポジトリ比較総表

| リポジトリ | デバイス | SoC | カーネル | スタック再利用方法 | ステータス | PD2229 への再利用可能性 |
|---|---|---|---|---|---|---|
| NebuSec/CyberMeowfia | Pixel 10 | - | 6.x | `PR_SET_MM_MAP` | ✅ 97% | ❌ Android がブロック |
| JoinChang/ghostlock-oneplus | OnePlus Ace 6T | SM8845 | 6.12.38 | pselect (SP diff=-64) | ✅ 検証済み | ❌ カーネル世代が不一致 |
| p2p3p/GhostLock-for-OnePlus | OnePlus Ace 6T | SM8845 | 6.12.38 | pselect | ✅ 検証済み | ❌ カーネル世代が不一致 |
| YuKongA/ghostlock-oplus | Find N5/X8 | - | 6.6.118 | pselect | ✅ | ❌ カーネル世代が不一致 |
| OPPO Find X6 Pro 適応 | Find X6 Pro | SM8550 | 5.15.149 | perf KASLR + ? | 🟡 KASLR ✅、以降は未公開 | ❌ プラットフォームが異なる |
| **pubglite55/oppo-ghostlock** | **Find N2** | **SM8475** | **5.10.236** | 総当たり失敗 | ❌ 核心ブロック | ⚠️ **同一プラットフォーム・同一世代、運命は同じ** |
| **harry1080/oppo-ghostlock** | **Find N2** | **SM8475** | **5.10.236** | 総当たり失敗 | ❌ アーキテクチャ上不可 | ⚠️ **同一プラットフォーム・同一世代、運命は同じ** |
| **PD2229 (本レポート)** | **PD2229** | **SM8475** | **5.10.233** | **17 種の候補全て失敗** | ❌ **アーキテクチャ上不可** | **—** |

---

## 五、主要カーネルシンボルとオフセット(PD2229 vmlinux 実測)

> 静的ベースアドレス `0xffffffc008000000`、実行時は KASLR slide を加算する必要あり。

| シンボル | アドレス | 用途 |
|---|---|---|
| `rt_mutex_start_proxy_lock` | `0xffffffc00822baa8` | 脆弱性トリガーエントリ |
| `futex_wait_requeue_pi` | `0xffffffc0082d7df4` | waiter 割り当て、スタックフレーム 0x1b0 |
| `__arm64_sys_futex` | `0xffffffc0082dfe9c` | スタックフレーム 0x90 |
| `do_futex` | `0xffffffc0082d0768` | スタックフレーム 0xc0 |
| `core_sys_select` | `0xffffffc008634cf0` | pselect スタックフレーム 0x1c0 |
| `____sys_sendmsg` | `0xffffffc0093eda88` | スタックフレーム 0x90 |
| `do_recvmmsg` | `0xffffffc0093ef49c` | スタックフレーム 0x1d0 |
| `__arm64_sys_io_uring_register` | `0xffffffc008aae328` | スタックフレーム 0x10+0x70 |
| `__io_uring_register` | `0xffffffc008aae5f8` | スタックフレーム 0x80 |
| `inet6_protos` | `0xffffffc00ab0a278` | 段階 4 の書き込みターゲット |
| `selinux_state` | `0xffffffc00aee8c70` | SELinux 無効化ターゲット |
| `init_task` | `0xffffffc00ab0c240` | cred 読み取りソース |

### rt_mutex_waiter 構造体(vivo 5.10.233 カスタム)

```c
struct rt_mutex_waiter {
    uint64_t private;           // +0x00  (vivo プライベートフィールド)
    struct rb_node {
        uint64_t rb_parent_color; // +0x08
        uint64_t rb_right;        // +0x10  (vivo が順序を入れ替え)
        uint64_t rb_left;         // +0x18
    } tree;
    struct task_struct *task;   // +0x20
    struct rt_mutex *lock;      // +0x28
};
// 総サイズ 0x30 (48 バイト)
```

---

## 六、実装済み vs 実装が必要

### ✅ 実装済みのインフラストラクチャ

1. **KASLR バイパス** — `perf_event_open` + callchain sampling(OPPO Find X6 Pro 5.15.149 の方法と同一)
2. **UAF トリガー** — 3スレッド PI デッドロック、FUTEX_CMP_REQUEUE_PI が -EDEADLK を返す
3. **完全なシンボルテーブル** — 103+ シンボルを IDA で検証(JoinChang の 103/103 抽出方法論を参照)
4. **rt_mutex_waiter 構造体レイアウト** — vivo カスタムオフセット確認済み
5. **スタックフレームレイアウトの精密分析** — futex と pselect/io_uring パスの深度計算完了
6. **17 種のスタック再利用候補の総当たり排除** — 完全な「不可」マトリックスを構築

### ❌ 未実装(核心ブロック)

1. **スタック再利用プリミティブ** — SM8475 5.10 GKI コンパイラのスタックレイアウトによりアーキテクチャ上使用不可
2. **制限付き書き込みプリミティブ** — スタック再利用の失敗により rb_erase をトリガーできない
3. **以降の全段階** — 連鎖的にブロック

---

## 七、最終結論

> ⚠️ **GhostLock (CVE-2026-43499) は PD2229 (vivo X Fold+, SM8475, 5.10.233 GKI, Android 15 OriginOS 5) では悪用不可。**
>
> **根本原因は SM8475 5.10 GKI コンパイラ(PGO+LTO+BOLT)が出力するスタックレイアウトにより、既知の全 syscall のスタックフレームが `rt_mutex_waiter` とアーキテクチャ上重ならないこと**。これはコンパイラによって決定される客観的事実であり、悪用テクニックの問題ではない。

**悪用に成功した事例は全て 6.6/6.12 GKI**。これらの新しいカーネルではコンパイラ出力により pselect fd_set と waiter が完全に重なるため(SP diff=-64)。5.10 GKI にはこの条件がない。

---

### 構築済みのインフラストラクチャ
- ✅ KASLR バイパスプリミティブ(perf_event_open サイドチャネル)
- ✅ 103+ カーネルシンボルとオフセット
- ✅ rt_mutex_waiter 構造体レイアウト
- ✅ UAF トリガー能力
- ✅ 17 種のスタック再利用候補の排除マトリックス

## 九、リファレンスリポジトリ索引

| リポジトリ | URL | 重要な価値 |
|---|---|---|
| NebuSec/CyberMeowfia | https://github.com/NebuSec/CyberMeowfia | オリジナル悪用フレームワーク、97% 成功率 |
| JoinChang/ghostlock-oneplus | https://github.com/JoinChang/ghostlock-oneplus | 6.12 GKI 成功適応、103 オフセット抽出方法論 |
| p2p3p/GhostLock-for-OnePlus | https://github.com/p2p3p/GhostLock-for-OnePlus | 6.12 GKI 完全悪用チェーン |
| YuKongA/ghostlock-oplus | https://github.com/YuKongA/ghostlock-oplus | 6.6 GKI OPPO 適応 |
| pubglite55/oppo-ghostlock | https://github.com/pubglite55/oppo-ghostlock | **SM8475 5.10.236 同一プラットフォーム失敗の参照** |
| harry1080/oppo-ghostlock | https://github.com/harry1080/oppo-ghostlock | **SM8475 5.10.236 同一プラットフォーム失敗の参照** |
| NebuSec 技術分析 | https://nebusec.ai/research/ionstack-part-2/ | GhostLock オリジナルチェーンの技術詳細 |
| アップストリーム修正 | commit 3bfdc63936dd | 修正コード |

---
ツールをダウンロード