Categoria do OWASP: MASVS-CODE - Qualidade do código
Visão geral
Um WebView é um componente de navegador incorporado em aplicativos Android que facilita a exibição de conteúdo da Web em um app. Ele renderiza HTML, CSS e JavaScript na interface do usuário do app.
O cross-app scripting está amplamente associado à execução de código malicioso no contexto de um aplicativo vítima. Para fins desta documentação, o assunto será restrito especificamente à injeção de código JavaScript malicioso em um WebView vulnerável.
Quando um app aceita JavaScript malicioso em um WebView sem validação ou higienização suficiente, ele fica vulnerável ao cross-app scripting.
Impacto
As vulnerabilidades de cross-app scripting podem ser exploradas quando o conteúdo JavaScript controlado pelo invasor é transmitido ao WebView do app vulnerável sem ser validado ou higienizado. Como resultado, o código JavaScript fornecido pelo invasor é executado no contexto do WebView do aplicativo vítima. O código JavaScript malicioso pode usar as mesmas permissões do app vítima, o que pode levar ao roubo de dados do usuário confidenciais e ao sequestro de contas.
Mitigações
Desativar JavaScript
Se o aplicativo não exigir JavaScript, desativá-lo vai garantir que ele não se torne 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 o aplicativo exigir JavaScript, verifique se você tem a propriedade ou o controle de qualquer JavaScript transmitido ao WebView. Evite permitir que o WebView execute JavaScript arbitrário. Consulte as orientações na próxima seção.
Verificar se apenas o conteúdo esperado é carregado no WebView
Ao usar métodos como shouldOverrideUrlLoading(), loadUrl() ou
evaluateJavascript(),, verifique se todos os URLs transmitidos a eles são
verificados. Como afirmado anteriormente, qualquer JavaScript transmitido ao WebView só deve vir de domínios esperados. Portanto, é importante verificar o que está sendo carregado.
Consulte a documentação de validação de entrada do OWASP (link em inglês) e esta lista de verificação de segurança do Android para WebViews (link em inglês) para conferir bons conselhos e exemplos.
Definir configurações de acesso a arquivos seguros para WebView
Garantir que os arquivos não estejam acessíveis pode impedir que JavaScript arbitrário seja
executado em WebViews.As seguintes WebSettings precisam ser
consideradas ao proteger o acesso a arquivos:
- Desativar o acesso a arquivos. Por padrão,
setAllowFileAccessé definido comoTrueno nível 29 da API e versões anteriores, o que permite o acesso a arquivos locais. No nível 30 da API e versões mais recentes, o padrão éFalse. Para garantir que o acesso a arquivos não seja permitido, defina explicitamentesetAllowFileAccesscomoFalse. Desativar o acesso ao conteúdo. A configuração padrão de
setAllowContentAccesséTrue. O acesso ao URL de conteúdo permite que o WebView carregue conteúdo de um provedor de conteúdo instalado no sistema. Se o app não exigir acesso ao conteúdo, definasetAllowContentAccesscomoFalsepara evitar possíveis usos indevidos em caso de ataque de cross-app scripting.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);
Ativar Navegação segura
Ative a Navegação segura em AndroidManifest.xml para verificar se os URLs transmitidos ao
WebView têm phishing ou domínios maliciosos:
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
Recursos
- Documentação da Navegação segura
- Referência do desenvolvedor do WebView
- WebSettings para referência do desenvolvedor do WebView
- Documentação do desenvolvedor setAllowFileAccess
- Referência do desenvolvedor setAllowContentAccess