Categoria OWASP: MASVS-CODE: Qualità del codice
Panoramica
WebView è un componente del browser incorporato nelle applicazioni Android che facilita la visualizzazione dei contenuti web all'interno di un'app. Esegue il rendering di HTML, CSS e JavaScript all'interno dell'interfaccia utente dell'app.
Lo scripting cross-app è generalmente associato all'esecuzione di codice dannoso nel contesto di un'applicazione vittima. Ai fini della presente documentazione, il soggetto sarà vincolato specificamente all'inserimento di malware codice JavaScript in un componente WebView vulnerabile.
Quando un'app accetta JavaScript dannoso in un componente WebView senza convalida o sanificazione sufficienti, l'applicazione è vulnerabile al cross-app scripting.
Impatto
Le vulnerabilità del cross-app scripting possono essere sfruttate quando i soggetti malintenzionati I contenuti JavaScript vengono trasmessi alla WebView dell'app vulnerabile senza essere convalidate o sanitizzate. Di conseguenza, il codice JavaScript fornito l’autore dell’attacco viene eseguito nel contesto della WebView dell’applicazione vittima. Il codice JavaScript dannoso può quindi utilizzare le stesse autorizzazioni dell'app vittima, il che può comportare il furto di dati utente sensibili e il furto d'identità dell'account.
Mitigazioni
Disattivare JavaScript
Se la tua applicazione non richiede JavaScript, la disattivazione garantisce 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 in modo arbitrario JavaScript, consulta le indicazioni nella sezione successiva.
Assicurati che in WebView vengano caricati solo i contenuti previsti
Quando utilizzi metodi come shouldOverrideUrlLoading()
, loadUrl()
o
evaluateJavascript()
,
, assicurati che gli URL che vengono loro passati siano
controllati. Come affermato in precedenza, qualsiasi codice JavaScript passato a WebView deve provenire solo da domini previsti, pertanto è importante verificare cosa viene caricato.
Controlla la documentazione di convalida dell'input di OWASP e questa elenco di controllo per la sicurezza di WebView per trovare consigli ed esempi validi.
Impostare le impostazioni di accesso sicuro ai file per WebView
Garantire che i file non siano accessibili può impedire l'esecuzione di JavaScript arbitrario all'interno di WebView. Quando si protegge l'accesso ai file, devono essere considerati i seguenti WebSettings
:
- Disattiva l'accesso ai file. Per impostazione predefinita,
setAllowFileAccess
è impostato suTrue
nel Livello API 29 e versioni precedenti, il che consente l'accesso ai file locali. Nel livello API 30 mentre se il valore predefinito èFalse
, Per assicurarti che l'accesso ai file non sia consentito, imposta esplicitamentesetAllowFileAccess
suFalse
Disattivare l'accesso ai contenuti. L'impostazione predefinita di
setAllowContentAccess
èTrue
. L'accesso all'URL dei contenuti consente a WebView di caricare contenuti da un fornitore di contenuti installato nel sistema. Se la tua app non richiede l'accesso ai contenuti, ImpostasetAllowContentAccess
suFalse
per prevenire potenziali usi impropri in caso di cross-app scripting.kotlin
kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = false
java
java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false);
Attiva Navigazione sicura
Attiva Navigazione sicura in AndroidManifest.xml
per eseguire la scansione degli URL passati a WebView alla ricerca di phishing o domini dannosi.
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
Risorse
- Documentazione di Navigazione sicura
- Riferimento per gli sviluppatori WebView
- WebSettings per riferimento per gli sviluppatori di WebView
- Documentazione per gli sviluppatori di setAllowFileAccess
- Riferimento per gli sviluppatori a setAllowContentAccess