iOS Custom URI Handlers / Deeplinks / Custom Schemes

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Basic Information

Οι προσαρμοσμένες διευθύνσεις URL επιτρέπουν στις εφαρμογές να επικοινωνούν χρησιμοποιώντας ένα προσαρμοσμένο πρωτόκολλο, όπως αναφέρεται στην Apple Developer Documentation. Αυτές οι διευθύνσεις πρέπει να δηλώνονται από την εφαρμογή, η οποία στη συνέχεια χειρίζεται τις εισερχόμενες διευθύνσεις URL σύμφωνα με αυτές τις διευθύνσεις. Είναι κρίσιμο να επικυρώνετε όλους τους παραμέτρους URL και να απορρίπτετε οποιεσδήποτε κακώς διαμορφωμένες διευθύνσεις URL για να αποτρέψετε επιθέσεις μέσω αυτού του διαύλου.

Δίνεται ένα παράδειγμα όπου η URI myapp://hostname?data=123876123 καλεί μια συγκεκριμένη ενέργεια εφαρμογής. Μια αναφερόμενη ευπάθεια ήταν στην εφαρμογή Skype Mobile, η οποία επέτρεπε μη επιτρεπόμενες ενέργειες κλήσεων μέσω του πρωτοκόλλου skype://. Οι καταχωρημένες διευθύνσεις μπορούν να βρεθούν στο Info.plist της εφαρμογής κάτω από CFBundleURLTypes. Οι κακόβουλες εφαρμογές μπορούν να εκμεταλλευτούν αυτό επανακαταχωρώντας URIs για να παγιδεύσουν ευαίσθητες πληροφορίες.

Application Query Schemes Registration

Από το iOS 9.0, για να ελέγξετε αν μια εφαρμογή είναι διαθέσιμη, το canOpenURL: απαιτεί να δηλώνονται οι διευθύνσεις URL στο Info.plist κάτω από LSApplicationQueriesSchemes. Αυτό περιορίζει τις διευθύνσεις που μπορεί να ερωτήσει μια εφαρμογή σε 50, ενισχύοντας την ιδιωτικότητα αποτρέποντας την καταμέτρηση εφαρμογών.

<key>LSApplicationQueriesSchemes</key>
<array>
<string>url_scheme1</string>
<string>url_scheme2</string>
</array>

Testing URL Handling and Validation

Οι προγραμματιστές θα πρέπει να εξετάσουν συγκεκριμένες μεθόδους στον πηγαίο κώδικα για να κατανοήσουν την κατασκευή και την επικύρωση των διαδρομών URL, όπως application:didFinishLaunchingWithOptions: και application:openURL:options:. Για παράδειγμα, το Telegram χρησιμοποιεί διάφορες μεθόδους για το άνοιγμα των URL:

func application(_ application: UIApplication, open url: URL, sourceApplication: String?) -> Bool {
self.openUrl(url: url)
return true
}

func application(_ application: UIApplication, open url: URL, sourceApplication: String?,
annotation: Any) -> Bool {
self.openUrl(url: url)
return true
}

func application(_ app: UIApplication, open url: URL,
options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
self.openUrl(url: url)
return true
}

func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
self.openUrl(url: url)
return true
}

Testing URL Requests to Other Apps

Μέθοδοι όπως το openURL:options:completionHandler: είναι κρίσιμες για το άνοιγμα URL για αλληλεπίδραση με άλλες εφαρμογές. Η αναγνώριση της χρήσης τέτοιων μεθόδων στον πηγαίο κώδικα της εφαρμογής είναι το κλειδί για την κατανόηση των εξωτερικών επικοινωνιών.

Testing for Deprecated Methods

Οι παρωχημένες μέθοδοι που χειρίζονται το άνοιγμα URL, όπως το application:handleOpenURL: και το openURL:, θα πρέπει να αναγνωρίζονται και να εξετάζονται για τις επιπτώσεις στην ασφάλεια.

Fuzzing URL Schemes

Το fuzzing URL schemes μπορεί να εντοπίσει σφάλματα διαφθοράς μνήμης. Εργαλεία όπως το Frida μπορούν να αυτοματοποιήσουν αυτή τη διαδικασία ανοίγοντας URL με ποικιλία payloads για να παρακολουθούν για κρασαρίσματα, όπως φαίνεται από τη χειραγώγηση των URL στην εφαρμογή iGoat-Swift:

$ frida -U SpringBoard -l ios-url-scheme-fuzzing.js
[iPhone::SpringBoard]-> fuzz("iGoat", "iGoat://?contactNumber={0}&message={0}")
Watching for crashes from iGoat...
No logs were moved.
Opened URL: iGoat://?contactNumber=0&message=0

Hijacking προσαρμοσμένων URL scheme

Σύμφωνα με αυτή την ανάρτηση, κακόβουλες εφαρμογές θα μπορούσαν να καταχωρήσουν τα προσαρμοσμένα schemes άλλων εφαρμογών, στη συνέχεια η κακόβουλη εφαρμογή μπορεί να ανοίξει έναν περιηγητή που έχει όλα τα cookies της εφαρμογής Safari με ASWebAuthenticationSession.

Με τον περιηγητή, η κακόβουλη εφαρμογή μπορεί να φορτώσει μια ιστοσελίδα ελεγχόμενη από τον επιτιθέμενο και το TCC θα ζητήσει από τον κινητό χρήστη άδειες για να ανοίξει αυτή την εφαρμογή. Στη συνέχεια, η κακόβουλη ιστοσελίδα θα μπορούσε να ανακατευθύνει σε μια σελίδα θύματος, για παράδειγμα σε μια ροή OAuth με την παράμετρο prompt=none. Αν ο χρήστης ήταν ήδη συνδεδεμένος στη ροή OAuth, η ροή OAuth θα στείλει το μυστικό πίσω στην εφαρμογή θύμα χρησιμοποιώντας το προσαρμοσμένο scheme της εφαρμογής θύματος. Ωστόσο, επειδή η κακόβουλη εφαρμογή το έχει επίσης καταχωρήσει και επειδή ο χρησιμοποιούμενος περιηγητής είναι μέσα στην κακόβουλη εφαρμογή, το προσαρμοσμένο scheme θα διαχειριστεί σε αυτή την περίπτωση από την κακόβουλη εφαρμογή, η οποία θα είναι σε θέση να κλέψει το OAuth token.

Αναφορές

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Last updated