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

117 lines
16 KiB
Markdown
Raw Normal View History

2024-02-10 22:40:18 +00:00
# BrowExt - άδειες & host\_permissions
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
2023-12-31 01:25:17 +00:00
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
2024-02-10 22:40:18 +00:00
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2024-02-10 22:40:18 +00:00
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>
2024-02-10 22:40:18 +00:00
## Βασικές Πληροφορίες
### **`permissions`**
Οι άδειες ορίζονται στο αρχείο **`manifest.json`** της επέκτασης χρησιμοποιώντας την ιδιότητα **`permissions`** και επιτρέπουν πρόσβαση σε σχεδόν οτιδήποτε μπορεί να έχει πρόσβαση ένας περιηγητής (Cookies ή Φυσική Αποθήκευση):
Το προηγούμενο manifest δηλώνει ότι η επέκταση απαιτεί την άδεια `storage`. Αυτό σημαίνει ότι μπορεί να χρησιμοποιήσει [το API αποθήκευσης](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) για να αποθηκεύσει τα δεδομένα της με μόνιμο τρόπο. Αντίθετα με τα cookies ή τα APIs του `localStorage` που δίνουν στους χρήστες κάποιο επίπεδο ελέγχου, **η αποθήκευση της επέκτασης μπορεί συνήθως να διαγραφεί μόνο με την απεγκατάσταση της επέκτασης**.
Μια επέκταση θα ζητήσει τις άδειες που υποδηλώνονται στο αρχείο **`manifest.json`** της και Μετά την εγκατάσταση της επέκτασης, μπορείτε **πάντα να ελέγξετε τις άδειές της στον περιηγητή σας**, όπως φαίνεται σε αυτήν την εικόνα:
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
Μπορείτε να βρείτε τη [**πλήρη λίστα των αδειών που μπορεί να ζητήσει μια Επέκταση Περιηγητή Chromium εδώ**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) και μια [**πλήρη λίστα για τις επεκτάσεις Firefox εδώ**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**.**
### `host_permissions`
Η προαιρετική αλλά ισχυρή ρύθμιση **`host_permissions`** υποδεικνύει με ποιους hosts η επέκταση θα μπορεί να αλληλεπιδρά μέσω των APIs όπως οι [`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest) και [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs).
Οι παρακάτω `host_permissions` επιτρέπουν βασικά σε κάθε ιστοσελίδα:
```json
"host_permissions": [
2024-02-10 22:40:18 +00:00
"*://*/*"
]
// Or:
"host_permissions": [
2024-02-10 22:40:18 +00:00
"http://*/*",
"https://*/*"
]
// Or:
"host_permissions": [
2024-02-10 22:40:18 +00:00
"<all_urls>"
]
```
Αυτοί είναι οι hosts που η επέκταση του προγράμματος περιήγησης μπορεί να έχει πρόσβαση ελεύθερα. Αυτό συμβαίνει επειδή όταν μια επέκταση προγράμματος περιήγησης καλεί **`fetch("https://gmail.com/")`** δεν περιορίζεται από το CORS.
## Κατάχρηση `permissions` και `host_permissions`
2024-02-10 22:40:18 +00:00
### Καρτέλες
Επιπλέον, τα **`host_permissions`** ξεκλειδώνουν επίσης την "προηγμένη" [**tabs API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) **λειτουργικότητα**. Επιτρέπουν στην επέκταση να καλεί [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) και όχι μόνο να λαμβάνει πίσω μια **λίστα με τις καρτέλες περιήγησης του χρήστη** αλλά επίσης να μάθει ποια **ιστοσελίδα (σημαίνει διεύθυνση και τίτλο) είναι φορτωμένη**.
{% hint style="danger" %}
Όχι μόνο αυτό, ακροατές όπως [**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) γίνονται επίσης πολύ πιο χρήσιμοι. Θα ειδοποιούνται κάθε φορά που μια νέα σελίδα φορτώνεται σε μια καρτέλα.
{% endhint %}
2024-02-10 22:40:18 +00:00
### Εκτέλεση σεναρίων περιεχομένου <a href="#running-content-scripts" id="running-content-scripts"></a>
Τα σενάρια περιεχομένου δεν είναι απαραίτητα γραμμένα στατικά στον κατάλογο της επέκτασης. Δεδομένων των επαρκών **`host_permissions`**, οι **επεκτάσεις μπορούν επίσης να τα φορτώσουν δυναμικά καλώντας** [**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **ή** [**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript).
Και οι δύο API επιτρέπουν την εκτέλεση όχι μόνο αρχείων που περιέχονται στις επεκτάσεις ως σενάρια περιεχομένου αλλά και **αυθαίρετου κώδικα**. Το πρώτο επιτρέπει την παράδοση κώδικα JavaScript ως συμβολοσειρά ενώ το δεύτερο προσδοκά ένα λειτουργικό JavaScript που είναι λιγότερο ευάλωτο σε ευπάθειες εισαγωγής. Παρόλα αυτά, και τα δύο API θα προκαλέσουν χάος αν χρησιμοποιηθούν κατάχρηση.
{% hint style="danger" %}
Εκτός από τις δυνατότητες που αναφέρθηκαν παραπάνω, τα σενάρια περιεχομένου θα μπορούσαν για παράδειγμα να **παρακολουθήσουν διαπιστευτήρια** καθώς αυτά εισάγονται σε ιστοσελίδες. Ένας κλασικός τρόπος κατάχρησής τους είναι η **ενσωμάτωση διαφημίσεων** σε κάθε ιστοσελίδα. Είναι επίσης δυνατό να προστεθούν **απάτες μηνυμάτων** για να καταχραστεί η αξιοπιστία ιστοσελίδων ειδήσεων. Τέλος, θα μπορούσαν να **διαμορφώσουν ιστοσελίδες τραπεζών** για την ανακατεύθυνση μεταφορών χρημάτων.
{% endhint %}
### Εμπλοκή προνομίων <a href="#implicit-privileges" id="implicit-privileges"></a>
Κάποια προνόμια επέκτασης **δεν χρειάζεται να δηλωθούν ρητά**. Ένα παράδειγμα είναι το [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs): η βασική του λειτουργικότητα είναι προσβάσιμη χωρίς κανένα προνόμιο. Οποιαδήποτε επέκταση μπορεί να ειδοποιηθεί όταν ανοίγετε και κλείνετε καρτέλες, απλώς δεν θα γνωρίζει ποια ιστοσελίδα αντιστοιχεί σε αυτές τις καρτέλες.
Φαίνεται πολύ αθώο; Το [tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) είναι κάπως λιγότερο. Μπορεί να χρησιμοποιηθεί για να **δημιουργήσει μια νέα καρτέλα**, ουσιαστικά το ίδιο με το [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) που μπορεί να κληθεί από οποιαδήποτε ιστοσελίδα. Ωστόσο, ενώ το `window.open()` υπόκειται στον **φραγμό αναδυόμενων παραθύρων, το `tabs.create()` δεν είναι**.
{% hint style="danger" %}
Μια επέκταση μπορεί να δημιουργήσει οποιονδήποτε αριθμό καρτελών όποτε το επιθυμεί.
{% endhint %}
Αν εξετάσετε τις παραμέτρους που είναι δυνατό να δοθούν στο `tabs.create()`, θα παρατηρήσετε επίσης ότι οι δυνατότητές του υπερβαίνουν κατά πολύ αυτές που επιτρέπονται στο `window.open()`. Και ενώ ο Firefox δεν επιτρέπει τη χρήση διευθύνσεων `data:` με αυτό το API, ο Chrome δεν έχει τέτοια προστασία. **Η χρήση τέτοιων διευθύνσεων URI στο επίπεδο κορυφής έχει απαγορευτεί λόγω κατάχρησης για phishing**.
Το [**tabs.update()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update) είναι πολύ παρόμοιο με το `tabs.create()` αλλά θα **τροποποιήσει μια υπάρχουσα καρτέλα**. Έτσι, μια κακόβουλη επέκταση μπορεί για παράδειγμα να φορτώσει αυθαίρετα μια σελίδα διαφήμισης σε μια από τις καρτέλες σας και μπορεί επίσης να ενεργοποιήσει την αντίστοιχη καρτέλα.
### Webcam, γεωγραφική τοποθεσία και φίλοι <a href="#webcam-geolocation-and-friends" id="webcam-geolocation-and-friends"></a>
Πιθανότατα γνωρίζετε ότι οι ιστοσελίδες μπορούν να ζητήσουν ειδικές άδειες, για παράδειγμα για να έχουν πρόσβαση στην κάμερά σας (εργαλεία βιντεοδιάσκεψης) ή στη γεωγραφική σας τοποθεσία (χάρτες). Πρόκειται για χαρακτηριστικά με σημαντικό δυναμικό κατάχρησης, οπότε οι χρήστες πρέπει κάθε φορά να επιβεβαιώνουν ότι εξακολουθούν να το επιθυμούν.
{% hint style="danger" %}
Δεν συμβαίνει το ίδιο με τις επεκτάσεις προγράμματος περιήγησης. **Αν μια επέκταση προγράμματος περιήγησης** [**θέλει πρόσβαση στην κάμερά σας ή το μικρόφωνό σας**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, χρειάζεται να ζητήσει άδεια μόνο μία φορά**
{% endhint %}
Συνήθως, μια επέκταση θα το κάνει αμέσως μετά την εγκατάστασή της. Μόλις αποδεχτείτε αυτήν την πρόταση, **η πρόσβαση στην κάμερα είναι δυνατή ανά πάσα στιγμή**, ακόμα και αν ο χρήστης δεν αλληλεπιδρά με την επέκταση σε αυτό το σημείο. Ναι, ένας χρήστης θα αποδεχτεί αυτήν την πρόταση μόνο αν η επέκταση χρειάζεται πραγματικά πρόσβαση στην κάμερα. Αλλά μετά από αυτό πρέπει να εμπιστευτεί την επέκταση να μην καταγράφει κρυφά τίποτα.
Με πρόσβαση στην [ακριβή γεωγραφική σας τοποθεσία](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) ή [περιεχόμενα του πρόχειρου σας](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API), η ρητή χορήγηση άδειας είναι περιττή. **Μια επέκταση απλώς προσθέτει `geolocation` ή `clipboard` στην** [**καταχώριση δικαιωμάτων**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/Web
2024-02-10 22:40:18 +00:00
## **Αναφορές**
* [https://palant.info/2022/08/17/impact-of-extension-privileges/](https://palant.info/2022/08/17/impact-of-extension-privileges/)
* [https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing](https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing)
<details>
2024-02-10 22:40:18 +00:00
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
2023-12-31 01:25:17 +00:00
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
2024-02-10 22:40:18 +00:00
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>