Webview Attacks
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ένας κρίσιμος τομέας της ανάπτυξης Android περιλαμβάνει τη σωστή διαχείριση των WebViews. Αυτός ο οδηγός επισημαίνει βασικές ρυθμίσεις και πρακτικές ασφάλειας για τη μείωση των κινδύνων που σχετίζονται με τη χρήση του WebView.
Από προεπιλογή, τα WebViews επιτρέπουν την πρόσβαση σε αρχεία. Αυτή η λειτουργία ελέγχεται από τη μέθοδο setAllowFileAccess()
, διαθέσιμη από το επίπεδο API 3 (Cupcake 1.5) του Android. Οι εφαρμογές με την άδεια android.permission.READ_EXTERNAL_STORAGE μπορούν να διαβάσουν αρχεία από εξωτερική αποθήκευση χρησιμοποιώντας ένα σχήμα URL αρχείου (file://path/to/file
).
Καθολική Πρόσβαση Από URLs Αρχείων: Αυτή η καταργημένη λειτουργία επέτρεπε διασυνοριακά αιτήματα από URLs αρχείων, θέτοντας σημαντικό κίνδυνο ασφάλειας λόγω πιθανών επιθέσεων XSS. Η προεπιλεγμένη ρύθμιση είναι απενεργοποιημένη (false
) για εφαρμογές που στοχεύουν το Android Jelly Bean και νεότερες εκδόσεις.
Για να ελέγξετε αυτή τη ρύθμιση, χρησιμοποιήστε getAllowUniversalAccessFromFileURLs()
.
Για να τροποποιήσετε αυτή τη ρύθμιση, χρησιμοποιήστε setAllowUniversalAccessFromFileURLs(boolean)
.
Πρόσβαση σε Αρχεία Από URLs Αρχείων: Αυτή η λειτουργία, επίσης καταργημένη, ελέγχει την πρόσβαση σε περιεχόμενο από άλλα URLs σχήματος αρχείου. Όπως και η καθολική πρόσβαση, η προεπιλεγμένη της ρύθμιση είναι απενεργοποιημένη για αυξημένη ασφάλεια.
Χρησιμοποιήστε getAllowFileAccessFromFileURLs()
για να ελέγξετε και setAllowFileAccessFromFileURLs(boolean)
για να ρυθμίσετε.
Για να απενεργοποιήσετε την πρόσβαση στο σύστημα αρχείων ενώ εξακολουθείτε να έχετε πρόσβαση σε περιουσιακά στοιχεία και πόρους, χρησιμοποιείται η μέθοδος setAllowFileAccess()
. Με το Android R και άνω, η προεπιλεγμένη ρύθμιση είναι false
.
Ελέγξτε με getAllowFileAccess()
.
Ενεργοποιήστε ή απενεργοποιήστε με setAllowFileAccess(boolean)
.
Η κλάση WebViewAssetLoader είναι η σύγχρονη προσέγγιση για τη φόρτωση τοπικών αρχείων. Χρησιμοποιεί http(s) URLs για την πρόσβαση σε τοπικά περιουσιακά στοιχεία και πόρους, ευθυγραμμισμένη με την πολιτική Same-Origin, διευκολύνοντας έτσι τη διαχείριση CORS.
Αυτή είναι μια κοινή λειτουργία που χρησιμοποιείται για τη φόρτωση αυθαίρετων URLs σε ένα webview:
Ofc, ένας πιθανός επιτιθέμενος δεν θα πρέπει ποτέ να μπορεί να ελέγξει το URL που θα φορτώσει μια εφαρμογή.
JavaScript: Απενεργοποιημένο από προεπιλογή σε WebViews, μπορεί να ενεργοποιηθεί μέσω του setJavaScriptEnabled()
. Συνιστάται προσοχή καθώς η ενεργοποίηση του JavaScript χωρίς κατάλληλες προστασίες μπορεί να εισάγει ευπάθειες ασφαλείας.
Σχέδιο Intent: Τα WebViews μπορούν να διαχειριστούν το σχέδιο intent
, ενδεχομένως οδηγώντας σε εκμεταλλεύσεις αν δεν διαχειριστούν προσεκτικά. Ένα παράδειγμα ευπάθειας περιλάμβανε μια εκτεθειμένη παράμετρο WebView "support_url" που θα μπορούσε να εκμεταλλευτεί για την εκτέλεση επιθέσεων cross-site scripting (XSS).
Παράδειγμα εκμετάλλευσης χρησιμοποιώντας adb:
Μια δυνατότητα παρέχεται από το Android που επιτρέπει στο JavaScript σε ένα WebView να καλεί λειτουργίες εγγενών εφαρμογών Android. Αυτό επιτυγχάνεται με τη χρήση της μεθόδου addJavascriptInterface
, η οποία ενσωματώνει το JavaScript με τις εγγενείς λειτουργίες του Android, που ονομάζεται WebView JavaScript bridge. Συνιστάται προσοχή καθώς αυτή η μέθοδος επιτρέπει σε όλες τις σελίδες εντός του WebView να έχουν πρόσβαση στο καταχωρημένο αντικείμενο JavaScript Interface, θέτοντας σε κίνδυνο την ασφάλεια αν ευαίσθητες πληροφορίες εκτεθούν μέσω αυτών των διεπαφών.
Απαιτείται ακραία προσοχή για εφαρμογές που στοχεύουν σε εκδόσεις Android κάτω από 4.2 λόγω μιας ευπάθειας που επιτρέπει την απομακρυσμένη εκτέλεση κώδικα μέσω κακόβουλου JavaScript, εκμεταλλευόμενη την αντανάκλαση.
JavaScript interfaces μπορούν να αλληλεπιδρούν με τον εγγενή κώδικα, όπως φαίνεται στα παραδείγματα όπου μια μέθοδος κλάσης εκτίθεται στο JavaScript:
Η γέφυρα JavaScript ενεργοποιείται προσθέτοντας μια διεπαφή στο WebView:
Πιθανή εκμετάλλευση μέσω JavaScript, για παράδειγμα, μέσω μιας επίθεσης XSS, επιτρέπει την κλήση εκτεθειμένων Java μεθόδων:
Για να μετριαστούν οι κίνδυνοι, περιορίστε τη χρήση της γέφυρας JavaScript στον κώδικα που αποστέλλεται με το APK και αποτρέψτε τη φόρτωση JavaScript από απομακρυσμένες πηγές. Για παλαιότερες συσκευές, ορίστε το ελάχιστο επίπεδο API σε 17.
Μια τεκμηριωμένη μέθοδος επιτρέπει την επίτευξη RCE μέσω αντανάκλασης εκτελώντας ένα συγκεκριμένο payload. Ωστόσο, η αναγνώριση @JavascriptInterface
αποτρέπει την μη εξουσιοδοτημένη πρόσβαση σε μεθόδους, περιορίζοντας την επιφάνεια επίθεσης.
Απομακρυσμένος εντοπισμός σφαλμάτων είναι δυνατός με τα Chrome Developer Tools, επιτρέποντας την αλληλεπίδραση και την αυθαίρετη εκτέλεση JavaScript μέσα στο περιεχόμενο του WebView.
Ο απομακρυσμένος εντοπισμός σφαλμάτων μπορεί να ενεργοποιηθεί για όλα τα WebViews μέσα σε μια εφαρμογή με:
Για να ενεργοποιήσετε την αποσφαλμάτωση με βάση την κατάσταση αποσφαλμάτωσης της εφαρμογής:
Δείχνει την εξαγωγή αυθαίρετων αρχείων χρησιμοποιώντας ένα XMLHttpRequest:
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)