iOS Custom URI Handlers / Deeplinks / Custom Schemes

Reading time: 5 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks

Informations de base

Les schĂ©mas d'URL personnalisĂ©s permettent aux applications de communiquer en utilisant un protocole personnalisĂ©, comme dĂ©taillĂ© dans la documentation des dĂ©veloppeurs Apple. Ces schĂ©mas doivent ĂȘtre dĂ©clarĂ©s par l'application, qui gĂšre ensuite les URL entrantes suivant ces schĂ©mas. Il est crucial de valider tous les paramĂštres d'URL et d'Ă©carter toute URL malformĂ©e pour prĂ©venir les attaques via ce vecteur.

Un exemple est donnĂ© oĂč l'URI myapp://hostname?data=123876123 invoque une action spĂ©cifique de l'application. Une vulnĂ©rabilitĂ© notĂ©e se trouvait dans l'application Skype Mobile, qui permettait des actions d'appel non autorisĂ©es via le protocole skype://. Les schĂ©mas enregistrĂ©s peuvent ĂȘtre trouvĂ©s dans le Info.plist de l'application sous CFBundleURLTypes. Les applications malveillantes peuvent exploiter cela en rĂ©enregistrant des URIs pour intercepter des informations sensibles.

Enregistrement des schĂ©mas de requĂȘte d'application

Depuis iOS 9.0, pour vĂ©rifier si une application est disponible, canOpenURL: nĂ©cessite de dĂ©clarer les schĂ©mas d'URL dans le Info.plist sous LSApplicationQueriesSchemes. Cela limite les schĂ©mas qu'une application peut interroger Ă  50, amĂ©liorant la confidentialitĂ© en empĂȘchant l'Ă©numĂ©ration des applications.

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

Tester la gestion et la validation des URL

Les développeurs doivent inspecter des méthodes spécifiques dans le code source pour comprendre la construction et la validation des chemins d'URL, telles que application:didFinishLaunchingWithOptions: et application:openURL:options:. Par exemple, Telegram utilise diverses méthodes pour ouvrir des URL :

swift
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
}

Tester les requĂȘtes d'URL vers d'autres applications

Des méthodes comme openURL:options:completionHandler: sont cruciales pour ouvrir des URL afin d'interagir avec d'autres applications. Identifier l'utilisation de telles méthodes dans le code source de l'application est essentiel pour comprendre les communications externes.

Tester les méthodes obsolÚtes

Les mĂ©thodes obsolĂštes gĂ©rant l'ouverture d'URL, telles que application:handleOpenURL: et openURL:, doivent ĂȘtre identifiĂ©es et examinĂ©es pour leurs implications en matiĂšre de sĂ©curitĂ©.

Fuzzing des schémas d'URL

Le fuzzing des schémas d'URL peut identifier des bugs de corruption de mémoire. Des outils comme Frida peuvent automatiser ce processus en ouvrant des URL avec des charges utiles variées pour surveiller les plantages, illustré par la manipulation des URL dans l'application iGoat-Swift :

bash
$ 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

Détournement de schéma d'URL personnalisé

Selon ce post, des applications malveillantes pourraient enregistrer d'autres schémas personnalisés d'applications, puis l'application malveillante peut ouvrir un navigateur qui a tous les cookies de l'application Safari avec ASWebAuthenticationSession.

Avec le navigateur, l'application malveillante peut charger une page web contrÎlée par un attaquant et TCC demandera à l'utilisateur mobile des autorisations pour ouvrir cette application. Ensuite, la page web malveillante pourrait rediriger vers une page victime, par exemple un flux OAuth avec le paramÚtre prompt=none. Si l'utilisateur était déjà connecté au flux OAuth, le flux OAuth renverra le secret à l'application victime en utilisant le schéma personnalisé de l'application victime.
Cependant, parce que l'application malveillante l'a également enregistré et parce que le navigateur utilisé est à l'intérieur de l'application malveillante, le schéma personnalisé sera géré dans ce cas par l'application malveillante qui pourra voler le jeton OAuth.

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks