
CVE-2026-65343 के लिए प्रूफ-ऑफ-कॉन्सेप्ट, जो AppleKeyStore में एक आउट-ऑफ-बाउंड रीड है और iOS 26.6 पर KASLR को विफल करने के लिए कर्नेल पॉइंटर्स लीक करता है। इसमें DYLD_INTERPOSE के माध्यम से ACM हैंडल कैप्चर और AKS सेलेक्टर्स में एक प्रोब शामिल है।
घटक: AppleKeyStore कर्नेल एक्सटेंशन — _LibSer_SEPControl_Deserialize
प्रभावित: iOS / iPadOS 26.6 (23G71) और पुराने संस्करण
फिक्स: iOS / iPadOS 26.6.1 (23G83) में
प्रकार: SEP कंट्रोल मैसेज डिसीरियलाइज़ेशन में आउट-ऑफ-बाउंड्स रीड
प्रभाव: कर्नेल पॉइंटर लीक → सैंडबॉक्स्ड, एनटाइटलमेंट-फ्री प्रोसेस से KASLR डिफीट (DYLD_INTERPOSE ACM हैंडल कैप्चर के माध्यम से)
खोजकर्ता: Drinor Selmanaj (Sentry), Surya Narayan Kushwaha
(Apple सुरक्षा सलाह — iOS 26.6.1 के अनुसार)
AppleKeyStore कर्नेल एक्सटेंशन में _LibSer_SEPControl_Deserialize एक ACM (क्रेडेंशियल मैनेजर) मैसेज बफर से (payload_ptr, declared_length) जोड़ी को copyout() के माध्यम से यूज़रस्पेस में प्रकाशित करता है, बिना यह सत्यापित किए कि declared_length ≤ remaining।
declared_length = 0x800 प्रदान करके, ड्राइवर कर्नेल ACM मैसेज बफर के अंत से लगभग 0x7E8 बाइट्स आगे कॉपी करता है — आसन्न कर्नेल हीप आवंटनों में पढ़ता है। उन आसन्न क्षेत्रों में कर्नेल पॉइंटर (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") अवरुद्ध है। हालाँकि, Security.framework Secure Enclave कुंजी-हस्ताक्षर पथ IOConnectCallMethod को इन-प्रोसेस वास्तविक ACM सत्र हैंडल के साथ कॉल करता है।
PoC एक __DATA,__interpose हुक का उपयोग करता है (जो dyld लोड समय पर चलता है, __DATA_CONST को रीड-ओनली बनाने से पहले — fishhook iOS 26 पर DATA_CONST सुरक्षा द्वारा अवरुद्ध है):
SecKeyCreateRandomKey(kSecAttrTokenIDSecureEnclave) → SecKeyCreateSignature() → इन-प्रोसेस IOConnectCallMethod वास्तविक ACM हैंडल के साथ फायर होता है(conn, handle[16]) कैप्चर करेंdeclared_length = 0x800 के साथ रीप्ले करें0xfffffff0xxxxxxxx कर्नेल पॉइंटर के लिए आउटपुट स्कैन करें → KASLR स्लाइड की गणना करेंpoc_aks_oob.m पूर्ण ACM हैंडल कैप्चर और OOB प्रोब श्रृंखला लागू करता है:
kSecAttrAccessibleAfterFirstUnlock, बिना बायोमेट्रिक)declared_length = 0x800 के साथ रीप्ले करता हैKPTR @+XXXX = 0xfffffff0YYYYYYYY पर पाए गए किसी भी कर्नेल पॉइंटर को प्रिंट करता हैयदि SE कुंजी हस्ताक्षर इन-प्रोसेस के बजाय secd XPC के माध्यम से रूट किया जाता है, तो फ़ॉलबैक प्रोब शून्य हैंडल का उपयोग करता है (OOB पथ पहुंच की पुष्टि करता है; सभी सेलेक्टर ACM सत्यापन में विफल होंगे, लेकिन VNOP पथ की पुष्टि होती है)।
iOS 26 पर, __DATA_CONST (जिसमें GOT होता है) किसी भी इन-प्रोसेस कोड के चलने से पहले रीड-ओनली मैप किया जाता है। रनटाइम GOT राइट्स (fishhook द्वारा उपयोग किए जाने वाले) KERN_PROTECTION_FAILURE → SIGBUS ट्रिगर करते हैं। __DATA,__interpose के माध्यम से DYLD_INTERPOSE काम करता है क्योंकि dyld इंटरपोज़ टेबल को इमेज-लोड समय पर प्रोसेस करता है, कर्नेल द्वारा __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 सुरक्षा सलाह में क्रेडिट्स प्रकाशित |