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 comoTrue
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 explicitamentesetAllowFileAccess
comoFalse
. 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, DefinasetAllowContentAccess
comoFalse
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
- Documentação do Navegação segura
- Referência do desenvolvedor do WebView
- Referência para desenvolvedores da WebSettings para WebView
- Documentação do desenvolvedor setAllowFileAccess
- Referência do desenvolvedor setAllowContentAccess