iOS Custom URI Handlers / Deeplinks / Custom Schemes

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Hii ni muhtasari kutoka kwenye habari husika kutoka https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/

Taarifa Msingi

Mfumo wa URL maalum huruhusu programu kuwasiliana kwa kutumia itifaki maalum, kama ilivyoelezwa katika Hati ya Maendeleo ya Apple. Itifaki hizi lazima zitangazwe na programu, ambayo kisha inashughulikia URL zinazoingia zifuatazo itifaki hizo. Ni muhimu kuhakikisha uthibitisho wa vigezo vyote vya URL na kutupa URL zozote zisizo sahihi ili kuzuia mashambulizi kupitia njia hii.

Mfano unatolewa ambapo URI myapp://hostname?data=123876123 inaita hatua maalum ya programu. Kasoro iliyobainishwa ilikuwa katika programu ya Skype Mobile, ambayo iliruhusu hatua za simu zisizoruhusiwa kupitia itifaki ya skype://. Itifaki zilizosajiliwa zinaweza kupatikana katika Info.plist ya programu chini ya CFBundleURLTypes. Programu mbaya zinaweza kuitumia hii kwa kusajili upya URI ili kuiba habari nyeti.

Usajili wa Itifaki za Utafutaji wa Programu

Kuanzia iOS 9.0, ili kuangalia ikiwa programu ipo, canOpenURL: inahitaji kutangaza itifaki za URL katika Info.plist chini ya LSApplicationQueriesSchemes. Hii inapunguza itifaki ambazo programu inaweza kuuliza hadi 50, kuimarisha faragha kwa kuzuia uchunguzi wa programu.

<key>LSApplicationQueriesSchemes</key>
<array>
<string>url_scheme1</string>
<string>url_scheme2</string>
</array>

Jaribio la Kusimamia na Kuthibitisha URL

Wabunifu wanapaswa kukagua njia maalum katika msimbo wa chanzo ili kuelewa ujenzi na uthibitisho wa njia ya URL, kama vile application:didFinishLaunchingWithOptions: na application:openURL:options:. Kwa mfano, Telegram inatumia njia mbalimbali za kufungua URL:

func application(_ application: UIApplication, open url: URL, sourceApplication: String?) -> Bool {
self.openUrl(url: url)
return true
}

func application(_ application: UIApplication, open url: URL, sourceApplication: String?,
annotation: Any) -> Bool {
self.openUrl(url: url)
return true
}

func application(_ app: UIApplication, open url: URL,
options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
self.openUrl(url: url)
return true
}

func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
self.openUrl(url: url)
return true
}

Jaribio la URL Requests kwa Programu Nyingine

Njia kama openURL:options:completionHandler: ni muhimu kwa kufungua URL kwa ajili ya kuwasiliana na programu nyingine. Kugundua matumizi ya njia kama hizo katika msimbo wa chanzo wa programu ni muhimu kwa kuelewa mawasiliano ya nje.

Jaribio la Njia Zilizopitwa na Waktu

Njia zilizopitwa na waktu za kushughulikia ufunguzi wa URL, kama vile application:handleOpenURL: na openURL:, zinapaswa kugunduliwa na kufanyiwa ukaguzi kwa ajili ya athari za usalama.

Fuzzing wa URL Schemes

Fuzzing wa URL schemes unaweza kugundua kasoro za kuharibika kwa kumbukumbu. Zana kama Frida inaweza kusaidia kiotomatiki mchakato huu kwa kufungua URL na mizigo tofauti ili kufuatilia ajali, kama ilivyodhihirishwa na uhariri wa URL katika programu ya iGoat-Swift:

$ frida -U SpringBoard -l ios-url-scheme-fuzzing.js
[iPhone::SpringBoard]-> fuzz("iGoat", "iGoat://?contactNumber={0}&message={0}")
Watching for crashes from iGoat...
No logs were moved.
Opened URL: iGoat://?contactNumber=0&message=0

Marejeo

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Last updated