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 étruepara Android 10 (API level 29) e versões anteriores efalsepara 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 viafile:///android_assetefile:///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 étruepara Android 4.0.3 - 4.0.4 (API level 15) e versões anteriores efalsepara 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 étruepara Android 4.0.3 - 4.0.4 (API level 15) e versões anteriores efalsepara 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.