
إثبات المفهوم لـ CVE-2026-65343، قراءة خارج الحدود في AppleKeyStore تُسرّب مؤشرات النواة لكسر KASLR على iOS 26.6. يتضمن التقاط مقبض ACM عبر DYLD_INTERPOSE وفحصًا عبر محددات AKS.
المكوّن: امتداد النواة 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 ← حساب إزاحة KASLRينفّذ poc_aks_oob.m سلسلة التقاط مقبض ACM الكاملة وسلسلة استكشاف القراءة خارج الحدود:
kSecAttrAccessibleAfterFirstUnlock، بدون قياسات حيوية)declared_length = 0x800 عبر جميع محددات AKS الـ 163KPTR @+XXXX = 0xfffffff0YYYYYYYYإذا تم توجيه توقيع مفتاح SE عبر XPC الخاص بـ secd بدلاً من داخل العملية، يستخدم الاستكشاف الاحتياطي مقبضًا صفريًا (يؤكد إمكانية الوصول إلى مسار القراءة خارج الحدود؛ ستفشل جميع المحددات في التحقق من ACM، لكن مسار VNOP مؤكد).
على iOS 26، يتم تعيين __DATA_CONST (الذي يحتوي على GOT) للقراءة فقط قبل تشغيل أي كود داخل العملية. تؤدي عمليات الكتابة إلى GOT في وقت التشغيل (كما يستخدمها fishhook) إلى KERN_PROTECTION_FAILURE → SIGBUS. يعمل DYLD_INTERPOSE عبر __DATA,__interpose لأن dyld يعالج جدول الـ interpose في وقت تحميل الصورة، قبل أن تفرض النواة حماية __DATA_CONST.
kSecAttrTokenIDSecureEnclave) — متاح لأي تطبيق مثبّت جانبيًا بدون صلاحيات# مشروع 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 في النشرة الأمنية |