iOS Custom URI Handlers / Deeplinks / Custom Schemes

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Il s'agit d'un résumé des informations connexes provenant de https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/

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 du développeur 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 de rejeter tout 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 était dans l'application mobile Skype, qui permettait des actions d'appel non autorisées via le protocole skype://. Les schémas enregistrés peuvent être trouvés dans le fichier 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

À partir d'iOS 9.0, pour vérifier si une application est disponible, canOpenURL: nécessite de déclarer des schémas d'URL dans le fichier Info.plist sous LSApplicationQueriesSchemes. Cela limite les schémas qu'une application peut interroger à 50, renforçant la confidentialité en empêchant l'énumération des applications.

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

Testing de la Gestion et de la Validation des URL

Les développeurs devraient inspecter des méthodes spécifiques dans le code source pour comprendre la construction et la validation du chemin des URL, telles que application:didFinishLaunchingWithOptions: et application:openURL:options:. Par exemple, Telegram utilise diverses méthodes pour ouvrir des 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
}

Tester les demandes d'URL vers d'autres applications

Des méthodes telles que 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

La gestion des méthodes obsolètes d'ouverture d'URL, telles que application:handleOpenURL: et openURL:, doit être identifiée et examinée pour ses 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 variables pour surveiller les plantages, comme illustré par la manipulation des URL dans l'application 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

Références

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge HackTricks AWS)!

Autres façons de soutenir HackTricks:

Dernière mise à jour