7.5 KiB
Liens universels iOS
Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!
Autres façons de soutenir HackTricks:
- Si vous souhaitez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT!
- Obtenez le swag officiel PEASS & HackTricks
- Découvrez La famille PEASS, notre collection exclusive de NFTs
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez-nous sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR aux HackTricks et HackTricks Cloud dépôts GitHub.
Introduction
Les liens universels offrent une expérience de redirection transparente aux utilisateurs en ouvrant directement le contenu dans l'application, contournant ainsi le besoin de redirection vers Safari. Ces liens sont uniques et sécurisés, car ils ne peuvent pas être revendiqués par d'autres applications. Cela est assuré en hébergeant 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 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, potentiellement liés à des fonctionnalités non publiées.
Analyse de l'autorisation des domaines associés
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 archivée des développeurs Apple.
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 de l'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 traitées soit HTTP ou HTTPS, car les autres ne seront pas pris en charge.
Validation de la Méthode de Gestion des Données
Lorsqu'un lien universel ouvre une application, un objet NSUserActivity
est transmis à l'application avec l'URL. Avant de traiter cette URL, il est essentiel de la valider et de la désinfecter pour éviter les risques de sécurité. Voici un exemple en Swift qui illustre 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 prémunir contre d'éventuelles usurpations d'identité ou des données mal formées. L'API NSURLComponents
est utile à cette fin, 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
}
}
À travers une configuration et validation diligente, les développeurs peuvent s'assurer que les liens universels améliorent l'expérience utilisateur tout en respectant les normes de sécurité et de confidentialité.
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
Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!
Autres façons de soutenir HackTricks:
- Si vous souhaitez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT!
- Obtenez le swag officiel PEASS & HackTricks
- Découvrez La famille PEASS, notre collection exclusive de NFTs
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez-nous sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR aux HackTricks et HackTricks Cloud github repos.