Jailbreak #001:Gamed 0-day 漏洞
報告人:illusionofchaos
可復(fù)現(xiàn)系統(tǒng)版本:iOS 15
從 App Store 安裝的任何應(yīng)用程序都可以在沒有用戶提示的情況下訪問以下數(shù)據(jù):
Apple ID 電子郵件和與之關(guān)聯(lián)的全名
Apple ID 身份驗證令牌,允許用戶訪問
*.apple.com上的至少一個端點完整的文件系統(tǒng)讀取訪問 Core Duet 數(shù)據(jù)庫(包含來自 Mail、SMS、iMessage、第 3 方消息傳遞應(yīng)用程序的聯(lián)系人列表和有關(guān)所有用戶與這些聯(lián)系人交互的元數(shù)據(jù)(包括時間戳和統(tǒng)計數(shù)據(jù)),還有一些附件如 URL和文本)
對 Speed Dial 數(shù)據(jù)庫和 Address Book 數(shù)據(jù)庫的完整文件系統(tǒng)讀取訪問權(quán)限,包括聯(lián)系人圖片和其他元數(shù)據(jù),如創(chuàng)建和修改日期(我剛剛在 iOS 15 上檢查過,這個無法訪問,所以最近肯定已經(jīng)悄悄修復(fù)了)
這是一個簡短的概念證明(這個實際上不會編譯,請參閱 GitHub https://github.com/illusionofchaos/ios-gamed-0day 以獲取解決方法)。
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
}
}
復(fù)現(xiàn)流程:
XPC 服務(wù)
com.apple.gamed未正確檢查com.apple.developer.game-center權(quán)限即使在設(shè)備上禁用了 Game Center,調(diào)用
getServicesForPID:localPlayer:reply:也會返回幾個 XPC 代理對象(GKAccountService、GKFriendService、GKUtilityService 等)。如果在設(shè)備上啟用了游戲中心(即使它沒有在 App Store Connect 中為應(yīng)用啟用并且應(yīng)用不包含 com.apple.developer.game-center 授權(quán)),在 GKAccountService 上調(diào)用
authenticatePlayerWithExistingCredentialsWithHandler:會返回一個包含 Apple ID 的對象用戶、DSID 和 Game Center 身份驗證令牌(允許代表用戶向 https://gc.apple.com 發(fā)送請求)。在 GKProfileService 上調(diào)用getProfilesForPlayerIDs:handler:會返回一個包含用戶 Apple ID 名字和姓氏的對象。在 GKFriendService 上調(diào)用getFriendsForPlayer:handler:返回一個對象,其中包含有關(guān)用戶在 Game Center 中的朋友的信息。即使游戲中心被禁用,它也不會為 App Store Connect 中的應(yīng)用程序啟用并且應(yīng)用程序不包含
com.apple.developer.game-center授權(quán),調(diào)用 GKUtilityService 的requestImageDataForURL:subdirectory:fileName:handler:允許讀取任意文件通過將文件 URL 傳遞給該方法,在應(yīng)用程序沙箱之外。可以通過這種方式訪問的文件(但不限于)如下:/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist- 包含移動格式塔緩存/var/mobile/Library/CoreDuet/People/interactionC.db- 包含來自郵件、短信、iMessage、第 3 方消息傳遞應(yīng)用程序的聯(lián)系人列表以及有關(guān)用戶與這些聯(lián)系人交互的元數(shù)據(jù)(包括時間戳和統(tǒng)計數(shù)據(jù))/var /mobile/Library/Preferences/com.apple.mobilephone.speeddial.plist- 包含最喜歡的聯(lián)系人及其電話號碼/var/mobile/Library/AddressBook/AddressBook.sqlitedb- 包含完整的地址簿數(shù)據(jù)庫/var/mobile/Library/AddressBook/AddressBookImages.sqlitedb- 包含地址簿聯(lián)系人的照片在 GKUtilityService 上調(diào)用
cacheImageData:inSubdirectory:withFileName:handler:可能允許將任意數(shù)據(jù)寫入應(yīng)用程序沙箱之外的位置。
在 Apple 安全賞金計劃頁面上,此漏洞的評估價為 100,000 美元(對通常受 TCC 提示或平臺沙箱保護的敏感數(shù)據(jù)的廣泛應(yīng)用訪問權(quán)限?!懊舾袛?shù)據(jù)”訪問權(quán)限包括從聯(lián)系人獲得廣泛訪問權(quán)限(即完整數(shù)據(jù)庫) )。
時間線:
2021 年 3 月 10 日 - illusionofchaos向 Apple 報告了該漏洞
3 月 10 日 - Apple 承認了illusionofchaos的報告
5 月 20 日 - illusionofchaos請求更新狀態(tài)(但沒有得到回復(fù))
5 月 30 日 - illusionofchaos再次請求狀態(tài)更新
7 月 1 日 - 蘋果回復(fù)稱仍在調(diào)查中
7 月 20 日 - illusionofchaos再次請求狀態(tài)更新
8 月 25 日 - Apple 回復(fù)說他們計劃在即將到來的更新中解決這個問題。
-End-
最近有一些小伙伴,讓我?guī)兔φ乙恍?nbsp;面試題 資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來,可以說是程序員面試必備!所有資料都整理到網(wǎng)盤了,歡迎下載!

面試題】即可獲取
