Webview Attacks
Guida sulle Configurazioni e la Sicurezza di WebView
Panoramica delle Vulnerabilità di WebView
Un aspetto critico dello sviluppo Android coinvolge la corretta gestione delle WebViews. Questa guida mette in evidenza le configurazioni chiave e le pratiche di sicurezza per mitigare i rischi associati all'uso di WebView.
Accesso ai File nelle WebViews
Per impostazione predefinita, le WebViews permettono l'accesso ai file. Questa funzionalità è controllata dal metodo setAllowFileAccess()
, disponibile da Android API livello 3 (Cupcake 1.5). Le applicazioni con il permesso android.permission.READ_EXTERNAL_STORAGE possono leggere file dalla memoria esterna utilizzando uno schema di URL file (file://percorso/al/file
).
Funzionalità Deprecate: Accesso Universale e Accesso ai File da URL
Accesso Universale da URL File: Questa funzionalità deprecata consentiva richieste cross-origin da URL file, rappresentando un rischio di sicurezza significativo a causa dei potenziali attacchi XSS. L'impostazione predefinita è disabilitata (
false
) per le app che mirano a Android Jelly Bean e versioni successive.Per verificare questa impostazione, utilizzare
getAllowUniversalAccessFromFileURLs()
.Per modificare questa impostazione, utilizzare
setAllowUniversalAccessFromFileURLs(boolean)
.Accesso ai File da URL File: Questa funzionalità, anch'essa deprecata, controllava l'accesso ai contenuti da altri URL con schema file. Come l'accesso universale, l'impostazione predefinita è disabilitata per una maggiore sicurezza.
Utilizzare
getAllowFileAccessFromFileURLs()
per verificare esetAllowFileAccessFromFileURLs(boolean)
per impostare.
Caricamento Sicuro dei File
Per disabilitare l'accesso al sistema di file pur consentendo l'accesso alle risorse e ai file, viene utilizzato il metodo setAllowFileAccess()
. Con Android R e versioni successive, l'impostazione predefinita è false
.
Verificare con
getAllowFileAccess()
.Abilitare o disabilitare con
setAllowFileAccess(boolean)
.
WebViewAssetLoader
La classe WebViewAssetLoader è l'approccio moderno per il caricamento di file locali. Utilizza URL http(s) per accedere alle risorse e ai file locali, allineandosi alla politica Same-Origin, facilitando così la gestione di CORS.
loadUrl
Questa è una funzione comune utilizzata per caricare URL arbitrari in una webview:
Naturalmente, un potenziale attaccante non dovrebbe mai essere in grado di controllare l'URL che un'applicazione sta per caricare.
Gestione di JavaScript e Intent Scheme
JavaScript: Disabilitato per impostazione predefinita nelle WebViews, può essere abilitato tramite
setJavaScriptEnabled()
. Si consiglia cautela poiché abilitare JavaScript senza adeguate protezioni può introdurre vulnerabilità di sicurezza.Intent Scheme: Le WebViews possono gestire lo schema
intent
, potenzialmente portando a exploit se non gestito attentamente. Un esempio di vulnerabilità coinvolgeva un parametro WebView esposto "support_url" che poteva essere sfruttato per eseguire attacchi di scripting tra siti (XSS).
Esempio di sfruttamento utilizzando adb:
Ponte JavaScript
Una funzionalità è fornita da Android che consente a JavaScript in un WebView di invocare funzioni dell'applicazione Android nativa. Ciò è realizzato utilizzando il metodo addJavascriptInterface
, che integra JavaScript con le funzionalità native di Android, definito come un ponte JavaScript di WebView. Si consiglia cautela poiché questo metodo consente a tutte le pagine all'interno del WebView di accedere all'oggetto JavaScript Interface registrato, creando un rischio di sicurezza se informazioni sensibili sono esposte attraverso queste interfacce.
È richiesta estrema cautela per le app che mirano a versioni di Android precedenti alla 4.2 a causa di una vulnerabilità che consente l'esecuzione di codice remoto attraverso JavaScript dannoso, sfruttando la riflessione.
Implementazione di un Ponte JavaScript
Le interfacce JavaScript possono interagire con il codice nativo, come mostrato negli esempi in cui un metodo di classe è esposto a JavaScript:
Il JavaScript Bridge è abilitato aggiungendo un'interfaccia al WebView:
Possibile sfruttamento tramite JavaScript, ad esempio, tramite un attacco XSS, consente di chiamare metodi Java esposti:
Per ridurre i rischi, limitare l'uso del ponte JavaScript al codice incluso nell'APK e impedire il caricamento di JavaScript da fonti remote. Per i dispositivi più vecchi, impostare il livello API minimo su 17.
Esecuzione di codice remoto basata su riflessione (RCE)
Un metodo documentato consente di ottenere RCE attraverso la riflessione eseguendo un payload specifico. Tuttavia, l'annotazione
@JavascriptInterface
impedisce l'accesso non autorizzato ai metodi, limitando la superficie di attacco.
Debug remoto
Il debug remoto è possibile con Chrome Developer Tools, consentendo l'interazione e l'esecuzione arbitraria di JavaScript all'interno del contenuto WebView.
Abilitazione del debug remoto
Il debug remoto può essere abilitato per tutte le WebView all'interno di un'applicazione tramite:
Per abilitare condizionalmente il debug in base allo stato di debug dell'applicazione:
Estrarre file arbitrari
Dimostra l'estrazione di file arbitrari utilizzando un XMLHttpRequest:
Riferimenti
Last updated