
# CVE-2026-65343 PoC — قراءة خارج الحدود في AppleKeyStore → كسر KASLR (iOS 26.6 / 23G71)
المكوّن: امتداد النواة AppleKeyStore — _LibSer_SEPControl_Deserialize
المتأثر: iOS / iPadOS 26.6 (23G71) والإصدارات الأقدم
تم الإصلاح في: iOS / iPadOS 26.6.1 (23G83)
النوع: قراءة خارج الحدود في إلغاء تسلسل رسائل تحكم SEP
الأثر: تسريب مؤشرات النواة ← كسر KASLR من عملية معزولة (sandboxed) بدون صلاحيات (عبر التقاط مقبض ACM باستخدام DYLD_INTERPOSE)
اكتشفها: Drinor Selmanaj (Sentry)، Surya Narayan Kushwaha
(وفق نشرة Apple الأمنية — iOS 26.6.1)
يقوم _LibSer_SEPControl_Deserialize في امتداد نواة AppleKeyStore بنشر زوج (payload_ptr, declared_length) من مخزن رسائل ACM (Credential Manager) إلى مساحة المستخدم عبر ، .
copyout()declared_length ≤ remainingبتزويد declared_length = 0x800، ينسخ السائق حوالي 0x7E8 بايتًا بعد نهاية مخزن رسائل ACM في النواة — ليقرأ من تخصيصات كومة (heap) مجاورة في النواة. تحتوي تلك المناطق المجاورة على مؤشرات نواة (0xfffffff0xxxxxxxx) يمكن استخدامها لحساب إزاحة KASLR.
; _LibSer_SEPControl_Deserialize (المسار المتأثر، 26.6 / 23G71)
ldr w2, [acm_msg + declared_length_offset] ; 0x800 يتحكم به المستخدم
; لا يوجد تحقق: w2 <= (acm_msg_end - payload_ptr) ← مفقود
bl copyout ; ينسخ w2 بايت إلى مساحة المستخدم
الوصول المباشر إلى IOServiceOpen("AppleKeyStore") محظور بواسطة الحماية (sandbox) على التطبيقات المثبتة جانبيًا (sideloaded). ومع ذلك، فإن مسار توقيع المفاتيح في Secure Enclave عبر Security.framework يستدعي IOConnectCallMethod داخل العملية بمقبض جلسة ACM حقيقي.
يستخدم إثبات المفهوم (PoC) خطاف __DATA,__interpose (الذي يعمل عند تحميل dyld، قبل جعل __DATA_CONST للقراءة فقط — fishhook محظور على iOS 26 بسبب حماية DATA_CONST):
SecKeyCreateRandomKey(kSecAttrTokenIDSecureEnclave) ← SecKeyCreateSignature() ← استدعاء IOConnectCallMethod داخل العملية بمقبض ACM حقيقي(conn, handle[16])declared_length = 0x800 عبر 163 محدد AKS0xfffffff0xxxxxxxx ← حساب إزاحة KASLRpoc_aks_oob.m ينفذ سلسلة التقاط مقبض ACM الكاملة وسلسلة استكشاف القراءة خارج الحدود:
kSecAttrAccessibleAfterFirstUnlock، بدون قياسات حيوية)declared_length = 0x800 عبر جميع محددات AKS الـ 163KPTR @+XXXX = 0xfffffff0YYYYYYYYإذا تم توجيه توقيع مفتاح SE عبر XPC الخاص بـ secd بدلاً من داخل العملية، يستخدم الاستكشاف الاحتياطي مقبضًا صفريًا (يؤكد إمكانية الوصول إلى مسار OOB؛ ستفشل جميع المحددات في التحقق من ACM، لكن مسار VNOP مؤكد).
على iOS 26، يتم تعيين __DATA_CONST (الذي يحتوي على GOT) للقراءة فقط قبل تشغيل أي كود داخل العملية. كتابات GOT في وقت التشغيل (كما يستخدمها fishhook) تؤدي إلى KERN_PROTECTION_FAILURE → SIGBUS. يعمل DYLD_INTERPOSE عبر __DATA,__interpose لأن dyld يعالج جدول الـ interpose عند وقت تحميل الصورة، قبل أن تفرض النواة حماية __DATA_CONST.
kSecAttrTokenIDSecureEnclave) — متاح لأي تطبيق مثبت جانبيًا بدون صلاحياتSecurity.framework قد يستدعي استدعاء AKS IOKit
داخل العملية (يعتمد على الجهاز وإصدار iOS). في بعض الإعدادات يتم توجيه الاستدعاء عبر XPC الخاص بـ secd
بدلاً من ذلك — في هذه الحالة يؤكد الاحتياطي ذو المقبض الصفري إمكانية الوصول إلى مسار OOB لكنه لا يحقق كسر KASRL الكامل.# مشروع Xcode — اربط Security.framework و Foundation.framework
clang -arch arm64 \
-isysroot $(xcrun --sdk iphoneos --show-sdk-path) \
-framework Security -framework Foundation \
-o poc poc/poc_aks_oob.m
codesign -s "Apple Development" --entitlements ent.plist poc
الحد الأدنى من الصلاحيات (ent.plist):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
<key>keychain-access-groups</key>
<array><string>$(AppIdentifierPrefix)com.research.poc65343</string></array>
</dict></plist>
| التاريخ | الحدث |
|---|---|
| 2026-08-17 | إصدار iOS 26.6.1 مع الإصلاح |
| 2026-08-17 | نشر اعتمادات Apple في النشرة الأمنية |