Script entre apps

Categoria do OWASP: MASVS-CODE - Qualidade do código (link em inglês)

Visão geral

Uma WebView é um componente de navegador incorporado em aplicativos Android que facilita a exibição de conteúdo da Web em um app. Ela renderiza HTML, CSS e JavaScript na interface do usuário do app.

O cross-app scripting é amplamente associado à execução de código malicioso. no contexto de um aplicativo vítima. Para os fins desta documentação, o objeto será limitado especificamente à injeção de malware o código JavaScript em uma WebView vulnerável.

Quando um app aceita JavaScript malicioso em um WebView sem informações suficientes validação ou sanitização, o aplicativo fica vulnerável a ataques a criação de scripts.

Impacto

As vulnerabilidades de cross-app scripting podem ser exploradas quando o conteúdo JavaScript controlado pelo invasor é transmitido para a WebView do app vulnerável sem ser validado ou limpo. Como resultado, o código JavaScript fornecido pelo invasor é executado no contexto da WebView do aplicativo da vítima. O o código JavaScript malicioso pode usar as mesmas permissões do aplicativo da vítima, o que pode levar ao roubo de dados sensíveis do usuário e à invasão da conta.

Mitigações

Desativar JavaScript

Caso seu aplicativo não exija JavaScript, desativá-lo garante que ele não se torna uma ameaça:

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 seu aplicativo exigir JavaScript, certifique-se de que você possui ou controla quaisquer JavaScript transmitido para a WebView. Evite permitir que a WebView execute arquivos JavaScript, consulte a orientação na próxima seção.

Garantir que apenas o conteúdo esperado seja carregado na WebView

Ao usar métodos como shouldOverrideUrlLoading(), loadUrl() ou evaluateJavascript(),, verifique se todos os URLs transmitidos são verificados. Como mencionado anteriormente, qualquer JavaScript transmitido para a WebView só pode vir de domínios esperados. Portanto, é importante verificar o que está sendo carregado.

Consulte a documentação de validação de entrada do OWASP e este comando lista de verificação de segurança para WebViews, com orientações e exemplos úteis.

Definir configurações seguras de acesso a arquivos para a WebView

Garantir que os arquivos não sejam acessíveis pode impedir que JavaScript arbitrário seja executado nos WebViews. O WebSettings a seguir precisa ser considerado ao proteger o acesso a arquivos:

  • Desative o acesso ao arquivo. Por padrão, setAllowFileAccess é definido como True em API de nível 29 e anteriores, que permite o acesso a arquivos locais. No nível 30 e mais recente da API, o padrão é False. Para garantir que o acesso a arquivos não seja permitido, defina explicitamente setAllowFileAccess como False.
  • Desative o acesso ao conteúdo. A configuração padrão de setAllowContentAccess é True. O acesso ao URL de conteúdo permite que a WebView carregue conteúdo de um o provedor instalado no sistema. Caso o app não exija acesso ao conteúdo, Defina setAllowContentAccess como False para evitar um possível uso indevido em caso de ataques de scripting em vários apps.

  • 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);

Ativar a Navegação segura

Ative a Navegação segura no AndroidManifest.xml para verificar URLs transmitidos para a WebView em busca de domínios maliciosos ou de phishing.

<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
   android:value="true" />

Recursos