Skip to content

MASTG-TEST-0032: Testando Manipuladores de Protocolo do WebView

Deprecated Test

This test is deprecated and should not be used anymore. Reason: Nova versão disponível no MASTG V2

Please check the following MASTG v2 tests that cover this v1 test:

Visão Geral

Para testar manipuladores de protocolo WebView (ou acesso a recursos)), verifique se o aplicativo utiliza WebView e avalie se o WebView deve ou não ter acesso a recursos. Se o acesso a recursos for necessário, é preciso verificar se ele é implementado seguindo as melhores práticas.

Análise Estática

Verifique o código-fonte em busca do uso de WebView. As seguintes configurações do WebView controlam o acesso a recursos:

  • setAllowContentAccess: O acesso a URL de conteúdo permite que WebViews carreguem conteúdo de um provedor de conteúdo instalado no sistema, o que é habilitado por padrão.
  • setAllowFileAccess: Habilita e desabilita o acesso a arquivos dentro de um WebView. O valor padrão é true para Android 10 (API level 29) e versões anteriores e false para Android 11 (API level 30) e superiores. Observe que isso habilita e desabilita apenas o acesso ao sistema de arquivos. O acesso a assets e recursos não é afetado e permanece acessível via file:///android_asset e file:///android_res.
  • setAllowFileAccessFromFileURLs: Permite ou não que JavaScript executado no contexto de uma URL com esquema de arquivo acesse conteúdo de outras URLs com esquema de arquivo. O valor padrão é true para Android 4.0.3 - 4.0.4 (API level 15) e versões anteriores e false para Android 4.1 (API level 16) e superiores.
  • setAllowUniversalAccessFromFileURLs: Permite ou não que JavaScript executado no contexto de uma URL com esquema de arquivo acesse conteúdo de qualquer origem. O valor padrão é true para Android 4.0.3 - 4.0.4 (API level 15) e versões anteriores e false para Android 4.1 (API level 16) e superiores.

Se um ou mais dos métodos acima estiver(em) ativado(s), você deve determinar se o(s) método(s) é/são realmente necessário(s) para o funcionamento adequado do aplicativo.

Se uma instância de WebView puder ser identificada, descubra se arquivos locais são carregados com o método loadURL.

WebView = new WebView(this);
webView.loadUrl("file:///android_asset/filename.html");

A localização da qual o arquivo HTML é carregado deve ser verificada. Se o arquivo for carregado do armazenamento externo, por exemplo, o arquivo será legível e gravável por todos. Isso é considerado uma má prática. Em vez disso, o arquivo deve ser colocado no diretório de assets do aplicativo.

webview.loadUrl("file:///" +
Environment.getExternalStorageDirectory().getPath() +
"filename.html");

A URL especificada em loadURL deve ser verificada quanto a parâmetros dinâmicos que possam ser manipulados; sua manipulação pode levar à inclusão de arquivos locais.

Use o seguinte trecho de código e melhores práticas para desativar manipuladores de protocolo, se aplicável:

// Se atacantes puderem injetar script em um WebView, eles poderão acessar recursos locais. Isso pode ser prevenido desativando o acesso ao sistema de arquivos local, que é habilitado por padrão. Você pode usar a classe Android WebSettings para desativar o acesso ao sistema de arquivos local via o método público `setAllowFileAccess`.
webView.getSettings().setAllowFileAccess(false);

webView.getSettings().setAllowFileAccessFromFileURLs(false);

webView.getSettings().setAllowUniversalAccessFromFileURLs(false);

webView.getSettings().setAllowContentAccess(false);
  • Crie uma lista que defina páginas web locais e remotas e protocolos permitidos para carregamento.
  • Crie checksums dos arquivos HTML/JavaScript locais e verifique-os durante a inicialização do aplicativo. Minifique os arquivos JavaScript para torná-los mais difíceis de ler.

Análise Dinâmica

Para identificar o uso de manipuladores de protocolo, procure maneiras de acionar chamadas telefônicas e formas de acessar arquivos do sistema de arquivos enquanto você está usando o aplicativo.