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 中修复) | *仅用于教育和负责任的披露目的。*