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

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
{% endhint %}

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

{% 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
{% endhint %}