BrowExt - permissions & host_permissions

Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

Informazioni di base

permissions

Le autorizzazioni sono definite 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 manifesto precedente dichiara che l'estensione richiede l'autorizzazione storage. Ciò significa che può utilizzare l'API di archiviazione per memorizzare i suoi dati in modo persistente. A differenza dei cookie o delle API localStorage che danno agli utenti un certo livello di controllo, l'archiviazione dell'estensione può normalmente essere cancellata solo disinstallando l'estensione.

Un'estensione richiederà le autorizzazioni indicate nel suo file manifest.json e dopo aver installato l'estensione, puoi sempre controllare le sue autorizzazioni nel tuo browser, come mostrato in questa immagine:

Puoi trovare l'elenco completo delle autorizzazioni che un'estensione del browser Chromium può richiedere qui e un elenco completo per le estensioni Firefox qui.

host_permissions

L'impostazione opzionale ma potente host_permissions indica con quali host l'estensione sarà in grado di interagire tramite API come cookies, webRequest e tabs.

Le seguenti host_permissions permettono praticamente a ogni sito 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. Ciò avviene perché quando un'estensione del browser chiama fetch("https://gmail.com/") non è limitata da CORS.

Abuso di permissions e host_permissions

Schede

Inoltre, host_permissions sbloccano anche la "avanzata" API delle schede. Consentono all'estensione di chiamare tabs.query() e non solo ottenere un elenco delle schede del browser dell'utente, ma anche sapere quale pagina web (indirizzo e titolo) è caricata.

Non solo, i listener come tabs.onUpdated diventano anche molto più utili. Saranno notificati ogni volta che una nuova pagina viene caricata in una scheda.

Esecuzione di script di contenuto

Gli script di contenuto non sono necessariamente scritti staticamente nel manifesto dell'estensione. Con sufficienti host_permissions, le estensioni possono anche caricarli dinamicamente chiamando tabs.executeScript() o scripting.executeScript().

Entrambe le API consentono di eseguire non solo file contenuti nelle estensioni come script di contenuto, ma anche codice arbitrario. La prima consente di passare del codice JavaScript come stringa, mentre la seconda si aspetta una funzione JavaScript che è meno soggetta a vulnerabilità di iniezione. Tuttavia, entrambe le API causeranno problemi se usate in modo errato.

Oltre alle capacità sopra menzionate, gli script di contenuto potrebbero ad esempio intercettare credenziali mentre vengono inserite nelle pagine web. Un altro modo classico per abusarne è iniettare pubblicità in ogni sito web. Aggiungere messaggi di truffa per abusare della credibilità dei siti di notizie è anche possibile. Infine, potrebbero manipolare i siti web bancari per dirottare 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 si aprono e si chiudono le schede, semplicemente non saprà a quale sito web corrispondono queste schede.

Sembra troppo innocuo? L'API tabs.create() è un po' meno innocua. 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 popup, tabs.create() non lo è.

Un'estensione può creare quante schede desidera in qualsiasi momento.

Se si esaminano i possibili parametri di tabs.create(), si noterà 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 dell'abuso per il phishing.

tabs.update() è molto simile a tabs.create() ma modificherà una scheda esistente. Quindi un'estensione dannosa 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 notevole potenziale di abuso, quindi gli utenti devono confermare ogni volta che desiderano questo.

Non è così con le estensioni del browser. Se un'estensione del browser vuole accedere alla tua webcam o al microfono, deve chiedere il permesso una sola volta

Tipicamente, un'estensione lo farà immediatamente dopo essere stata installata. Una volta accettato questo prompt, 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 prompt solo se l'estensione ha davvero bisogno dell'accesso alla webcam. Ma dopo di che deve fidarsi dell'estensione di non registrare nulla segretamente.

Con l'accesso alla tua esatta posizione geografica o ai contenuti del tuo appunti, non è affatto necessario concedere esplicitamente il permesso. Un'estensione aggiunge semplicemente geolocation o clipboard all' ingresso dei permessi del suo manifesto. Questi privilegi di accesso vengono quindi concessi implicitamente quando l'estensione viene installata. Quindi un'estensione dannosa o compromessa con questi privilegi può creare il tuo profilo di movimento o monitorare il tuo appunti per password copiate senza che tu te ne accorga.

Aggiungendo la parola history all'ingresso dei permessi del manifesto dell'estensione concede accesso all' API della cronologia. Consente di recuperare l'intera cronologia di navigazione dell'utente in una sola volta, senza dover attendere 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 chiave-valore, molto simile a localStorage che potrebbe essere utilizzata da qualsiasi sito web. Quindi qui non dovrebbero essere memorizzate informazioni sensibili.

Tuttavia, le aziende pubblicitarie potrebbero anche abusare di questa archiviazione.

Altri permessi

Puoi trovare l'elenco completo dei permessi che un'estensione del browser Chromium può richiedere qui e un elenco completo per le estensioni Firefox qui.

Prevenzione

La politica dello sviluppatore di Google vieta esplicitamente alle estensioni di richiedere più privilegi di quelli necessari per la loro funzionalità, mitigando efficacemente le richieste eccessive di permessi. Un caso in cui un'estensione del browser ha superato questo limite coinvolgeva la sua distribuzione con il browser stesso anziché tramite un negozio di componenti aggiuntivi.

I browser potrebbero limitare ulteriormente 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 l'abuso. L'API tabCapture può essere attivata solo attraverso un'interazione diretta dell'utente, ad esempio facendo clic sull'icona dell'estensione, mentre desktopCapture richiede la conferma dell'utente affinché la finestra venga registrata, impedendo attività di registrazione clandestina.

Tuttavia, il rafforzamento delle misure di sicurezza comporta spesso 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 in tutto Internet, consentendo alle estensioni di accedere solo alla scheda corrente previa attivazione esplicita da parte dell'utente. Questo modello è efficace per le estensioni che richiedono azioni avviate dall'utente ma è limitato per quelle che richiedono azioni automatiche o preventive, compromettendo così la comodità e la reattività immediata.

Riferimenti

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated