iOS Universal Links

Reading time: 7 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Εισαγωγή

Universal links προσφέρουν μια αδιάκοπη εμπειρία ανακατεύθυνσης στους χρήστες, ανοίγοντας απευθείας το περιεχόμενο στην εφαρμογή, παρακάμπτοντας την ανάγκη για ανακατεύθυνση μέσω Safari. Αυτοί οι σύνδεσμοι είναι μοναδικοί και ασφαλείς, καθώς δεν μπορούν να διεκδικηθούν από άλλες εφαρμογές. Αυτό διασφαλίζεται με την φιλοξενία ενός αρχείου JSON apple-app-site-association στον ριζικό κατάλογο της ιστοσελίδας, καθορίζοντας έναν επαληθεύσιμο σύνδεσμο μεταξύ της ιστοσελίδας και της εφαρμογής. Σε περιπτώσεις όπου η εφαρμογή δεν είναι εγκατεστημένη, το Safari θα αναλάβει και θα κατευθύνει τον χρήστη στη σελίδα, διατηρώντας την παρουσία της εφαρμογής.

Για τους penetration testers, το αρχείο apple-app-site-association είναι ιδιαίτερα ενδιαφέρον καθώς μπορεί να αποκαλύψει ευαίσθητους δρόμους, πιθανώς περιλαμβάνοντας αυτούς που σχετίζονται με μη δημοσιευμένα χαρακτηριστικά.

Ανάλυση της Εξουσιοδότησης Σχετικών Τομέων

Οι προγραμματιστές ενεργοποιούν τους Universal Links ρυθμίζοντας τους Σχετικούς Τομείς στην καρτέλα Δυνατοτήτων του Xcode ή ελέγχοντας το αρχείο .entitlements. Κάθε τομέας προτάσσεται με applinks:. Για παράδειγμα, η ρύθμιση του Telegram μπορεί να εμφανίζεται ως εξής:

xml
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>

Για πιο ολοκληρωμένες πληροφορίες, ανατρέξτε στην αρχειοθετημένη Τεκμηρίωση Προγραμματιστών της Apple.

Εάν εργάζεστε με μια μεταγλωττισμένη εφαρμογή, τα δικαιώματα μπορούν να εξαχθούν όπως περιγράφεται σε αυτήν την οδηγία.

Ανάκτηση του Αρχείου Συσχέτισης Ιστοσελίδας της Apple

Το αρχείο apple-app-site-association θα πρέπει να ανακτηθεί από τον διακομιστή χρησιμοποιώντας τα domains που καθορίζονται στα δικαιώματα. Βεβαιωθείτε ότι το αρχείο είναι προσβάσιμο μέσω HTTPS απευθείας στο https://<domain>/apple-app-site-association/.well-known/apple-app-site-association). Εργαλεία όπως ο Επαληθευτής Αρχείου Συσχέτισης Ιστοσελίδας της Apple (AASA) μπορούν να βοηθήσουν σε αυτή τη διαδικασία.

Γρήγορη αρίθμηση από ένα shell macOS/Linux

# assuming you have extracted the entitlements to 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 "[+] Fetching AASA for $d";
  curl -sk "https://$d/.well-known/apple-app-site-association" | jq '.'
done

Διαχείριση Καθολικών Συνδέσμων στην Εφαρμογή

Η εφαρμογή πρέπει να υλοποιεί συγκεκριμένες μεθόδους για να διαχειρίζεται σωστά τους καθολικούς συνδέσμους. Η κύρια μέθοδος που πρέπει να αναζητηθεί είναι η application:continueUserActivity:restorationHandler:. Είναι κρίσιμο το σχήμα των URLs που διαχειρίζεται να είναι HTTP ή HTTPS, καθώς άλλα δεν θα υποστηρίζονται.

Επικύρωση της Μεθόδου Διαχείρισης Δεδομένων

Όταν ένας καθολικός σύνδεσμος ανοίγει μια εφαρμογή, ένα αντικείμενο NSUserActivity μεταφέρεται στην εφαρμογή με το URL. Πριν από την επεξεργασία αυτού του URL, είναι απαραίτητο να το επικυρώσετε και να το καθαρίσετε για να αποφευχθούν κίνδυνοι ασφαλείας. Ακολουθεί ένα παράδειγμα σε Swift που δείχνει τη διαδικασία:

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
}

Οι διευθύνσεις URL θα πρέπει να αναλύονται και να επικυρώνονται προσεκτικά, ειδικά αν περιλαμβάνουν παραμέτρους, για να προστατευτούν από πιθανή παραχάραξη ή κακώς διαμορφωμένα δεδομένα. Η API NSURLComponents είναι χρήσιμη για αυτόν τον σκοπό, όπως φαίνεται παρακάτω:

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
}
}

Μέσω επιμελούς διαμόρφωσης και επικύρωσης, οι προγραμματιστές μπορούν να διασφαλίσουν ότι οι καθολικοί σύνδεσμοι ενισχύουν την εμπειρία του χρήστη ενώ διατηρούν τα πρότυπα ασφάλειας και ιδιωτικότητας.

Κοινές Ευπάθειες & Έλεγχοι Pentesting

#ΑδυναμίαΠώς να δοκιμάσετεΕκμετάλλευση / Επίπτωση
1Πολύ ευρείες paths / components στο αρχείο AASA (π.χ. "/": "*" ή χαρακτήρες μπαλαντέρ όπως "/a/*").• Εξετάστε το κατεβασμένο AASA και αναζητήστε *, τελικούς χαρακτήρες /, ή κανόνες {"?": …}.
• Δοκιμάστε να ζητήσετε άγνωστες πηγές που εξακολουθούν να ταιριάζουν με τον κανόνα (https://domain.com/a/evil?_p_dp=1).
Hijacking καθολικών συνδέσμων: μια κακόβουλη εφαρμογή iOS που καταχωρεί τον ίδιο τομέα θα μπορούσε να διεκδικήσει όλους αυτούς τους συνδέσμους και να παρουσιάσει phishing UI. Ένα πραγματικό παράδειγμα είναι η αναφορά bug-bounty του Temu.com τον Μάιο του 2025 όπου ένας επιτιθέμενος μπορούσε να ανακατευθύνει οποιοδήποτε /a/* μονοπάτι στην εφαρμογή του.
2Απουσία επικύρωσης από τον διακομιστή των μονοπατιών deep-link.Αφού προσδιορίσετε τα επιτρεπόμενα μονοπάτια, εκδώστε αιτήματα curl/Burp σε μη υπάρχουσες πηγές και παρακολουθήστε τους κωδικούς κατάστασης HTTP. Οτιδήποτε άλλο εκτός από 404 (π.χ. 200/302) είναι ύποπτο.Ένας επιτιθέμενος μπορεί να φιλοξενήσει αυθαίρετο περιεχόμενο πίσω από ένα επιτρεπόμενο μονοπάτι και να το σερβίρει μέσω του νόμιμου τομέα, αυξάνοντας το ποσοστό επιτυχίας του phishing ή της κλοπής session-token.
3Διαχείριση URL από την εφαρμογή χωρίς λευκή λίστα scheme/host (CVE-2024-10474 – Mozilla Focus < 132).Αναζητήστε άμεσες κλήσεις openURL:/open(_:options:) ή JavaScript bridges που προωθούν αυθαίρετα URLs.Εσωτερικές σελίδες μπορούν να μεταφέρουν URLs myapp:// ή https:// που παρακάμπτουν τους ελέγχους ασφαλείας της γραμμής διευθύνσεων του προγράμματος περιήγησης, οδηγώντας σε spoofing ή μη προγραμματισμένες προνομιακές ενέργειες.
4Χρήση υποτομέων wildcard (*.example.com) στην εξουσιοδότηση.grep για *. στις εξουσιοδοτήσεις.Εάν οποιοσδήποτε υποτομέας καταληφθεί (π.χ. μέσω ενός ανενεργού S3 bucket), ο επιτιθέμενος αποκτά αυτόματα τη σύνδεση Universal Link.

Γρήγορη Λίστα Ελέγχου

  • Εξαγάγετε τις εξουσιοδοτήσεις και απαριθμήστε κάθε applinks: είσοδο.
  • Κατεβάστε το AASA για κάθε είσοδο και ελέγξτε για χαρακτήρες μπαλαντέρ.
  • Επαληθεύστε ότι ο διακομιστής ιστού επιστρέφει 404 για μη καθορισμένα μονοπάτια.
  • Στο δυαδικό, επιβεβαιώστε ότι μόνο οι αξιόπιστοι τομείς/schemes διαχειρίζονται.
  • Εάν η εφαρμογή χρησιμοποιεί τη νεότερη σύνταξη components (iOS 11+), δοκιμάστε κανόνες παραμέτρων ερωτήματος ({"?":{…}}).

Εργαλεία

  • GetUniversal.link: Βοηθά στην απλοποίηση της δοκιμής και διαχείρισης των Καθολικών Συνδέσμων και του αρχείου AASA της εφαρμογής σας. Απλά εισάγετε τον τομέα σας για να επαληθεύσετε την ακεραιότητα του αρχείου AASA ή χρησιμοποιήστε τον προσαρμοσμένο πίνακα ελέγχου για να δοκιμάσετε εύκολα τη συμπεριφορά των συνδέσμων. Αυτό το εργαλείο σας βοηθά επίσης να προσδιορίσετε πότε η Apple θα καταχωρήσει ξανά το αρχείο AASA σας.
  • Knil: Ανοιχτού κώδικα βοηθητικό πρόγραμμα iOS που ανακτά, αναλύει και σας επιτρέπει να δοκιμάσετε κάθε Καθολικό Σύνδεσμο που δηλώνεται από έναν τομέα απευθείας στη συσκευή.
  • universal-link-validator: CLI / web validator που εκτελεί αυστηρούς ελέγχους συμμόρφωσης AASA και επισημαίνει επικίνδυνους χαρακτήρες μπαλαντέρ.

Αναφορές

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks