Script per più app

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 su True nel 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 esplicitamente setAllowFileAccess su False
  • 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, imposta setAllowContentAccess su False per 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 = false

  • java 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