iOS Custom URI Handlers / Deeplinks / Custom Schemes

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Αυτό είναι ένα σύνοψη από τις σχετικές πληροφορίες από το https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/

Βασικές Πληροφορίες

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

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

Εγγραφή Προσαρμοσμένων Πρωτοκόλλων Ερωτήματος Εφαρμογής

Από το 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: είναι κρίσιμες για το άνοιγμα URL για αλληλεπίδραση με άλλες εφαρμογές. Η αναγνώριση της χρήσης τέτοιων μεθόδων στον πηγαίο κώδικα της εφαρμογής είναι καίρια για την κατανόηση των εξωτερικών επικοινωνιών.

Δοκιμή για αποσυντεθειμένες μεθόδους

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

Ανίχνευση σφαλμάτων URL Schemes

Η ανίχνευση σφαλμάτων στα URL schemes μπορεί να αναγνωρίσει προβλήματα μνήμης. Εργαλεία όπως το Frida μπορούν να αυτοματοποιήσουν αυτήν τη διαδικασία ανοίγοντας URLs με διάφορα φορτία για να παρακολουθήσουν τυχόν ανατροπές, όπως φαίνεται από την παραπλάνηση των 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

Αναφορές

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated