8.8 KiB
Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!
Autres moyens 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 d'NFTs exclusifs
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-moi sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR aux dépôts github HackTricks et HackTricks Cloud.
Les liens universels permettent de rediriger les utilisateurs directement vers l'application sans passer par Safari pour la redirection.
Les liens universels sont uniques, donc ne peuvent pas être revendiqués par d'autres applications car ils utilisent des liens HTTP(S) standards vers le site web où le propriétaire a téléchargé un fichier pour s'assurer que le site web et l'application sont liés.
Comme ces liens utilisent des schémas HTTP(S), lorsque l'application n'est pas installée, Safari ouvrira le lien redirigeant les utilisateurs vers la page. Cela permet aux applications de communiquer avec l'application même si elle n'est pas installée.
Pour créer des liens universels, il est nécessaire de créer un fichier JSON appelé apple-app-site-association
avec les détails. Ensuite, ce fichier doit être hébergé dans le répertoire racine de votre serveur web (par exemple https://google.com/apple-app-site-association).
Pour le pentester, ce fichier est très intéressant car il révèle des chemins. Il peut même révéler des chemins de versions qui n'ont pas encore été publiées.
Vérification de l'entitlement des domaines associés
Dans Xcode, allez dans l'onglet Capacités et recherchez Domaines associés. Vous pouvez également inspecter le fichier .entitlements
à la recherche de com.apple.developer.associated-domains
. Chacun des domaines doit être préfixé par applinks:
, comme applinks:www.monwebsite.com
.
Voici un exemple du fichier .entitlements
de Telegram :
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
Des informations plus détaillées sont disponibles dans la Documentation Apple Developer archivée.
Si vous disposez uniquement de l'application compilée, vous pouvez extraire les droits en suivant ce guide :
{% content-ref url="extracting-entitlements-from-compiled-application.md" %} extracting-entitlements-from-compiled-application.md {% endcontent-ref %}
Récupération du fichier Apple App Site Association
Essayez de récupérer le fichier apple-app-site-association
depuis le serveur en utilisant les domaines associés que vous avez obtenus à l'étape précédente. Ce fichier doit être accessible via HTTPS, sans aucune redirection, à https://<domain>/apple-app-site-association
ou https://<domain>/.well-known/apple-app-site-association
.
Vous pouvez le récupérer vous-même avec votre navigateur ou utiliser le validateur Apple App Site Association (AASA).
Vérification de la méthode de réception de lien
Pour recevoir des liens et les gérer de manière appropriée, le délégué de l'application doit implémenter application:continueUserActivity:restorationHandler:
. Si vous avez le projet original, essayez de rechercher cette méthode.
Veuillez noter que si l'application utilise openURL:options:completionHandler:
pour ouvrir un lien universel vers le site web de l'application, le lien ne s'ouvrira pas dans l'application. Comme l'appel provient de l'application, il ne sera pas traité comme un lien universel.
- Le schéma de l'URL
webpageURL
doit être HTTP ou HTTPS (tout autre schéma devrait lever une exception). La propriété d'instancescheme
deURLComponents
/NSURLComponents
peut être utilisée pour vérifier cela.
Vérification de la méthode de gestion des données
Lorsque iOS ouvre une application à la suite d'un lien universel, l'application reçoit un objet NSUserActivity
avec une valeur activityType
de NSUserActivityTypeBrowsingWeb
. La propriété webpageURL
de l'objet d'activité contient l'URL HTTP ou HTTPS que l'utilisateur accède. L'exemple suivant en Swift vérifie exactement cela avant d'ouvrir l'URL :
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// ...
if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL {
application.open(url, options: [:], completionHandler: nil)
}
return true
}
En outre, n'oubliez pas que si l'URL comprend des paramètres, ils ne doivent pas être considérés comme fiables avant d'être soigneusement assainis et validés (même lorsqu'ils proviennent d'un domaine de confiance). Par exemple, ils pourraient avoir été falsifiés par un attaquant ou pourraient inclure des données malformées. Si c'est le cas, l'URL entière et donc la demande de lien universel doivent être rejetées.
L'API NSURLComponents
peut être utilisée pour analyser et manipuler les composants de l'URL. Cela peut également faire partie de la méthode application:continueUserActivity:restorationHandler:
elle-même ou peut se produire dans une méthode séparée appelée à partir de celle-ci. L'exemple suivant illustre ceci :
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 {
// Interact with album name and photo index
return true
} else {
// Handle when album and/or album name or photo index missing
return false
}
}
Références
{% embed url="https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8" %}
Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!
Autres moyens 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 merchandising officiel PEASS & HackTricks
- Découvrez La Famille PEASS, notre collection d'NFTs exclusifs
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-moi sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de hacking en soumettant des PR aux dépôts github HackTricks et HackTricks Cloud.