
iOS 26.6 के tmpfs setxattr हैंडलर में एक निश्चित PAC डाइवर्सिफायर बाईपास के लिए प्रूफ-ऑफ-कॉन्सेप्ट, जो यूज़रस्पेस से कमजोर साइनिंग पथ की पहुंच को प्रदर्शित करता है।
घटक: XNU VFS — default_setxattr_doubleagent (tmpfs VNOP)
प्रभावित: iOS / iPadOS 26.6 (23G71) और पुराने संस्करण
समाधान: iOS / iPadOS 26.6.1 (23G83) में
प्रकार: xattr हैंडलर पॉइंटर साइनिंग में फिक्स्ड PAC डाइवर्सिफायर
प्रभाव: कर्नेल संदर्भ से PC नियंत्रण; कर्नेल राइट प्रिमिटिव के साथ संयुक्त होने पर पूर्ण विशेषाधिकार वृद्धि
खोजकर्ता: Bhaswanth Chigurupati, Billy Jheng Bing Jhong, Pan Zhenpeng (@Peterpan0927) — STAR Labs SG Pte. Ltd.
(Apple सुरक्षा सलाह — iOS 26.6.1 के अनुसार)
default_setxattr_doubleagent, tmpfs फाइलसिस्टम के लिए VNOP xattr हैंडलर, xattr हैंडलर फंक्शन पॉइंटर को फिक्स्ड, कंपाइल-टाइम कॉन्स्टेंट PAC डाइवर्सिफायर: #0x307a का उपयोग करके साइन करता है।
; XNU कर्नेल — default_setxattr_doubleagent (डीकंपाइल किया गया)
handler_ptr = vnode_operations[VNOP_SETXATTR_SLOT]; // vnop टेबल से पढ़ा गया
signed_ptr = PACDA(handler_ptr, 0x307a); // फिक्स्ड डाइवर्सिफायर के साथ साइन करें
... call AUTDA(signed_ptr, 0x307a) → BLR // प्रमाणित करें और ब्रांच करें
क्योंकि डाइवर्सिफायर फिक्स्ड और सार्वजनिक रूप से ज्ञात है, कर्नेल राइट प्रिमिटिव वाला हमलावर निम्न कार्य कर सकता है:
forged = PACIA(shellcode_addr, 0x307a)vnode_operations टेबल के उपयुक्त स्लॉट में forged लिखें।setxattr() कॉल करें → कर्नेल shellcode_addr निष्पादित करता है।iOS 26.6 कर्नेल विशेषाधिकार वृद्धि चेन में:
CVE-2026-64788 (IOGPUFamily UAF) → कर्नेल r/w प्रिमिटिव
CVE-2026-65330 (यह बग) → PC नियंत्रण → रूट (uid=0)
sign_ptr प्रिमिटिव (डाइवर्सिफायर #0x307a के साथ PACIA) जेलब्रेक POC में इनलाइन ARM64e असेंबली का उपयोग करके लागू किया गया है। कर्नेल r/w प्रिमिटिव का उपयोग निम्न के लिए किया जाता है:
v_op पॉइंटर खोजें।vnode_operations[VNOP_SETXATTR_SLOT] में नकली PAC पॉइंटर लिखें।setxattr("/tmp/trigger", ...) के माध्यम से निष्पादन ट्रिगर करें।स्टैंडअलोन PoC (poc_pac_bypass.c) कमजोर VNOP पथ का परीक्षण करता है:
/var/root/poc65330_test पर एक परीक्षण फाइल बनाता हैXATTR_NAME="com.apple.poc.cve65330.test" के साथ setxattr() कॉल करता है → default_setxattr_doubleagent को हिट करता हैremovexattr() कॉल करता हैPoC PAC पॉइंटर नहीं बनाता और न ही कोई कर्नेल डेटा ओवरराइट करता है — यह केवल प्रदर्शित करता है कि कमजोर #0x307a साइनिंग पथ सामान्य setxattr() सिस्कॉल के माध्यम से यूजरस्पेस से पहुंच योग्य है।
/var/root/ फाइल निर्माण के लिए जेलब्रेक या सैंडबॉक्स से बाहर (स्वयं setxattr कॉल किसी भी प्रक्रिया से पहुंच योग्य है — फाइल पथ को सैंडबॉक्स-राइटेबल स्थान पर समायोजित किया जा सकता है)# स्टैंडअलोन C बाइनरी (कोई फ्रेमवर्क आवश्यक नहीं)
clang -arch arm64 -o poc poc/poc_pac_bypass.c
# डिवाइस पर (साइनिंग के साथ):
clang -arch arm64 -isysroot $(xcrun --sdk iphoneos --show-sdk-path) \
-o poc poc/poc_pac_bypass.c
codesign -s "Apple Development" poc
फिक्स्ड डाइवर्सिफायर 0x307a को 26.6 (23G71) कर्नेलकैश के डिसअसेंबली से सत्यापित किया गया था:
; default_setxattr_doubleagent + 0x?? (अनुमानित)
MOVZ x1, #0x307a ; डाइवर्सिफायर कॉन्स्टेंट
PACDA x0, x1 ; हैंडलर पॉइंटर साइन करें
कॉल साइट पर संबंधित AUTDA x0, x1 समान कॉन्स्टेंट का उपयोग करता है, जो पुष्टि करता है कि डाइवर्सिफायर 0x307a के साथ कोई भी PACIA-फोर्ज्ड पॉइंटर सफलतापूर्वक प्रमाणित होता है।
| तिथि | घटना |
|---|---|
| 2026-08-17 | iOS 26.6.1 फिक्स के साथ जारी |
| 2026-08-17 | Apple द्वारा सुरक्षा सलाह में श्रेय प्रकाशित |