hacktricks/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md

16 KiB
Raw Blame History

BrowExt - άδειες & host_permissions

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

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

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

permissions

Οι άδειες ορίζονται στο αρχείο manifest.json της επέκτασης χρησιμοποιώντας την ιδιότητα permissions και επιτρέπουν πρόσβαση σε σχεδόν οτιδήποτε μπορεί να έχει πρόσβαση ένας περιηγητής (Cookies ή Φυσική Αποθήκευση):

Το προηγούμενο manifest δηλώνει ότι η επέκταση απαιτεί την άδεια storage. Αυτό σημαίνει ότι μπορεί να χρησιμοποιήσει το API αποθήκευσης για να αποθηκεύσει τα δεδομένα της με μόνιμο τρόπο. Αντίθετα με τα cookies ή τα APIs του localStorage που δίνουν στους χρήστες κάποιο επίπεδο ελέγχου, η αποθήκευση της επέκτασης μπορεί συνήθως να διαγραφεί μόνο με την απεγκατάσταση της επέκτασης.

Μια επέκταση θα ζητήσει τις άδειες που υποδηλώνονται στο αρχείο manifest.json της και Μετά την εγκατάσταση της επέκτασης, μπορείτε πάντα να ελέγξετε τις άδειές της στον περιηγητή σας, όπως φαίνεται σε αυτήν την εικόνα:

Μπορείτε να βρείτε τη πλήρη λίστα των αδειών που μπορεί να ζητήσει μια Επέκταση Περιηγητή Chromium εδώ και μια πλήρη λίστα για τις επεκτάσεις Firefox εδώ.

host_permissions

Η προαιρετική αλλά ισχυρή ρύθμιση host_permissions υποδεικνύει με ποιους hosts η επέκταση θα μπορεί να αλληλεπιδρά μέσω των APIs όπως οι cookies, webRequest και tabs.

Οι παρακάτω host_permissions επιτρέπουν βασικά σε κάθε ιστοσελίδα:

"host_permissions": [
"*://*/*"
]

// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]

// Or:
"host_permissions": [
"<all_urls>"
]

Αυτοί είναι οι hosts που η επέκταση του προγράμματος περιήγησης μπορεί να έχει πρόσβαση ελεύθερα. Αυτό συμβαίνει επειδή όταν μια επέκταση προγράμματος περιήγησης καλεί fetch("https://gmail.com/") δεν περιορίζεται από το CORS.

Κατάχρηση permissions και host_permissions

Καρτέλες

Επιπλέον, τα host_permissions ξεκλειδώνουν επίσης την "προηγμένη" tabs API λειτουργικότητα. Επιτρέπουν στην επέκταση να καλεί tabs.query() και όχι μόνο να λαμβάνει πίσω μια λίστα με τις καρτέλες περιήγησης του χρήστη αλλά επίσης να μάθει ποια ιστοσελίδα (σημαίνει διεύθυνση και τίτλο) είναι φορτωμένη.

{% hint style="danger" %} Όχι μόνο αυτό, ακροατές όπως tabs.onUpdated γίνονται επίσης πολύ πιο χρήσιμοι. Θα ειδοποιούνται κάθε φορά που μια νέα σελίδα φορτώνεται σε μια καρτέλα. {% endhint %}

Εκτέλεση σεναρίων περιεχομένου

Τα σενάρια περιεχομένου δεν είναι απαραίτητα γραμμένα στατικά στον κατάλογο της επέκτασης. Δεδομένων των επαρκών host_permissions, οι επεκτάσεις μπορούν επίσης να τα φορτώσουν δυναμικά καλώντας tabs.executeScript() ή scripting.executeScript().

Και οι δύο API επιτρέπουν την εκτέλεση όχι μόνο αρχείων που περιέχονται στις επεκτάσεις ως σενάρια περιεχομένου αλλά και αυθαίρετου κώδικα. Το πρώτο επιτρέπει την παράδοση κώδικα JavaScript ως συμβολοσειρά ενώ το δεύτερο προσδοκά ένα λειτουργικό JavaScript που είναι λιγότερο ευάλωτο σε ευπάθειες εισαγωγής. Παρόλα αυτά, και τα δύο API θα προκαλέσουν χάος αν χρησιμοποιηθούν κατάχρηση.

{% hint style="danger" %} Εκτός από τις δυνατότητες που αναφέρθηκαν παραπάνω, τα σενάρια περιεχομένου θα μπορούσαν για παράδειγμα να παρακολουθήσουν διαπιστευτήρια καθώς αυτά εισάγονται σε ιστοσελίδες. Ένας κλασικός τρόπος κατάχρησής τους είναι η ενσωμάτωση διαφημίσεων σε κάθε ιστοσελίδα. Είναι επίσης δυνατό να προστεθούν απάτες μηνυμάτων για να καταχραστεί η αξιοπιστία ιστοσελίδων ειδήσεων. Τέλος, θα μπορούσαν να διαμορφώσουν ιστοσελίδες τραπεζών για την ανακατεύθυνση μεταφορών χρημάτων. {% endhint %}

Εμπλοκή προνομίων

Κάποια προνόμια επέκτασης δεν χρειάζεται να δηλωθούν ρητά. Ένα παράδειγμα είναι το tabs API: η βασική του λειτουργικότητα είναι προσβάσιμη χωρίς κανένα προνόμιο. Οποιαδήποτε επέκταση μπορεί να ειδοποιηθεί όταν ανοίγετε και κλείνετε καρτέλες, απλώς δεν θα γνωρίζει ποια ιστοσελίδα αντιστοιχεί σε αυτές τις καρτέλες.

Φαίνεται πολύ αθώο; Το tabs.create() API είναι κάπως λιγότερο. Μπορεί να χρησιμοποιηθεί για να δημιουργήσει μια νέα καρτέλα, ουσιαστικά το ίδιο με το window.open() που μπορεί να κληθεί από οποιαδήποτε ιστοσελίδα. Ωστόσο, ενώ το window.open() υπόκειται στον φραγμό αναδυόμενων παραθύρων, το tabs.create() δεν είναι.

{% hint style="danger" %} Μια επέκταση μπορεί να δημιουργήσει οποιονδήποτε αριθμό καρτελών όποτε το επιθυμεί. {% endhint %}

Αν εξετάσετε τις παραμέτρους που είναι δυνατό να δοθούν στο tabs.create(), θα παρατηρήσετε επίσης ότι οι δυνατότητές του υπερβαίνουν κατά πολύ αυτές που επιτρέπονται στο window.open(). Και ενώ ο Firefox δεν επιτρέπει τη χρήση διευθύνσεων data: με αυτό το API, ο Chrome δεν έχει τέτοια προστασία. Η χρήση τέτοιων διευθύνσεων URI στο επίπεδο κορυφής έχει απαγορευτεί λόγω κατάχρησης για phishing.

Το tabs.update() είναι πολύ παρόμοιο με το tabs.create() αλλά θα τροποποιήσει μια υπάρχουσα καρτέλα. Έτσι, μια κακόβουλη επέκταση μπορεί για παράδειγμα να φορτώσει αυθαίρετα μια σελίδα διαφήμισης σε μια από τις καρτέλες σας και μπορεί επίσης να ενεργοποιήσει την αντίστοιχη καρτέλα.

Webcam, γεωγραφική τοποθεσία και φίλοι

Πιθανότατα γνωρίζετε ότι οι ιστοσελίδες μπορούν να ζητήσουν ειδικές άδειες, για παράδειγμα για να έχουν πρόσβαση στην κάμερά σας (εργαλεία βιντεοδιάσκεψης) ή στη γεωγραφική σας τοποθεσία (χάρτες). Πρόκειται για χαρακτηριστικά με σημαντικό δυναμικό κατάχρησης, οπότε οι χρήστες πρέπει κάθε φορά να επιβεβαιώνουν ότι εξακολουθούν να το επιθυμούν.

{% hint style="danger" %} Δεν συμβαίνει το ίδιο με τις επεκτάσεις προγράμματος περιήγησης. Αν μια επέκταση προγράμματος περιήγησης θέλει πρόσβαση στην κάμερά σας ή το μικρόφωνό σας, χρειάζεται να ζητήσει άδεια μόνο μία φορά {% endhint %}

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

Με πρόσβαση στην ακριβή γεωγραφική σας τοποθεσία ή περιεχόμενα του πρόχειρου σας, η ρητή χορήγηση άδειας είναι περιττή. Μια επέκταση απλώς προσθέτει geolocation ή clipboard στην [καταχώριση δικαιωμάτων](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/Web

Αναφορές

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

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