iOS Universal Links
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.
Introduction
Les liens universels offrent une expĂ©rience de redirection fluide aux utilisateurs en ouvrant directement le contenu dans l'application, contournant ainsi la nĂ©cessitĂ© d'une redirection Safari. Ces liens sont uniques et sĂ©curisĂ©s, car ils ne peuvent pas ĂȘtre revendiquĂ©s par d'autres applications. Cela est assurĂ© par l'hĂ©bergement d'un fichier JSON apple-app-site-association
dans le rĂ©pertoire racine du site web, Ă©tablissant un lien vĂ©rifiable entre le site web et l'application. Dans les cas oĂč l'application n'est pas installĂ©e, Safari prendra le relais et dirigera l'utilisateur vers la page web, maintenant ainsi la prĂ©sence de l'application.
Pour les testeurs de pénétration, le fichier apple-app-site-association
est d'un intĂ©rĂȘt particulier car il peut rĂ©vĂ©ler des chemins sensibles, pouvant inclure ceux liĂ©s Ă des fonctionnalitĂ©s non publiĂ©es.
Analyzing the Associated Domains Entitlement
Les développeurs activent les liens universels en configurant les Domaines Associés dans l'onglet Capacités de Xcode ou en inspectant le fichier .entitlements
. Chaque domaine est préfixé par applinks:
. Par exemple, la configuration de Telegram pourrait apparaĂźtre comme suit :
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
Pour des informations plus complÚtes, consultez la documentation Apple Developer archivée.
Si vous travaillez avec une application compilĂ©e, les autorisations peuvent ĂȘtre extraites comme indiquĂ© dans ce guide.
Récupération du fichier Apple App Site Association
Le fichier apple-app-site-association
doit ĂȘtre rĂ©cupĂ©rĂ© depuis le serveur en utilisant les domaines spĂ©cifiĂ©s dans les autorisations. Assurez-vous que le fichier est accessible via HTTPS directement Ă https://<domain>/apple-app-site-association
. Des outils comme le validateur Apple App Site Association (AASA) peuvent aider dans ce processus.
Gestion des liens universels dans l'application
L'application doit implémenter des méthodes spécifiques pour gérer correctement les liens universels. La méthode principale à rechercher est application:continueUserActivity:restorationHandler:
. Il est crucial que le schéma des URL gérées soit HTTP ou HTTPS, car d'autres ne seront pas prises en charge.
Validation de la méthode de gestion des données
Lorsqu'un lien universel ouvre une application, un objet NSUserActivity
est passé à l'application avec l'URL. Avant de traiter cette URL, il est essentiel de la valider et de la nettoyer pour éviter les risques de sécurité. Voici un exemple en Swift qui démontre le processus :
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// Check for web browsing activity and valid URL
if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL {
application.open(url, options: [:], completionHandler: nil)
}
return true
}
Les URL doivent ĂȘtre soigneusement analysĂ©es et validĂ©es, surtout si elles incluent des paramĂštres, pour se protĂ©ger contre un Ă©ventuel spoofing ou des donnĂ©es malformĂ©es. L'API NSURLComponents
est utile à cet effet, comme démontré ci-dessous :
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL,
let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true),
let path = components.path,
let params = components.queryItems else {
return false
}
if let albumName = params.first(where: { $0.name == "albumname" })?.value,
let photoIndex = params.first(where: { $0.name == "index" })?.value {
// Process the URL with album name and photo index
return true
} else {
// Handle invalid or missing parameters
return false
}
}
Grùce à une configuration et une validation diligentes, les développeurs peuvent s'assurer que les liens universels améliorent l'expérience utilisateur tout en maintenant des normes de sécurité et de confidentialité.
Outils
- GetUniversal.link: Aide à simplifier le test et la gestion des liens universels de votre application et du fichier AASA. Il suffit d'entrer votre domaine pour vérifier l'intégrité du fichier AASA ou d'utiliser le tableau de bord personnalisé pour tester facilement le comportement des liens. Cet outil vous aide également à déterminer quand Apple indexera à nouveau votre fichier AASA.
Références
- https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis
- https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8
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.