Webview Attacks
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Un aspetto critico dello sviluppo Android riguarda la corretta gestione delle WebView. Questa guida evidenzia le configurazioni chiave e le pratiche di sicurezza per mitigare i rischi associati all'uso delle WebView.
Per impostazione predefinita, le WebView consentono l'accesso ai file. Questa funzionalità è controllata dal metodo setAllowFileAccess()
, disponibile dalla versione 3 dell'API Android (Cupcake 1.5). Le applicazioni con il permesso android.permission.READ_EXTERNAL_STORAGE possono leggere file dalla memoria esterna utilizzando uno schema URL di file (file://path/to/file
).
Accesso Universale da URL di File: Questa funzionalità deprecata consentiva richieste cross-origin da URL di file, ponendo un rischio significativo per la sicurezza a causa di potenziali attacchi XSS. L'impostazione predefinita è disabilitata (false
) per le app destinate ad Android Jelly Bean e versioni successive.
Per controllare questa impostazione, utilizzare getAllowUniversalAccessFromFileURLs()
.
Per modificare questa impostazione, utilizzare setAllowUniversalAccessFromFileURLs(boolean)
.
Accesso ai File da URL di File: Questa funzionalità, anch'essa deprecata, controllava l'accesso ai contenuti da altri URL di schema file. Come l'accesso universale, la sua impostazione predefinita è disabilitata per una maggiore sicurezza.
Utilizzare getAllowFileAccessFromFileURLs()
per controllare e setAllowFileAccessFromFileURLs(boolean)
per impostare.
Per disabilitare l'accesso al file system pur accedendo a risorse e asset, si utilizza il metodo setAllowFileAccess()
. Con Android R e versioni successive, l'impostazione predefinita è false
.
Controllare con getAllowFileAccess()
.
Abilitare o disabilitare con setAllowFileAccess(boolean)
.
La classe WebViewAssetLoader è l'approccio moderno per il caricamento di file locali. Utilizza URL http(s) per accedere ad asset e risorse locali, allineandosi con la politica Same-Origin, facilitando così la gestione del CORS.
Questa è una funzione comune utilizzata per caricare URL arbitrari in una webview:
Ofc, un potenziale attaccante non dovrebbe mai essere in grado di controllare l'URL che un'applicazione sta per caricare.
JavaScript: Disabilitato per impostazione predefinita nei WebView, può essere abilitato tramite setJavaScriptEnabled()
. Si consiglia cautela poiché abilitare JavaScript senza le giuste protezioni può introdurre vulnerabilità di sicurezza.
Intent Scheme: I WebView possono gestire lo schema intent
, potenzialmente portando a exploit se non gestito con attenzione. Un esempio di vulnerabilità riguardava un parametro WebView esposto "support_url" che poteva essere sfruttato per eseguire attacchi di cross-site scripting (XSS).
Esempio di sfruttamento utilizzando adb:
Una funzionalità è fornita da Android che consente a JavaScript in un WebView di invocare funzioni native delle app Android. Questo viene realizzato utilizzando il metodo addJavascriptInterface
, che integra JavaScript con le funzionalità native di Android, definito come un WebView JavaScript bridge. Si consiglia cautela poiché questo metodo consente a tutte le pagine all'interno del WebView di accedere all'oggetto JavaScript Interface registrato, presentando un rischio per la sicurezza se informazioni sensibili vengono esposte attraverso queste interfacce.
È necessaria un'estrema cautela per le app destinate a versioni di Android inferiori alla 4.2 a causa di una vulnerabilità che consente l'esecuzione di codice remoto tramite JavaScript malevolo, sfruttando la riflessione.
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:
Potenziale sfruttamento tramite JavaScript, ad esempio, tramite un attacco XSS, consente la chiamata di metodi Java esposti:
Per mitigare i rischi, limitare l'uso del ponte JavaScript al codice fornito con l'APK e impedire il caricamento di JavaScript da fonti remote. Per i dispositivi più vecchi, impostare il livello API minimo a 17.
Un metodo documentato consente di ottenere RCE tramite riflesso eseguendo un payload specifico. Tuttavia, l'annotazione @JavascriptInterface
impedisce l'accesso non autorizzato ai metodi, limitando la superficie di attacco.
Il debug remoto è possibile con Chrome Developer Tools, consentendo interazione ed esecuzione arbitraria di JavaScript all'interno del contenuto WebView.
Il debug remoto può essere abilitato per tutti i WebView all'interno di un'applicazione tramite:
Per abilitare il debug in modo condizionale in base allo stato debuggable dell'applicazione:
Dimostra l'esfiltrazione di file arbitrari utilizzando un XMLHttpRequest:
Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)