
PoC لـ CVE-2026-65343، وهو قراءة خارج الحدود (OOB read) في نواة AppleKeyStore على iOS 26.6 تؤدي إلى تسريب مؤشرات النواة للتغلب على KASLR من تطبيق داخل بيئة معزولة (sandboxed app) عبر التقاط مقبض ACM باستخدام DYLD_INTERPOSE.
المكوّن: امتداد النواة AppleKeyStore — _LibSer_SEPControl_Deserialize
المتأثر: iOS / iPadOS 26.6 (23G71) وما قبله
تم إصلاحه في: iOS / iPadOS 26.6.1 (23G83)
النوع: قراءة خارج الحدود في إلغاء تسلسل رسالة تحكم SEP
التأثير: تسريب مؤشر النواة → إفشال KASLR من عملية معزولة (sandboxed) بدون entitlements (عبر التقاط مقبض ACM باستخدام DYLD_INTERPOSE)
تم اكتشافه بواسطة: Drinor Selmanaj (Sentry)، Surya Narayan Kushwaha
(وفق Apple Security Advisory — iOS 26.6.1)
تنشر الدالة _LibSer_SEPControl_Deserialize في امتداد النواة AppleKeyStore زوج (payload_ptr, declared_length) من مخزن رسالة ACM (مدير بيانات الاعتماد) إلى مساحة المستخدم عبر ، .
copyout()declared_length ≤ remainingمن خلال تمرير declared_length = 0x800، ينسخ السائق ما يقارب 0x7E8 بايت بعد نهاية مخزن رسالة ACM في النواة — ليقرأ من تخصيصات كومة النواة المجاورة. تحتوي تلك المناطق المجاورة على مؤشرات النواة (0xfffffff0xxxxxxxx) التي يمكن استخدامها لحساب إزاحة KASLR.
; _LibSer_SEPControl_Deserialize (affected path, 26.6 / 23G71)
ldr w2, [acm_msg + declared_length_offset] ; user-controlled 0x800
; NO check: w2 <= (acm_msg_end - payload_ptr) ← MISSING
bl copyout ; copies w2 bytes to userspace
يُحظر الاستدعاء المباشر لـ 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 محدِّداً (selector) من AKS0xfffffff0xxxxxxxx → حساب إزاحة KASLRيُنفّذ poc_aks_oob.m سلسلة التقاط مقبض ACM الكاملة وفحص OOB:
kSecAttrAccessibleAfterFirstUnlock، بدون بصمة حيوية)declared_length = 0x800 عبر جميع محدِّدات AKS البالغ عددها 163KPTR @+XXXX = 0xfffffff0YYYYYYYYإذا تم توجيه توقيع مفتاح SE عبر secd XPC بدلاً من داخل العملية، يستخدم الفحص الاحتياطي مقبضاً صفرياً (يؤكد إمكانية الوصول إلى مسار OOB؛ ستفشل جميع المحدِّدات في تحقق ACM، لكن مسار VNOP يكون مؤكداً).
على iOS 26، يتم تعيين __DATA_CONST (الذي يحتوي على GOT) للقراءة فقط قبل تشغيل أي كود داخل العملية. تؤدي الكتابات في وقت التشغيل على GOT (كما يستخدمها fishhook) إلى KERN_PROTECTION_FAILURE → SIGBUS. يعمل DYLD_INTERPOSE عبر __DATA,__interpose لأن dyld يعالج جدول interpose عند تحميل الصورة، قبل أن تفرض النواة حماية __DATA_CONST.
kSecAttrTokenIDSecureEnclave) — متاح لأي تطبيق محمّل جانبياً بدون entitlements# Xcode project — link Security.framework and 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
الحد الأدنى من entitlements (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 للفضل في النشرة الأمنية |