
CVE-2026-65343 के लिए PoC, iOS 26.6 पर एक AppleKeyStore kernel OOB read जो DYLD_INTERPOSE ACM handle capture के माध्यम से sandboxed app से KASLR को पराजित करने के लिए kernel pointers लीक करता है।
घटक: 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 Security Advisory — iOS 26.6.1 के अनुसार)
AppleKeyStore कर्नेल एक्सटेंशन में _LibSer_SEPControl_Deserialize एक ACM (Credential Manager) संदेश बफ़र से एक (payload_ptr, declared_length) जोड़ी को के माध्यम से यूज़रस्पेस में प्रकाशित करता है, ।
copyout()declared_length ≤ remainingdeclared_length = 0x800 प्रदान करके, ड्राइवर कर्नेल ACM संदेश बफ़र के अंत से लगभग 0x7E8 बाइट्स आगे कॉपी करता है — जो निकटवर्ती कर्नेल हीप आवंटनों में पढ़ता है। उन निकटवर्ती क्षेत्रों में कर्नेल पॉइंटर (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") साइडलोडेड ऐप्स पर सैंडबॉक्स द्वारा अवरुद्ध है। हालाँकि, Security.framework का Secure Enclave कुंजी-हस्ताक्षर पथ एक वास्तविक ACM सत्र हैंडल के साथ इन-प्रोसेस IOConnectCallMethod को कॉल करता है।
PoC एक __DATA,__interpose हुक का उपयोग करता है (जो dyld लोड समय पर चलता है, इससे पहले कि __DATA_CONST को केवल-पढ़ने योग्य बनाया जाए — iOS 26 पर DATA_CONST सुरक्षा द्वारा fishhook अवरुद्ध है):
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 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
न्यूनतम एंटाइटलमेंट (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 श्रेय सुरक्षा सलाहकार में प्रकाशित |