# Ataques ao WebView
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! Outras maneiras de apoiar o HackTricks: * Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com) * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
## Guia Simplificado sobre Configurações e Segurança do WebView ### Visão Geral das Vulnerabilidades do WebView Um aspecto crítico do desenvolvimento Android envolve o manuseio correto dos WebViews. Este guia destaca configurações-chave e práticas de segurança para mitigar os riscos associados ao uso do WebView. ![Exemplo de WebView](../../.gitbook/assets/image%20(718).png) ### **Acesso a Arquivos em WebViews** Por padrão, os WebViews permitem o acesso a arquivos. Essa funcionalidade é controlada pelo método `setAllowFileAccess()`, disponível desde o nível de API do Android 3 (Cupcake 1.5). Aplicativos com a permissão **android.permission.READ_EXTERNAL_STORAGE** podem ler arquivos do armazenamento externo usando um esquema de URL de arquivo (`file://caminho/para/arquivo`). #### **Recursos Obsoletos: Acesso Universal e Acesso a Arquivos a partir de URLs** - **Acesso Universal a partir de URLs de Arquivo**: Este recurso obsoleto permitia solicitações entre origens de URLs de arquivo, representando um risco significativo de segurança devido a possíveis ataques XSS. A configuração padrão é desativada (`false`) para aplicativos direcionados ao Android Jelly Bean e mais recentes. - Para verificar essa configuração, use `getAllowUniversalAccessFromFileURLs()`. - Para modificar essa configuração, use `setAllowUniversalAccessFromFileURLs(boolean)`. - **Acesso a Arquivos a partir de URLs de Arquivo**: Este recurso, também obsoleto, controlava o acesso a conteúdo de outros URLs de esquema de arquivo. Assim como o acesso universal, sua configuração padrão é desativada para maior segurança. - Use `getAllowFileAccessFromFileURLs()` para verificar e `setAllowFileAccessFromFileURLs(boolean)` para definir. #### **Carregamento Seguro de Arquivos** Para desativar o acesso ao sistema de arquivos enquanto ainda acessa ativos e recursos, é usado o método `setAllowFileAccess()`. Com o Android R e superior, a configuração padrão é `false`. - Verifique com `getAllowFileAccess()`. - Ative ou desative com `setAllowFileAccess(boolean)`. #### **WebViewAssetLoader** A classe **WebViewAssetLoader** é a abordagem moderna para carregar arquivos locais. Ela usa URLs http(s) para acessar ativos e recursos locais, alinhando-se com a política de Mesma Origem, facilitando assim a gestão de CORS. ### **JavaScript e Manipulação de Esquema de Intent** - **JavaScript**: Desativado por padrão em WebViews, pode ser ativado via `setJavaScriptEnabled()`. É aconselhável cautela, pois habilitar JavaScript sem salvaguardas adequadas pode introduzir vulnerabilidades de segurança. - **Esquema de Intent**: WebViews podem lidar com o esquema `intent`, potencialmente levando a exploits se não forem cuidadosamente gerenciados. Um exemplo de vulnerabilidade envolveu um parâmetro exposto do WebView "support_url" que poderia ser explorado para executar ataques de script entre sites (XSS). ![WebView Vulnerável](../../.gitbook/assets/image%20(719).png) Exemplo de exploração usando adb: ```bash adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView –es support_url "https://example.com/xss.html" ``` ### Ponte JavaScript O Android fornece um recurso que permite que o **JavaScript** em um WebView invoque **funções do aplicativo nativo do Android**. Isso é alcançado utilizando o método `addJavascriptInterface`, que integra o JavaScript com funcionalidades nativas do Android, denominado como uma _ponte JavaScript do WebView_. É aconselhável ter cautela, pois esse método permite que todas as páginas dentro do WebView acessem o objeto de Interface JavaScript registrado, representando um risco de segurança se informações sensíveis forem expostas por meio dessas interfaces. ### Considerações Importantes - **Extrema cautela é necessária** para aplicativos direcionados a versões do Android abaixo de 4.2 devido a uma vulnerabilidade que permite a execução de código remoto por meio de JavaScript malicioso, explorando reflexão. #### Implementando uma Ponte JavaScript - **Interfaces JavaScript** podem interagir com o código nativo, conforme mostrado nos exemplos em que um método de classe é exposto ao JavaScript: ```javascript @JavascriptInterface public String getSecret() { return "SuperSecretPassword"; }; ``` - A ponte JavaScript é ativada adicionando uma interface ao WebView: ```javascript webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge"); webView.reload(); ``` - Potencial exploração através de JavaScript, por exemplo, via um ataque XSS, permite a chamada de métodos Java expostos: ```html ``` - Para mitigar riscos, **restrinja o uso da ponte JavaScript** ao código enviado com o APK e evite carregar JavaScript de fontes remotas. Para dispositivos mais antigos, defina o nível mínimo da API como 17. ### Execução de Código Remoto (RCE) Baseado em Reflexão - Um método documentado permite alcançar RCE por meio de reflexão ao executar um payload específico. No entanto, a anotação `@JavascriptInterface` impede o acesso não autorizado aos métodos, limitando a superfície de ataque. ### Depuração Remota - A **depuração remota** é possível com as **Ferramentas de Desenvolvedor do Chrome**, permitindo interação e execução arbitrária de JavaScript dentro do conteúdo do WebView. #### Habilitando a Depuração Remota - A depuração remota pode ser habilitada para todos os WebViews dentro de um aplicativo por meio de: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); } ``` - Para habilitar condicionalmente a depuração com base no estado de depuração do aplicativo: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE)) { WebView.setWebContentsDebuggingEnabled(true); } } ``` ## Extrair arquivos arbitrários - Demonstra a extração de arquivos arbitrários usando um XMLHttpRequest: ```javascript var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState == XMLHttpRequest.DONE) { alert(xhr.responseText); } } xhr.open('GET', 'file:///data/data/com.authenticationfailure.wheresmybrowser/databases/super_secret.db', true); xhr.send(null); ``` ## Referências * [https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html](https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html) * [https://github.com/authenticationfailure/WheresMyBrowser.Android](https://github.com/authenticationfailure/WheresMyBrowser.Android) * [https://developer.android.com/reference/android/webkit/WebView](https://developer.android.com/reference/android/webkit/WebView)
Aprenda hacking da AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! Outras formas de apoiar o HackTricks: * Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).