9.9 KiB
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
-
Découvrez The PEASS Family, notre collection exclusive de NFTs
-
Obtenez le swag officiel PEASS & HackTricks
-
Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
-
Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo 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 ils ne peuvent pas être revendiqués par d'autres applications car ils utilisent des liens HTTP(S) standard 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 en 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 testeur de pénétration, ce fichier est très intéressant car il dévoile les chemins. Il peut même révéler des chemins de versions qui n'ont pas encore été publiées.
Vérification de l'attribution des domaines associés
Dans Xcode, allez à l'onglet Capabilities et recherchez Associated Domains. Vous pouvez également inspecter le fichier .entitlements
en recherchant com.apple.developer.associated-domains
. Chacun des domaines doit être préfixé par applinks:
, comme applinks:www.mywebsite.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 peuvent être trouvées dans la Documentation archivée des développeurs Apple.
Si vous n'avez que l'application compilée, vous pouvez extraire les entitlements 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 à partir de l'étape précédente. Ce fichier doit être accessible via HTTPS, sans 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
Afin de recevoir des liens et de 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 géré comme un lien universel.
- Le schéma de
webpageURL
doit être HTTP ou HTTPS (tout autre schéma doit générer 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 de données
Lorsque iOS ouvre une application en tant que résultat 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
}
De plus, n'oubliez pas que si l'URL contient des paramètres, ils ne doivent pas être considérés comme fiables avant d'être soigneusement nettoyés et validés (même s'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 tel est le cas, l'ensemble de l'URL et donc la demande de lien universel doivent être rejetés.
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 être appelé à partir d'une méthode distincte. L'exemple suivant démontre cela: example.
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" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
-
Découvrez The PEASS Family, notre collection exclusive de NFTs
-
Obtenez le swag officiel PEASS & HackTricks
-
Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
-
Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.