iOS Universal Links

Reading time: 8 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) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

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 :

xml
<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, référez-vous à 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 (ou /.well-known/apple-app-site-association). Des outils comme le validateur Apple App Site Association (AASA) peuvent aider dans ce processus.

ÉnumĂ©ration rapide depuis un shell macOS/Linux

# en supposant que vous avez extrait les autorisations dans ent.xml
doms=$(plutil -extract com.apple.developer.associated-domains xml1 -o - ent.xml | \
       grep -oE 'applinks:[^<]+' | cut -d':' -f2)
for d in $doms; do
  echo "[+] Récupération de l'AASA pour $d";
  curl -sk "https://$d/.well-known/apple-app-site-association" | jq '.'
done

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 :

swift
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 :

swift
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 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Ă©.

Vulnérabilités courantes et vérifications de pentesting

#FaiblesseComment testerExploitation / Impact
1paths / components trop larges dans le fichier AASA (par exemple, "/": "*" ou des jokers tels que "/a/*").‱ Inspectez le AASA tĂ©lĂ©chargĂ© et recherchez *, des barres obliques finales ou des rĂšgles {"?": 
}.
‱ Essayez de demander des ressources inconnues qui correspondent toujours à la rùgle (https://domain.com/a/evil?_p_dp=1).
DĂ©tournement de lien universel : une application iOS malveillante qui enregistre le mĂȘme domaine pourrait revendiquer tous ces liens et prĂ©senter une interface de phishing. Un exemple rĂ©el est le rapport de bug-bounty de Temu.com de mai 2025 oĂč un attaquant pouvait rediriger n'importe quel chemin /a/* vers sa propre application.
2Validation cĂŽtĂ© serveur manquante des chemins de deep-link.AprĂšs avoir identifiĂ© les chemins autorisĂ©s, Ă©mettez des requĂȘtes curl/Burp vers des ressources non existantes et observez les codes d'Ă©tat HTTP. Tout autre chose que 404 (par exemple, 200/302) est suspect.Un attaquant peut hĂ©berger du contenu arbitraire derriĂšre un chemin autorisĂ© et le servir via le domaine lĂ©gitime, augmentant le taux de rĂ©ussite du phishing ou du vol de jetons de session.
3Gestion des URL cĂŽtĂ© application sans liste blanche de schĂ©ma/hĂŽte (CVE-2024-10474 – Mozilla Focus < 132).Recherchez des appels directs openURL:/open(_:options:) ou des ponts JavaScript qui transmettent des URL arbitraires.Les pages internes peuvent faire passer des URL myapp:// ou https:// qui contournent les vĂ©rifications de sĂ©curitĂ© de la barre d'URL du navigateur, entraĂźnant des usurpations ou des actions privilĂ©giĂ©es non intentionnelles.
4Utilisation de sous-domaines génériques (*.example.com) dans l'autorisation.grep pour *. dans les autorisations.Si un sous-domaine est pris (par exemple via un bucket S3 inutilisé), l'attaquant obtient automatiquement le lien universel.

Liste de vérification rapide

  • Extraire les autorisations et Ă©numĂ©rer chaque entrĂ©e applinks:.
  • TĂ©lĂ©charger AASA pour chaque entrĂ©e et auditer les jokers.
  • VĂ©rifier que le serveur web renvoie 404 pour les chemins non dĂ©finis.
  • Dans le binaire, confirmer que seuls les hĂŽtes/schĂ©mas de confiance sont gĂ©rĂ©s.
  • Si l'application utilise la nouvelle syntaxe components (iOS 11+), tester les rĂšgles de paramĂštres de requĂȘte ({"?":{
}}).

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.
  • Knil: Utilitaire iOS open-source qui rĂ©cupĂšre, analyse et vous permet de tester chaque lien universel dĂ©clarĂ© par un domaine directement sur l'appareil.
  • universal-link-validator: Validateur CLI / web qui effectue des vĂ©rifications strictes de conformitĂ© AASA et met en Ă©vidence les jokers dangereux.

Références

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) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks