BrowExt - permessi & host_permissions
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
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 github.
Informazioni di base
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 controllare sempre i suoi permessi nel tuo browser, come mostrato in questa immagine:
.png)
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 è limitata da CORS.
Abusare di permissions e host_permissions
Schede
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.
Caution
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.
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 utilizzati in modo improprio.
Caution
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 bancari per reindirizzare i trasferimenti di denaro.
Privilegi impliciti
Alcuni privilegi delle estensioni non devono essere dichiarati esplicitamente. Un esempio è lâAPI delle schede: 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 cosa di window.open() che può essere chiamata da qualsiasi sito web. Tuttavia, mentre window.open() è soggetto al blocco dei pop-up, tabs.create() non lo è.
Caution
Unâestensione può creare qualsiasi numero di schede ogni volta che vuole.
Se guardi attraverso i possibili parametri di tabs.create(), noterai anche che le sue capacitĂ vanno ben oltre ciò che window.open() è autorizzato 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 posizione geografica (mappe). Sono funzionalitĂ con un potenziale considerevole per abusi, quindi gli utenti devono confermare ogni volta che vogliono ancora questo.
Caution
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
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 della cronologia. 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 dei segnalibri.
Permesso di archiviazione
Lâarchiviazione dellâestensione è semplicemente una raccolta di chiavi e valori, 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 il clic sullâicona dellâestensione, mentre desktopCapture richiede la conferma dellâutente per la registrazione della finestra, prevenendo attivitĂ di registrazione clandestina.
Tuttavia, il rafforzamento delle 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 tutto 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
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
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 github.
HackTricks

