14 KiB
BrowExt - permissions & host_permissions
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Basic Information
permissions
I permessi sono definiti nel file manifest.json
dell'estensione utilizzando la proprietà permissions
e consentono l'accesso a quasi tutto ciò a cui un browser può accedere (Cookie o Archiviazione Fisica):
Il manifest precedente dichiara che l'estensione richiede il permesso storage
. Questo significa che può utilizzare l'API di archiviazione per memorizzare i propri dati in modo persistente. A differenza dei cookie o delle API localStorage
che offrono agli utenti un certo livello di controllo, l'archiviazione dell'estensione può normalmente essere cancellata solo disinstallando l'estensione.
Un'estensione richiederà i permessi indicati nel suo file manifest.json
e dopo aver installato l'estensione, puoi sempre controllare i suoi permessi nel tuo browser, come mostrato in questa immagine:
Puoi trovare la lista completa dei permessi che un'estensione del browser Chromium può richiedere qui e una lista completa per le estensioni di Firefox qui.
host_permissions
L'impostazione facoltativa ma potente host_permissions
indica con quali host l'estensione sarà in grado di interagire tramite API come cookies
, webRequest
e tabs
.
I seguenti host_permissions
consentono fondamentalmente a ogni web:
"host_permissions": [
"*://*/*"
]
// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]
// Or:
"host_permissions": [
"<all_urls>"
]
Questi sono gli host a cui l'estensione del browser può accedere liberamente. Questo perché quando un'estensione del browser chiama fetch("https://gmail.com/")
non è soggetta a restrizioni CORS.
Abusare di permissions
e host_permissions
Tabs
Inoltre, host_permissions
sblocca anche la funzionalità “avanzata” tabs API . Consentono all'estensione di chiamare tabs.query() e non solo di ottenere un elenco delle schede del browser dell'utente ma anche di scoprire quale pagina web (cioè indirizzo e titolo) è caricata.
{% hint style="danger" %} Non solo, i listener come tabs.onUpdated diventano molto più utili. Questi verranno notificati ogni volta che una nuova pagina viene caricata in una scheda. {% endhint %}
Esecuzione di script di contenuto
Gli script di contenuto non devono necessariamente essere scritti staticamente nel manifesto dell'estensione. Date sufficienti host_permissions
, le estensioni possono anche caricarli dinamicamente chiamando tabs.executeScript() o scripting.executeScript().
Entrambi gli API consentono di eseguire non solo file contenuti nelle estensioni come script di contenuto, ma anche codice arbitrario. Il primo consente di passare codice JavaScript come stringa, mentre il secondo si aspetta una funzione JavaScript che è meno soggetta a vulnerabilità di iniezione. Tuttavia, entrambi gli API possono causare danni se usati in modo improprio.
{% hint style="danger" %} Oltre alle capacità sopra, gli script di contenuto potrebbero ad esempio intercettare le credenziali mentre vengono inserite nelle pagine web. Un altro modo classico per abusarne è iniettare pubblicità su ogni singolo sito web. Aggiungere messaggi truffa per abusare della credibilità dei siti di notizie è anche possibile. Infine, potrebbero manipolare i siti web bancari per reindirizzare i trasferimenti di denaro. {% endhint %}
Privilegi impliciti
Alcuni privilegi delle estensioni non devono essere dichiarati esplicitamente. Un esempio è l'API tabs: la sua funzionalità di base è accessibile senza alcun privilegio. Qualsiasi estensione può essere notificata quando apri e chiudi schede, semplicemente non saprà a quale sito web corrispondono queste schede.
Sembra troppo innocuo? L'API tabs.create() è un po' meno così. Può essere utilizzata per creare una nuova scheda, essenzialmente la stessa di window.open() che può essere chiamata da qualsiasi sito web. Eppure, mentre window.open()
è soggetta al blocco dei pop-up, tabs.create()
non lo è.
{% hint style="danger" %} Un'estensione può creare qualsiasi numero di schede ogni volta che vuole. {% endhint %}
Se guardi attraverso i possibili parametri di tabs.create()
, noterai anche che le sue capacità vanno ben oltre ciò che window.open()
è autorizzata a controllare. E mentre Firefox non consente l'uso di URI data:
con questa API, Chrome non ha tale protezione. L'uso di tali URI a livello superiore è stato vietato a causa di abusi per phishing.
tabs.update() è molto simile a tabs.create()
ma modificherà una scheda esistente. Quindi un'estensione malevola può ad esempio caricare arbitrariamente una pagina pubblicitaria in una delle tue schede e può attivare anche la scheda corrispondente.
Webcam, geolocalizzazione e amici
Probabilmente sai che i siti web possono richiedere permessi speciali, ad esempio per accedere alla tua webcam (strumenti di videoconferenza) o alla tua posizione geografica (mappe). Sono funzionalità con un potenziale considerevole per abusi, quindi gli utenti devono confermare ogni volta che vogliono ancora questo.
{% hint style="danger" %} Non così con le estensioni del browser. Se un'estensione del browser vuole accedere alla tua webcam o al microfono, ha bisogno di chiedere il permesso solo una volta {% endhint %}
Tipicamente, un'estensione lo farà immediatamente dopo essere stata installata. Una volta che questo avviso è accettato, l'accesso alla webcam è possibile in qualsiasi momento, anche se l'utente non sta interagendo con l'estensione in quel momento. Sì, un utente accetterà questo avviso solo se l'estensione ha davvero bisogno dell'accesso alla webcam. Ma dopo devono fidarsi dell'estensione per non registrare nulla di nascosto.
Con accesso alla tua esatta posizione geografica o contenuti degli appunti, concedere il permesso esplicitamente è del tutto superfluo. Un'estensione aggiunge semplicemente geolocation
o clipboard
all' voce dei permessi del suo manifesto. Questi privilegi di accesso vengono quindi concessi implicitamente quando l'estensione viene installata. Quindi un'estensione malevola o compromessa con questi privilegi può creare il tuo profilo di movimento o monitorare i tuoi appunti per le password copiate senza che tu te ne accorga.
Aggiungere la parola chiave history
all'voce dei permessi del manifesto dell'estensione concede accesso all' API history. Consente di recuperare l'intera cronologia di navigazione dell'utente tutto in una volta, senza aspettare che l'utente visiti nuovamente questi siti web.
Il permesso bookmarks
ha un potenziale di abuso simile, questo consente di leggere tutti i segnalibri tramite l' API bookmarks.
Permesso di archiviazione
L'archiviazione dell'estensione è semplicemente una raccolta chiave-valore, molto simile a localStorage che qualsiasi sito web potrebbe utilizzare. Quindi nessuna informazione sensibile dovrebbe essere memorizzata qui.
Tuttavia, le aziende pubblicitarie potrebbero anche abusare di questo spazio di archiviazione.
Maggiori permessi
Puoi trovare la lista completa dei permessi che un'estensione del browser Chromium può richiedere qui e una lista completa per le estensioni Firefox qui.
Prevenzione
La politica degli sviluppatori di Google vieta esplicitamente alle estensioni di richiedere più privilegi di quanto necessario per la loro funzionalità, mitigando efficacemente le richieste eccessive di permessi. Un caso in cui un'estensione del browser ha oltrepassato questo confine ha coinvolto la sua distribuzione con il browser stesso piuttosto che attraverso un negozio di componenti aggiuntivi.
I browser potrebbero ulteriormente limitare l'abuso dei privilegi delle estensioni. Ad esempio, le API tabCapture e desktopCapture di Chrome, utilizzate per la registrazione dello schermo, sono progettate per ridurre al minimo gli abusi. L'API tabCapture può essere attivata solo attraverso l'interazione diretta dell'utente, come cliccare sull'icona dell'estensione, mentre desktopCapture richiede la conferma dell'utente per la finestra da registrare, prevenendo attività di registrazione clandestina.
Tuttavia, inasprire le misure di sicurezza spesso comporta una diminuzione della flessibilità e della facilità d'uso delle estensioni. Il permesso activeTab illustra questo compromesso. È stato introdotto per eliminare la necessità per le estensioni di richiedere privilegi host su tutta Internet, consentendo alle estensioni di accedere solo alla scheda corrente su attivazione esplicita da parte dell'utente. Questo modello è efficace per le estensioni che richiedono azioni avviate dall'utente, ma non è sufficiente per quelle che richiedono azioni automatiche o preventive, compromettendo così la comodità e la reattività immediata.
Riferimenti
- https://palant.info/2022/08/17/impact-of-extension-privileges/
- https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing
{% hint style="success" %}
Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos di github.