
OPPO Find X6 Pro GhostLock (CVE-2026-43499) エクスプロイト適応
本プロジェクトでは、OPPO Find X6 Pro (PGEM10) 上での CVE-2026-43499 (GhostLock) 脆弱性の適応研究を行います。
NebuSec CyberMeowfia のオリジナル exploit アーキテクチャに基づき、oppo-ghostlock の適応アプローチを参考にしています。
| 項目 | 値 |
|---|---|
| デバイス | OPPO Find X6 Pro (PGEM10) |
| チップ | Snapdragon 8 Gen 2 (SM8550) |
| カーネル | Linux 5.15.149-android13 #1 SMP PREEMPT |
| ビルド日 | Thu Feb 13 2025 |
| Android | 15 (ColorOS 15.0) |
| ROM バージョン | PGEM10_15.0.0.600(CN01) |
| PAC | CONFIG_ARM64_PTR_AUTH_KERNEL=y |
| BTI | CONFIG_ARM64_BTI_KERNEL=y |
| KASLR | CONFIG_RANDOMIZE_BASE=y |
| VA_BITS | 39 |
| VA オフセット | P0_PAGE_OFFSET = 0xffffff8000000000 |
| モジュール | 状態 | 説明 |
|---|---|---|
| Perf KASLR bypass | ✅ | 核心的ブレイクスルー — perf_event_open + callchain サンプリングにより、<1s で現在の KASLR slide を取得 |
| MM_STRUCT_SZ 修正 | ✅ | 0x500 から 0x400(1024B)に修正、KernelSnitch が即座に成功 |
| IDA オフセット全検証 | ✅ | すべてのキーシンボル/構造体/関数を IDA でクロス検証済み |
| FUTEX_CMP_REQUEUE_PI | ✅ | GhostLock UAF トリガー成功 |
| ashmem 検証 | ✅ | C ashmem 使用可能、type confusion パスは理論上有効 |
| 呼び出しチェーン分析 | ✅ | カーネル内に深さ ≥ 0x800 の呼び出しチェーンが存在しないことを確認 |
| カーネル構成スキャン | ✅ | 完全な攻撃面評価 |
| モジュール | 状態 | 根本原因 |
|---|---|---|
| SLIDE スタックオーバーライド | ❌ | PAC により futex チェーンスタックフレームが 0xA70 に膨張、pselect は 0x620 のみ |
| fops オーバーライド | ❌ | SLIDE が必要、PAC が阻止 |
| type confusion | ❌ | fops オーバーライドに依存 |
| Pipe physrw | ❌ | type confusion に依存 |
| Root | ❌ | 上記チェーンに依存 |
oppo-pgem10-ghostlock/
├── README.md # 本文件
├── 问题描述.md # 详细问题分析
├── docs/
│ ├── architecture.md # 架构设计与调用链
│ └── adaptation-guide.md # PAC 内核适配指南
├── reports/
│ ├── offsets.md # IDA 偏移验证报告
│ ├── kaslr.md # KASLR 分析报告
│ └── summary.md # 最终总结
├── src/
│ ├── kaslr_perf.h # Perf KASLR 可复用模块
│ └── kaslr_perf.c # Perf KASLR 实现
└── analysis/
└── chains/ # 调用链分析脚本
CONFIG_ARM64_PTR_AUTH_KERNEL=y # ← 核心差异:PAC 直接导致帧膨胀
CONFIG_ARM64_BTI_KERNEL=y # BTI 进一步增加开销
CONFIG_SHADOW_CALL_STACK=y # SCS 增加栈帧
CONFIG_VMAP_STACK=y # 栈可重映射
CONFIG_KASAN_HW_TAGS=y # 编译启用
CONFIG_ARM64_VA_BITS=39 # 39位VA(非48位)
関数 Pixel 10 (PACなし) PGEM10 (PACあり)
__arm64_sys_futex 0x90 0x4C0
do_futex 0x70 0x420
futex_wait_requeue_pi 0x1A0 0x1B0
─────────────────────────────────────────────────
futex チェーン総深さ 0x300 0xA70 ← 3.5倍
pselect スタック深さ 0x620 0x620
オーバーライド可能? ✅ YES ❌ NO (0xA70 > 0x620)
呼び出しチェーン分析により確認:カーネル内に 0 件 の深さ ≥ 0x800(2048B)の呼び出しチェーン。 最大単一フレーム:0x1F0(496B)。