Categoria OWASP: MASVS-CODE: Code Quality
Panoramica
Un WebView è un componente del browser incorporato nelle applicazioni Android che facilita la visualizzazione di contenuti web all'interno di un'app. Esegue il rendering di HTML, CSS e JavaScript all'interno dell'interfaccia utente dell'app.
Il cross-app scripting è ampiamente associato all'esecuzione di codice dannoso nel contesto di un'applicazione vittima. Ai fini di questa documentazione, l'argomento sarà limitato specificamente all'inserimento di codice JavaScript dannoso in un componente WebView vulnerabile.
Quando un'app accetta JavaScript dannoso in un componente WebView senza una convalida o una sanificazione sufficienti, l'applicazione è vulnerabile al cross-app scripting.
Impatto
Le vulnerabilità di cross-app scripting possono essere sfruttate quando i contenuti JavaScript controllati dall'attaccante vengono passati al componente WebView dell'app vulnerabile senza essere convalidati o sottoposti a sanitizzazione. Di conseguenza, il codice JavaScript fornito dall'autore dell'attacco viene eseguito nel contesto di WebView dell'applicazione vittima. Il codice JavaScript dannoso può quindi utilizzare le stesse autorizzazioni dell'app vittima, il che può portare al furto di dati utente sensibili e al compromesso dell'account.
Mitigazioni
Viene disattivato JavaScript
Se la tua applicazione non richiede JavaScript, la disattivazione garantirà che non diventi una minaccia:
Kotlin
// Get the WebView Object
val webView = findViewById<WebView>(R.id.webView)
val webSettings = webView.settings
// Disable JavaScript
webSettings.javaScriptEnabled = false
Java
// Get the WebView Object
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
// Disable JavaScript for the WebView
webSettings.setJavaScriptEnabled(false);
Se la tua applicazione richiede JavaScript, assicurati di possedere o controllare qualsiasi JavaScript passato a WebView. Evita di consentire a WebView di eseguire JavaScript arbitrario, consulta le indicazioni nella sezione successiva.
Assicurati che nella WebView vengano caricati solo i contenuti previsti
Quando utilizzi metodi come shouldOverrideUrlLoading(), loadUrl() o
evaluateJavascript(),, assicurati che tutti gli URL passati vengano
controllati. Come indicato in precedenza, qualsiasi JavaScript passato a WebView deve provenire solo dai domini previsti, pertanto è importante verificare cosa viene caricato.
Consulta la documentazione sulla convalida dell'input di OWASP e questo elenco di controllo della sicurezza di Android per WebView per consigli ed esempi utili.
Impostare le impostazioni di accesso sicuro ai file per WebView
Assicurarsi che i file non siano accessibili può impedire l'esecuzione di JavaScript arbitrario all'interno di WebView.Quando proteggi l'accesso ai file, devi prendere in considerazione il seguente WebSettings:
- Disattiva l'accesso ai file. Per impostazione predefinita,
setAllowFileAccessè impostato suTruenel livello API 29 e versioni precedenti, il che consente l'accesso ai file locali. Nel livello API 30 e versioni successive, il valore predefinito èFalse. Per assicurarti che l'accesso ai file non sia consentito, imposta esplicitamentesetAllowFileAccesssuFalse Disattiva l'accesso ai contenuti. L'impostazione predefinita di
setAllowContentAccessèTrue. L'accesso all'URL dei contenuti consente a WebView di caricare contenuti da un provider di contenuti installato nel sistema. Se la tua app non richiede l'accesso ai contenuti, impostasetAllowContentAccesssuFalseper evitare potenziali abusi in caso di attacco di scripting cross-app.kotlin
kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = falsejava
java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false);
Consenti Navigazione sicura
Attiva Navigazione sicura in AndroidManifest.xml per analizzare gli URL passati a
WebView alla ricerca di domini di phishing o dannosi:
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
Risorse
- Documentazione di Navigazione sicura
- Riferimento per gli sviluppatori di WebView
- WebSettings per il riferimento per gli sviluppatori di WebView
- Documentazione per gli sviluppatori di setAllowFileAccess
- setAllowContentAccess developer reference