# 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 os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
## Guia 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 (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 a partir 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. ### loadUrl Esta é uma função comum usada para carregar URLs arbitrários em um webview: ```java webview.loadUrl("") ``` ### **Manipulação de Esquemas JavaScript e Intent** * **JavaScript**: Desativado por padrão em WebViews, pode ser habilitado via `setJavaScriptEnabled()`. É aconselhável ter cautela, pois habilitar o JavaScript sem as devidas proteções pode introduzir vulnerabilidades de segurança. * **Esquema Intent**: WebViews podem lidar com o esquema `intent`, o que pode levar a exploits se não for cuidadosamente gerenciado. Um exemplo de vulnerabilidade envolveu um parâmetro exposto da WebView "support\_url" que poderia ser explorado para executar ataques de script entre sites (XSS). ![WebView Vulnerável](<../../.gitbook/assets/image (719).png>) Exemplo de exploração usando adb: {% code overflow="wrap" %} ```bash adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView –es support_url "https://example.com/xss.html" ``` {% endcode %} ### Ponte JavaScript Uma funcionalidade é fornecida pelo Android que permite que o **JavaScript** em um WebView invoque **funções nativas do aplicativo Android**. Isso é alcançado utilizando o método `addJavascriptInterface`, que integra 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. * **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, como mostrado nos exemplos em que um método de classe é exposto ao JavaScript: ```javascript @JavascriptInterface public String getSecret() { return "SuperSecretPassword"; }; ``` * A Ponte JavaScript é habilitada 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) Baseada 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); } } ``` ## Exfiltrar arquivos arbitrários * Demonstra a exfiltraçã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) * [https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1](https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1) * [https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I](https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I)
Aprenda hacking 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**, verifique 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 os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).