iOS Universal Links
Reading time: 7 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Einführung
Universal Links bieten eine nahtlose Weiterleitung für Benutzer, indem sie Inhalte direkt in der App öffnen und die Notwendigkeit einer Weiterleitung über Safari umgehen. Diese Links sind einzigartig und sicher, da sie nicht von anderen Apps beansprucht werden können. Dies wird sichergestellt, indem eine apple-app-site-association
JSON-Datei im Stammverzeichnis der Website gehostet wird, die eine überprüfbare Verbindung zwischen der Website und der App herstellt. In Fällen, in denen die App nicht installiert ist, übernimmt Safari und leitet den Benutzer zur Webseite weiter, wodurch die Präsenz der App erhalten bleibt.
Für Penetrationstester ist die apple-app-site-association
-Datei von besonderem Interesse, da sie sensible Pfade offenbaren kann, die möglicherweise mit nicht veröffentlichten Funktionen in Verbindung stehen.
Analyse der Associated Domains Berechtigung
Entwickler aktivieren Universal Links, indem sie die Associated Domains im Tab "Capabilities" von Xcode konfigurieren oder die .entitlements
-Datei überprüfen. Jede Domain wird mit applinks:
vorangestellt. Zum Beispiel könnte die Konfiguration von Telegram wie folgt aussehen:
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
Für umfassendere Einblicke, siehe die archivierte Apple Developer Dokumentation.
Wenn Sie mit einer kompilierten Anwendung arbeiten, können Berechtigungen wie in diesem Leitfaden beschrieben extrahiert werden.
Abrufen der Apple App Site Association Datei
Die apple-app-site-association
Datei sollte vom Server unter Verwendung der in den Berechtigungen angegebenen Domains abgerufen werden. Stellen Sie sicher, dass die Datei direkt über HTTPS unter https://<domain>/apple-app-site-association
(oder /.well-known/apple-app-site-association
) zugänglich ist. Tools wie der Apple App Site Association (AASA) Validator können bei diesem Prozess helfen.
Schnelle Aufzählung von einer macOS/Linux-Shell
# vorausgesetzt, Sie haben die Berechtigungen in ent.xml extrahiert doms=$(plutil -extract com.apple.developer.associated-domains xml1 -o - ent.xml | \ grep -oE 'applinks:[^<]+' | cut -d':' -f2) for d in $doms; do echo "[+] Abrufen von AASA für $d"; curl -sk "https://$d/.well-known/apple-app-site-association" | jq '.' done
Verarbeiten von Universal Links in der App
Die App muss spezifische Methoden implementieren, um Universal Links korrekt zu verarbeiten. Die primäre Methode, nach der gesucht werden muss, ist application:continueUserActivity:restorationHandler:
. Es ist entscheidend, dass das Schema der verarbeiteten URLs HTTP oder HTTPS ist, da andere nicht unterstützt werden.
Validierung der Datenhandler-Methode
Wenn ein Universal Link eine App öffnet, wird ein NSUserActivity
Objekt mit der URL an die App übergeben. Bevor diese URL verarbeitet wird, ist es wichtig, sie zu validieren und zu bereinigen, um Sicherheitsrisiken zu vermeiden. Hier ist ein Beispiel in Swift, das den Prozess demonstriert:
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
}
URLs sollten sorgfältig analysiert und validiert werden, insbesondere wenn sie Parameter enthalten, um sich gegen potenzielles Spoofing oder fehlerhafte Daten abzusichern. Die NSURLComponents
API ist dafür nützlich, wie unten gezeigt:
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
}
}
Durch sorgfältige Konfiguration und Validierung können Entwickler sicherstellen, dass universelle Links die Benutzererfahrung verbessern und gleichzeitig Sicherheits- und Datenschutzstandards einhalten.
Häufige Schwachstellen & Pentesting-Überprüfungen
# | Schwäche | Wie zu testen | Ausnutzung / Auswirkungen |
---|---|---|---|
1 | Zu breite paths / components in der AASA-Datei (z.B. "/": "*" oder Wildcards wie "/a/*" ). | • Überprüfen Sie die heruntergeladene AASA und suchen Sie nach * , abschließenden Schrägstrichen oder {"?": …} -Regeln.• Versuchen Sie, unbekannte Ressourcen anzufordern, die weiterhin der Regel entsprechen ( https://domain.com/a/evil?_p_dp=1 ). | Universelles Link-Hijacking: Eine bösartige iOS-App, die dieselbe Domain registriert, könnte all diese Links beanspruchen und eine Phishing-Benutzeroberfläche präsentieren. Ein Beispiel aus der Praxis ist der Bug-Bounty-Bericht von Temu.com im Mai 2025, bei dem ein Angreifer jeden /a/* -Pfad auf seine eigene App umleiten konnte. |
2 | Fehlende serverseitige Validierung von Deep-Link-Pfaden. | Nachdem die erlaubten Pfade identifiziert wurden, senden Sie curl /Burp-Anfragen an nicht vorhandene Ressourcen und beobachten Sie die HTTP-Statuscodes. Alles andere als 404 (z.B. 200/302) ist verdächtig. | Ein Angreifer kann beliebige Inhalte hinter einem erlaubten Pfad hosten und über die legitime Domain bereitstellen, was die Erfolgsquote von Phishing oder Diebstahl von Sitzungstoken erhöht. |
3 | App-seitige URL-Verarbeitung ohne Whitelisting von Scheme/Host (CVE-2024-10474 – Mozilla Focus < 132). | Suchen Sie nach direkten openURL: /open(_:options:) -Aufrufen oder JavaScript-Brücken, die beliebige URLs weiterleiten. | Interne Seiten können myapp:// oder https:// -URLs schmuggeln, die die Sicherheitsüberprüfungen der URL-Leiste des Browsers umgehen, was zu Spoofing oder unbeabsichtigten privilegierten Aktionen führen kann. |
4 | Verwendung von Wildcard-Subdomains (*.example.com ) in der Berechtigung. | grep nach *. in den Berechtigungen. | Wenn eine Subdomain übernommen wird (z.B. über einen ungenutzten S3-Bucket), erhält der Angreifer automatisch die Bindung des universellen Links. |
Schnelle Checkliste
-
Berechtigungen extrahieren und jeden
applinks:
-Eintrag auflisten. - AASA für jeden Eintrag herunterladen und auf Wildcards überprüfen.
- Überprüfen, ob der Webserver für undefinierte Pfade 404 zurückgibt.
- Im Binärformat bestätigen, dass nur vertrauenswürdige Hosts/Schemes verarbeitet werden.
-
Wenn die App die neuere
components
-Syntax (iOS 11+) verwendet, Fuzzing der Abfrageparameterregeln ({"?":{…}}
).
Werkzeuge
- GetUniversal.link: Hilft, das Testen und Verwalten der universellen Links und der AASA-Datei Ihrer App zu vereinfachen. Geben Sie einfach Ihre Domain ein, um die Integrität der AASA-Datei zu überprüfen, oder verwenden Sie das benutzerdefinierte Dashboard, um das Linkverhalten einfach zu testen. Dieses Tool hilft Ihnen auch zu bestimmen, wann Apple Ihre AASA-Datei das nächste Mal indizieren wird.
- Knil: Open-Source-iOS-Dienstprogramm, das jede von einer Domain deklarierte universelle Link direkt auf dem Gerät abruft, analysiert und Ihnen ermöglicht, Tap-Tests durchzuführen.
- universal-link-validator: CLI / Web-Validator, der strenge AASA-Konformitätsprüfungen durchführt und gefährliche Wildcards hervorhebt.
Referenzen
- 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
- https://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e
- https://nvd.nist.gov/vuln/detail/CVE-2024-10474
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.