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
- VĂ©rifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépÎts github.
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.
<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 :
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 :
$ 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
- https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/
- https://evanconnelly.github.io/post/ios-oauth/
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
- VĂ©rifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépÎts github.