iOS Custom URI Handlers / Deeplinks / Custom Schemes
Reading time: 5 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
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
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>
Δοκιμή Χειρισμού και Επικύρωσης URL
Οι προγραμματιστές θα πρέπει να εξετάσουν συγκεκριμένες μεθόδους στον πηγαίο κώδικα για να κατανοήσουν την κατασκευή και την επικύρωση διαδρομών 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
}
Δοκιμή Αιτημάτων URL σε Άλλες Εφαρμογές
Μέθοδοι όπως το openURL:options:completionHandler:
είναι κρίσιμες για το άνοιγμα URLs για αλληλεπίδραση με άλλες εφαρμογές. Η αναγνώριση της χρήσης τέτοιων μεθόδων στον πηγαίο κώδικα της εφαρμογής είναι κλειδί για την κατανόηση των εξωτερικών επικοινωνιών.
Δοκιμή για Καταργημένες Μεθόδους
Οι καταργημένες μέθοδοι που χειρίζονται το άνοιγμα URLs, όπως το application:handleOpenURL:
και το openURL:
, θα πρέπει να αναγνωρίζονται και να εξετάζονται για τις επιπτώσεις στην ασφάλεια.
Fuzzing URL Schemes
Το fuzzing URL schemes μπορεί να εντοπίσει σφάλματα διαφθοράς μνήμης. Εργαλεία όπως το Frida μπορούν να αυτοματοποιήσουν αυτή τη διαδικασία ανοίγοντας URLs με ποικιλία payloads για να παρακολουθούν για κρασαρίσματα, όπως φαίνεται από τη χειραγώγηση URLs στην εφαρμογή 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
Σύμφωνα με αυτή την ανάρτηση, κακόβουλες εφαρμογές θα μπορούσαν να καταχωρήσουν άλλες προσαρμοσμένες ρυθμίσεις εφαρμογών, στη συνέχεια η κακόβουλη εφαρμογή μπορεί να ανοίξει έναν περιηγητή που έχει όλα τα cookies της εφαρμογής Safari με ASWebAuthenticationSession.
Με τον περιηγητή, η κακόβουλη εφαρμογή μπορεί να φορτώσει μια ιστοσελίδα που ελέγχεται από τον επιτιθέμενο και το TCC θα ζητήσει από τον κινητό χρήστη άδειες για να ανοίξει αυτή την εφαρμογή. Στη συνέχεια, η κακόβουλη ιστοσελίδα θα μπορούσε να ανακατευθύνει σε μια σελίδα θύματος, για παράδειγμα, μια ροή OAuth με την παράμετρο prompt=none
. Αν ο χρήστης ήταν ήδη συνδεδεμένος στη ροή OAuth, η ροή OAuth θα στείλει το μυστικό πίσω στην εφαρμογή θύματος χρησιμοποιώντας το προσαρμοσμένο scheme της εφαρμογής θύματος.
Ωστόσο, επειδή η κακόβουλη εφαρμογή το έχει επίσης καταχωρήσει και επειδή ο χρησιμοποιούμενος περιηγητής είναι μέσα στην κακόβουλη εφαρμογή, το προσαρμοσμένο scheme θα διαχειριστεί σε αυτή την περίπτωση από την κακόβουλη εφαρμογή, η οποία θα είναι σε θέση να κλέψει το OAuth token.
Αναφορές
- https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/
- https://evanconnelly.github.io/post/ios-oauth/
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
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.