iOS Custom URI Handlers / Deeplinks / Custom Schemes
Reading time: 4 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Basic Information
Custom URL schemes zinawezesha programu kuwasiliana kwa kutumia protokali maalum, kama ilivyoelezwa katika Apple Developer Documentation. Mipango hii lazima itangazwe na programu, ambayo kisha inashughulikia URL zinazokuja kufuata mipango hiyo. Ni muhimu kuhakiki vigezo vyote vya URL na kukatisha URL zozote zisizo sahihi ili kuzuia mashambulizi kupitia njia hii.
Mfano unatolewa ambapo URI myapp://hostname?data=123876123
inachochea kitendo maalum cha programu. Uthibitisho wa udhaifu ulipatikana katika programu ya Skype Mobile, ambayo iliruhusu vitendo vya simu visivyo ruhusiwa kupitia protokali ya skype://
. Mipango iliyosajiliwa inaweza kupatikana katika Info.plist
ya programu chini ya CFBundleURLTypes
. Programu mbaya zinaweza kutumia hii kwa kujiandikisha tena URIs ili kukamata taarifa nyeti.
Application Query Schemes Registration
Kuanzia iOS 9.0, ili kuangalia kama programu inapatikana, canOpenURL:
inahitaji kutangaza mipango ya URL katika Info.plist
chini ya LSApplicationQueriesSchemes
. Hii inapunguza mipango ambayo programu inaweza kuuliza hadi 50, ikiongeza faragha kwa kuzuia orodha ya programu.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>url_scheme1</string>
<string>url_scheme2</string>
</array>
Testing URL Handling and Validation
Wak developers wanapaswa kuchunguza mbinu maalum katika msimbo wa chanzo ili kuelewa ujenzi wa njia za URL na uthibitishaji, kama vile application:didFinishLaunchingWithOptions:
na application:openURL:options:
. Kwa mfano, Telegram inatumia mbinu mbalimbali za kufungua URLs:
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
}
Testing URL Requests to Other Apps
Mbinu kama openURL:options:completionHandler:
ni muhimu kwa kufungua URLs ili kuingiliana na programu nyingine. Kutambua matumizi ya mbinu kama hizo katika msimbo wa chanzo wa programu ni muhimu kwa kuelewa mawasiliano ya nje.
Testing for Deprecated Methods
Mbinu zilizopitwa na wakati zinazoshughulikia ufunguzi wa URL, kama application:handleOpenURL:
na openURL:
, zinapaswa kutambuliwa na kupitia kwa athari za usalama.
Fuzzing URL Schemes
Fuzzing URL schemes inaweza kutambua makosa ya uharibifu wa kumbukumbu. Zana kama Frida zinaweza kuendesha mchakato huu kwa kufungua URLs zenye payload tofauti ili kufuatilia ajali, kama inavyoonyeshwa na udanganyifu wa URLs 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
Custom URL scheme hijacking
Kulingana na hii posti, programu mbaya zinaweza kujiandikisha mipango ya kawaida ya programu nyingine, kisha programu mbaya inaweza kufungua kivinjari ambacho kina vidakuzi vyote vya Programu ya Safari kwa kutumia ASWebAuthenticationSession.
Kwa kutumia kivinjari, programu mbaya inaweza kupakia ukurasa wa wavuti unaodhibitiwa na mshambuliaji na TCC itauliza mtumiaji wa simu ruhusa za kufungua programu hiyo. Kisha, ukurasa wa wavuti mbaya unaweza kuelekeza kwenye ukurasa wa mwathirika, kwa mfano mtiririko wa OAuth na parameter prompt=none
. Ikiwa mtumiaji tayari alikuwa amejiandikisha katika mtiririko wa OAuth, mtiririko wa OAuth utatuma siri nyuma kwa programu ya mwathirika kwa kutumia mpango wa kawaida wa programu ya mwathirika.
Hata hivyo, kwa sababu programu mbaya pia iliandikisha na kwa sababu kivinjari kilichotumika kiko ndani ya programu mbaya, mpango wa kawaida utaendeshwa katika kesi hii na programu mbaya ambayo itakuwa na uwezo wa kuiba token ya OAuth.
References
- https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/
- https://evanconnelly.github.io/post/ios-oauth/
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.