iOS Custom URI Handlers / Deeplinks / Custom Schemes

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Hierdie is 'n opsomming van die verwante inligting vanaf https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/

Basiese Inligting

Aangepaste URL-skemas stel programme in staat om te kommunikeer deur middel van 'n aangepaste protokol, soos beskryf in die Apple Developer Documentation. Hierdie skemas moet deur die toepassing verklaar word, wat dan inkomende URL's volgens daardie skemas hanteer. Dit is noodsaaklik om alle URL-parameters te valideer en enige verkeerd geformuleerde URL's te verwerp om aanvalle deur hierdie vektor te voorkom.

'n Voorbeeld word gegee waar die URI myapp://hostname?data=123876123 'n spesifieke toepassingsaksie aanroep. 'n Opmerklike kwesbaarheid was in die Skype Mobile-toep, wat ongemagtigde oproepaksies via die skype://-protokol toegelaat het. Die geregistreerde skemas kan gevind word in die toep se Info.plist onder CFBundleURLTypes. Kwaadwillige toepassings kan hiervan misbruik maak deur URI's te herregistreer om sensitiewe inligting te onderskep.

Registrasie van Toepassingsnavraagskemas

Vanaf iOS 9.0, om te kontroleer of 'n toepassing beskikbaar is, vereis canOpenURL: dat URL-skemas verklaar word in die Info.plist onder LSApplicationQueriesSchemes. Dit beperk die skemas wat 'n toepassing kan ondersoek tot 50, wat privaatheid verbeter deur toepassingsopnoeming te voorkom.

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

Toetsing van URL-hantering en validering

Ontwikkelaars moet spesifieke metodes in die bronkode ondersoek om URL-padkonstruksie en validering te verstaan, soos application:didFinishLaunchingWithOptions: en application:openURL:options:. Byvoorbeeld, Telegram maak gebruik van verskeie metodes om URL's te open:

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
}

Toetsing van URL-aanvragen aan andere apps

Metodes soos openURL:options:completionHandler: is noodsaaklik vir die oopmaak van URL's om met ander apps te kommunikeer. Die identifisering van die gebruik van sulke metodes in die bronkode van die app is sleutel tot die verstaan van eksterne kommunikasie.

Toetsing vir verouderde metodes

Verouderde metodes wat URL-oopmakings hanteer, soos application:handleOpenURL: en openURL:, moet geïdentifiseer en nagegaan word vir sekuriteitsimplikasies.

Fuzzing van URL-skemas

Fuzzing van URL-skemas kan geheueversteuringsfoute identifiseer. Hulpmiddels soos Frida kan hierdie proses outomatiseer deur URL's met verskillende ladinge oop te maak om te monitor vir ongelukke, soos geïllustreer deur die manipulasie van URL's in die iGoat-Swift-app:

$ 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

Verwysings

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated