Webview Attacks

Μάθετε την ειδικότητα στο χάκινγκ AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Οδηγός για τις Διαμορφώσεις και την Ασφάλεια του WebView

Επισκόπηση των Ευπαθειών του WebView

Ένα κρίσιμο κομμάτι της ανάπτυξης Android αφορά τη σωστή χειρισμό των WebViews. Αυτός ο οδηγός αναδεικνύει βασικές διαμορφώσεις και πρακτικές ασφαλείας για τη μείωση των κινδύνων που σχετίζονται με τη χρήση του WebView.

Πρόσβαση σε Αρχεία στα WebViews

Από προεπιλογή, τα WebViews επιτρέπουν την πρόσβαση σε αρχεία. Αυτή η λειτουργικότητα ελέγχεται από τη μέθοδο setAllowFileAccess(), διαθέσιμη από το Android API επίπεδο 3 (Cupcake 1.5). Οι εφαρμογές με την άδεια android.permission.READ_EXTERNAL_STORAGE μπορούν να διαβάσουν αρχεία από εξωτερική αποθήκευση χρησιμοποιώντας ένα σχήμα URL αρχείου (file://path/to/file).

Αποσυρμένες Λειτουργίες: Παγκόσμια και Πρόσβαση σε Αρχεία από URLs

  • Παγκόσμια Πρόσβαση από Αρχεία URLs: Αυτή η αποσυρμένη λειτουργία επέτρεπε αιτήσεις διασυνοριακής πρόσβασης από αρχεία URLs, δημιουργώντας σημαντικό κίνδυνο ασφάλειας λόγω πιθανών επιθέσεων XSS. Η προεπιλεγμένη ρύθμιση είναι απενεργοποιημένη (false) για εφαρμογές που στοχεύουν σε Android Jelly Bean και νεότερες εκδόσεις.

  • Για να ελέγξετε αυτή τη ρύθμιση, χρησιμοποιήστε το getAllowUniversalAccessFromFileURLs().

  • Για να τροποποιήσετε αυτή τη ρύθμιση, χρησιμοποιήστε το setAllowUniversalAccessFromFileURLs(boolean).

  • Πρόσβαση σε Αρχεία από Αρχεία URLs: Αυτή η λειτουργία, επίσης αποσυρμένη, ελέγχει την πρόσβαση σε περιεχόμενο από άλλα URLs με σχήμα αρχείου. Όπως και η παγκόσμια πρόσβαση, η προεπιλεγμένη ρύθμιση είναι απενεργοποιημένη για ενισχυμένη ασφάλεια.

  • Χρησιμοποιήστε το getAllowFileAccessFromFileURLs() για έλεγχο και το setAllowFileAccessFromFileURLs(boolean) για ρύθμιση.

Ασφαλής Φόρτωση Αρχείων

Για την απενεργοποίηση της πρόσβασης στο σύστημα αρχείων ενώ εξακολουθείτε να έχετε πρόσβαση σε περιουσιακά στοιχεία και πόρους, χρησιμοποιείται η μέθοδος setAllowFileAccess(). Με Android R και νεότερες εκδόσεις, η προεπιλεγμένη ρύθμιση είναι false.

  • Ελέγξτε με το getAllowFileAccess().

  • Ενεργοποιήστε ή απενεργοποιήστε με το setAllowFileAccess(boolean).

WebViewAssetLoader

Η κλάση WebViewAssetLoader είναι η μοντέρνα προσέγγιση για τη φόρτωση τοπικών αρχείων. Χρησιμοποιεί http(s) URLs για την πρόσβαση σε τοπικά περιουσιακά στοιχεία και πόρους, συμμορφούμενη με την πολιτική ίδιας προέλευσης, διευκολύνοντας έτσι τη διαχείριση του CORS.

loadUrl

Αυτή είναι μια κοινή λειτουργία που χρησιμοποιείται για τη φόρτωση αυθαίρετων URLs σε ένα webview:

webview.loadUrl("<url here>")

JavaScript και Χειρισμός Σχήματος Intent

  • JavaScript: Απενεργοποιημένο από προεπιλογή στα WebViews, μπορεί να ενεργοποιηθεί μέσω της setJavaScriptEnabled(). Συνιστάται προσοχή καθώς η ενεργοποίηση του JavaScript χωρίς κατάλληλα μέτρα προστασίας μπορεί να εισάγει ευπάθειες ασφάλειας.

  • Σχήμα Intent: Οι WebViews μπορούν να χειριστούν το σχήμα intent, που μπορεί να οδηγήσει σε εκμετάλλευση εάν δεν διαχειρίζεται προσεκτικά. Ένα παράδειγμα ευπαθείας περιλάμβανε ένα εκτεθειμένο παράμετρο WebView "support_url" που θα μπορούσε να εκμεταλλευτεί για την εκτέλεση επιθέσεων cross-site scripting (XSS).

Παράδειγμα εκμετάλλευσης χρησιμοποιώντας το adb:

adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView –es support_url "https://example.com/xss.html"

Επικοινωνία JavaScript

Μια λειτουργία που παρέχεται από το Android επιτρέπει στο JavaScript σε ένα WebView να καλεί λειτουργίες εφαρμογής Android. Αυτό επιτυγχάνεται χρησιμοποιώντας τη μέθοδο addJavascriptInterface, η οποία ενσωματώνει το JavaScript με τις φυσικές λειτουργίες του Android, ονομάζοντας το ως γέφυρα JavaScript WebView. Συνιστάται προσοχή, καθώς αυτή η μέθοδος επιτρέπει σε όλες τις σελίδες εντός του WebView να έχουν πρόσβαση στο εγγεγραμμένο αντικείμενο διεπαφής JavaScript, δημιουργώντας έναν κίνδυνο ασφάλειας εάν ευαίσθητες πληροφορίες εκτίθενται μέσω αυτών των διεπαφών.

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

Υλοποίηση μιας Γέφυρας JavaScript

  • Οι διεπαφές JavaScript μπορούν να αλληλεπιδρούν με τον φυσικό κώδικα, όπως φαίνεται στα παραδείγματα όπου μια μέθοδος κλάσης εκτίθεται στο JavaScript:

@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
  • Το JavaScript Bridge ενεργοποιείται προσθέτοντας μια διεπαφή στο WebView:

webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
  • Δυνητική εκμετάλλευση μέσω JavaScript, για παράδειγμα, μέσω μιας επίθεσης XSS, επιτρέπει την κλήση αποκαλυμμένων μεθόδων Java:

<script>alert(javascriptBridge.getSecret());</script>
  • Για τη μείωση των κινδύνων, περιορίστε τη χρήση της γέφυρας JavaScript στον κώδικα που αποστέλλεται με το APK και αποτρέψτε τη φόρτωση JavaScript από απομακρυσμένες πηγές. Για παλαιότερες συσκευές, ορίστε το ελάχιστο επίπεδο API σε 17.

Εκτέλεση Κώδικα Απομακρυσμένης Κ

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
  • Για να ενεργοποιήσετε συνθηκικά την εντοπισμό σφαλμάτων βασισμένο στην κατάσταση debuggable της εφαρμογής:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}

Εξαγωγή αυθαίρετων αρχείων

  • Δείχνει την εξαγωγή αυθαίρετων αρχείων χρησιμοποιώντας ένα XMLHttpRequest:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText);
}
}
xhr.open('GET', 'file:///data/data/com.authenticationfailure.wheresmybrowser/databases/super_secret.db', true);
xhr.send(null);

Αναφορές

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

Άλλοι τρόποι υποστήριξης του HackTricks:

Last updated