zeroxjf/AppleKeyStore-close-UAF
GitHub: zeroxjf/AppleKeyStore-close-UAF
AppleKeyStoreUserClient close()方法的UAF漏洞PoC及补丁diff分析,演示了IOKit服务中多线程竞态条件导致的内核恐慌问题。
Stars: 23 | Forks: 7
# AppleKeyStoreUserClient close() UAF
PoC 由 [@zeroxjf](https://x.com/zeroxjf) 提供
**这会导致您的设备发生内核恐慌。请保存您的工作。**
在 iOS 26.2.1 (23C71) 上测试。已在 iOS 26.3 RC (23D125) 中修复。
## 触发原理
`IOServiceClose` 同步调用 `terminate()`,但保持 Mach port 处于存活状态。随后工作循环(workloop)异步执行 `close()`,从而释放门控(gate)。与此同时,竞争线程通过仍然存活的端口大量发起 `IOConnectCallMethod` 调用——它们的 `externalMethod()` 调用会在单独的 MIG 线程上对已释放的门控进行解引用。
```
Racers (32 threads): Trigger:
IOConnectCallMethod(conn, 10) IOServiceClose(conn)
IOConnectCallMethod(conn, 10) -> terminate() [sync]
IOConnectCallMethod(conn, 10) -> returns to userland
|
| port still alive Workloop (async):
| close() -> frees gate
v this+272 dangles
externalMethod()
-> *(this+272) -> FAULT Finalization (later):
port mapping removed
```
## 内核恐慌
```
panic(cpu 1 caller 0xfffffe00503c08e0): Kernel tag check fault
(expected tagged address: 0xf6fffe205d518d88)
at pc 0xfffffe00502c34e0, lr 0xfffffe00502c3418
Panicked task: pid 17598: UAFTester
Kernel Extensions in backtrace:
com.apple.driver.AppleSEPKeyStore(2.0)
```
## 构建与运行
1. 在 Xcode 中打开 `PoC/UAFTester.xcodeproj`
2. 选择您的 iOS 设备(需要 iOS < 26.3 RC 版本)
3. 构建并运行
4. 点击按钮
标签:0day, AppleKeyStore, IOKit框架, iOS26, iOS安全, iOS漏洞, Kernel Panic, Mach端口, macOS安全, PoC, UAF, UML, Xcode, XNU内核, 内核崩溃, 内核漏洞, 拒绝服务, 暴力破解, 漏洞分析, 竞态条件, 越狱研究, 路径探测, 释放后重用