clogan9019-dotcom/IOHIDFamily-PoC-Research
GitHub: clogan9019-dotcom/IOHIDFamily-PoC-Research
针对 CVE-2026-28992 的安全研究项目,提供两个 PoC 演示 iOS IOHIDFamily FastPathUserClient 中的竞态条件漏洞(UAF 与 AOP 看门狗超时)。
Stars: 0 | Forks: 0
# CVE-2026-28992 — IOHIDFamily FastPathUserClient PoC
安全研究仓库。包含两个 PoC 应用,用于演示在 iOS 18.7.1 及更早版本中 `IOHIDFamily` 的 `FastPathUserClient` 存在的竞态条件。
## 漏洞概述
| 字段 | 详情 |
|-------|--------|
| **CVE** | CVE-2026-28992 |
| **组件** | IOHIDFamily — `IOHIDEventServiceFastPathUserClient` |
| **类型** | 内存损坏(竞态条件 / UAF) |
| **可触达性** | 普通应用沙盒,**无需任何 entitlement** |
| **修复版本** | iOS 18.7.9 / iOS 26.5 |
| **研究员** | Johnny Franks (@zeroxjf) |
### 根本原因
`sel0` (open/gate) 在**调用方提供的 OSDictionary** 中检查 `FastPathHasEntitlement` 和 `FastPathMotionEventEntitlement`,而不是检查在 `initWithTask` 期间存储的 entitlement 标志。沙盒应用只需在其输入字典中包含这些键即可通过门控检查。由此衍生出两个攻击向量:
## UAFPoc — Use-After-Free
`UAFPoc/UAFPoc.xcodeproj`
**竞态条件:** `close` (sel1) 在没有加锁的情况下释放 provider 状态并清除偏移量 `+0x109`。`copyEvent` (sel2) 在每连接锁的保护下检查偏移量 `+0x108`,然后调用 provider。到同一个 provider 的多个连接意味着 close 和 copyEvent 在相同的共享 provider 端对象上运行在**不同的锁域**中。
**崩溃类型:**
- A17+ (MTE):内核 MTE 标签检查错误
- Pre-A17:内核数据中止
## AOPPanicPoc — AOP 协处理器看门狗
`AOPPanicPoc/AOPPanicPoc.xcodeproj`
**竞态条件:** `mach_port_destroy` 触发异步的 `didTerminate → teardown`,未与其他连接上并发的 `sel0` 打开路径同步。Teardown 释放了面向 provider 的状态,而 opener 线程仍在对其进行遍历。此外,它还会使 SPU 支持的 provider 的 mailbox 饱和 → 导致 AOP 看门狗超时。
## 如何构建与 Sideload
### 前置条件
- macOS 且安装有 Xcode 15+
- Apple Developer 账户(免费层级即可进行 sideload)
- 运行 iOS 18.7.1 的 iPhone 16e(或任何运行 iOS 15.0–18.7.8 / 26.0–26.4.x 的设备)
### 步骤
```
git clone https://github.com/clogan9019-dotcom/IOHIDFamily-PoC-Research.git
cd IOHIDFamily-PoC-Research
```
**UAF 变体:**
1. 在 Xcode 中打开 `UAFPoc/UAFPoc.xcodeproj`
2. 在顶部栏选择您的设备
3. 在 Signing & Capabilities 中设置您的 Team(使用您的 Apple ID 即可)
4. Product → Run (⌘R) — Xcode 将直接安装并启动它
**AOP 变体:**
1. 在 Xcode 中打开 `AOPPanicPoc/AOPPanicPoc.xcodeproj`
2. 相同的签名步骤
3. Product → Run (⌘R)
### 获取崩溃日志
设备重启后:
1. 连接到 Mac
2. 打开 Xcode → Window → Devices and Simulators → View Device Logs
3. 找到最近的 `Panic` 日志(`.ips` 文件)
4. 将其保存到 `panic-logs/` 并提交以供分析
或者通过终端:
```
# 重启后,拉取日志
idevicecrashreport -u ./panic-logs/
```
## 在崩溃日志中查找什么
在 **A18 (iPhone 16e)** 上,您应该会看到以下情况之一:
- `MTE tag check fault` — UAF 变体释放并重新分配了带标签的堆对象
- `AOP watchdog timeout` — AOP 变体使 SPU mailbox 饱和
需要注意的关键字段:
```
Kernel version: Darwin Kernel Version ...
Hardware Model: iPhone17,5
panic(cpu N ...):
Backtrace:
... IOHIDEventServiceFastPathUserClient ...
```
回溯中的函数名将准确告诉您是哪条代码路径触发了崩溃。
## 披露时间线
| 日期 | 事件 |
|------|-------|
| 未知 | Johnny Franks (@zeroxjf) 发现漏洞 |
| 2026 年 5 月 11 日 | 在 iOS 18.7.9 / iOS 26.5 中修复 |
| 2026 年 6 月 21 日 | 公开 PoC 代码发布 |
## 向 Apple 报告
未修补的变体或相关漏洞可通过以下网址报告:
**https://security.apple.com/submit**
对于内核漏洞:请描述组件、复现步骤、崩溃类型,并附上 `.ips` 崩溃日志。
## iOS 18.7.1 上的相关 CVE
| CVE | 组件 | 18.7.1 上的状态 |
|-----|-----------|-----------------|
| CVE-2025-43510 | AppleM2ScalerCSCDriver (DarkSword Stage 5) | 未修复(在 18.7.2 中修复) |
| CVE-2026-28992 | IOHIDFamily FastPathUserClient | **未修复**(在 18.7.9 中修复) |
| CVE-2026-43655 | AppleM2ScalerCSCDriver OOB read | **未修复且从未向后移植到 18.x** |
| CVE-2026-20687 | Kernel UAF → write kernel memory | 未修复(在 18.7.7 中修复) |
*仅用于教育和负责任的披露目的。*