<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras formas de apoiar o HackTricks:
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
Esta vulnerabilidade se assemelha ao **Open Redirect em segurança web**. Como a classe `Intent` é `Parcelable`, **objetos pertencentes a esta classe** podem ser **passados** como **dados extras** em outro objeto `Intent`. \
Muitos desenvolvedores fazem **uso** desta **funcionalidade** e criam **componentes proxy** (atividades, receptores de transmissão e serviços) que **recebem um Intent embutido e o passam para métodos perigosos** como `startActivity(...)`, `sendBroadcast(...)`, etc. \
Isso é perigoso porque **um atacante pode forçar o aplicativo a iniciar um componente não exportado que não pode ser iniciado diretamente de outro aplicativo**, ou conceder ao atacante acesso aos seus provedores de conteúdo. **`WebView`** também às vezes converte uma **URL de uma string para um objeto `Intent`**, usando o método `Intent.parseUri(...)`, e o passa para `startActivity(...)`.
Resumindo: Se um atacante pode enviar um Intent que está sendo executado de forma insegura, ele pode potencialmente acessar componentes não exportados e abusar deles.
`AuthWebViewActivity` é um exemplo de **funcionalidade oculta do aplicativo que executa certas ações inseguras**, neste caso passando a sessão de autenticação do usuário para uma URL obtida a partir do parâmetro `url`.
e nenhuma violação de segurança ocorrerá, porque **o app que está sob ataque tem acesso a todos os seus próprios componentes**. Usando este fragmento de código, o atacante pode contornar as restrições integradas do sistema Android.
Para escalar o impacto desta vulnerabilidade, você precisa **encontrar outras vulnerabilidades/configurações incorretas que possam permitir aumentar o impacto da vulnerabilidade** (já que a vulnerabilidade por si só não está criando riscos).
Além do acesso a componentes arbitrários do app original, o **atacante pode tentar obter acesso aos Content Providers do app vulnerável** que satisfaçam as seguintes condições:
* ele deve ser **não exportado** (caso contrário, **poderia ser atacado diretamente**, sem usar a vulnerabilidade que estamos discutindo neste artigo)
* ele deve ter a flag **`android:grantUriPermissions`** definida como **`true`**.
*`android:grantUriPermissions="true"` indica que seu código Java pode usar `FLAG_GRANT_READ_URI_PERMISSION` e `FLAG_GRANT_WRITE_URI_PERMISSION` para **qualquer `Uri` fornecido por aquele `ContentProvider`**.
*`android:grantUriPermissions="false"` indica que **apenas os valores de `Uri` especificados pelos elementos filhos `<grant-uri-permission>`** podem ser usados com `FLAG_GRANT_READ_URI_PERMISSION` e `FLAG_GRANT_WRITE_URI_PERMISSION`.
*`Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION` permite acesso persistente ao provedor (sem esta flag, o acesso é apenas uma vez)
*`Intent.FLAG_GRANT_PREFIX_URI_PERMISSION` permite acesso ao URI por prefixo – por exemplo, em vez de obter acesso separado repetidamente usando um caminho completo como `content://com.victim.provider/image/1`, o atacante pode conceder acesso a todo o conteúdo do provedor usando o URI `content://com.victim.provider/` e depois usar `ContentResolver` para endereçar `content://com.victim.provider/image/1`, `content://com.victim.provider/image/2`, etc.
Um exemplo de um provedor típico onde um atacante pode obter acesso e realizar operações regulares como `query`, `update`, `insert`, `delete`, `openFile`, `openAssetFile`
Esta vulnerabilidade também possibilita ao atacante **roubar arquivos de aplicativos** localizados em diretórios predeterminados pelo desenvolvedor. Para um ataque bem-sucedido, o aplicativo malicioso precisa **obter direitos de acesso ao Android File Provider e depois ler o conteúdo do provedor de arquivos usando o Android ContentResolver**.
Exemplo de provedor de arquivos (para mais detalhes, consulte [https://developer.android.com/reference/android/support/v4/content/FileProvider](https://developer.android.com/reference/android/support/v4/content/FileProvider))
Ele fornece acesso de leitura/escrita a arquivos em uma lista especial que pode ser encontrada nos recursos do aplicativo, neste caso em `res/xml/provider_paths.xml`
Cada tag especifica um diretório raiz com um valor `path` relativo à raiz. Por exemplo, o valor `external_files` corresponderá a `new File(Environment.getExternalStorageDirectory(), "images")`
Digamos que temos alguns dados secretos armazenados no arquivo `/data/data/com.victim/databases/secret.db`: o roubo deste arquivo pode parecer algo como isto `MainActivity.java`
InputStream i = getContentResolver().openInputStream(getIntent().getData()); // we can now do whatever we like with this stream, e.g. send it to a remote server
Um objeto Intent pode ser convertido para uma string com uma chamada a `Intent.toUri(flags)` e de volta de uma string para um Intent usando `Intent.parseUri(stringUri, flags)`. Essa funcionalidade é frequentemente usada no WebView (o navegador embutido do app): **o app pode verificar um esquema `intent://`, analisar a URL em um Intent e iniciar a atividade**.
**Essa vulnerabilidade pode ser explorada tanto através de outras vulnerabilidades** (por exemplo, a capacidade de abrir links arbitrários no app no WebView diretamente via atividades exportadas ou por meio do mecanismo de deeplink) no app cliente quanto remotamente, incluindo scripting entre sites no lado do servidor ou MitM no lado do cliente.
O ponto aqui é que o método `shouldOverrideUrlLoading(...)` da classe `WebViewClient` é chamado toda vez que o WebView tenta carregar um novo link, mas dá ao aplicativo a opção de adicionar um manipulador personalizado.
Para explorar essa vulnerabilidade, o atacante precisa criar um redirecionamento do WebView para uma URL de esquema de intent especialmente preparada. Exemplo de criação de URL
* Objetos `Parcelable` e `Serializable` embutidos não podem ser convertidos para string (eles serão ignorados)
* As flags inseguras `Intent.FLAG_GRANT_READ_URI_PERMISSION` e `Intent.FLAG_GRANT_WRITE_URI_PERMISSION` são **ignoradas** quando `Intent.parseUri(...)` é chamado. O analisador só as deixará se a flag `Intent.URI_ALLOW_UNSAFE` (`startActivity(Intent.parseUri(url, Intent.URI_INTENT_SCHEME | Intent.URI_ALLOW_UNSAFE))`) estiver definida, o que é muito raro
Mas mesmo um filtro completo não garante proteção total, porque um atacante pode criar um `intent` implícito correspondente ao `intent-filter` de alguma atividade não exportada. Exemplo de declaração de atividade:
Alguns desenvolvedores de aplicativos implementam seus **próprios analisadores de intents** (muitas vezes para lidar com **deeplinks** ou mensagens push), usando, por exemplo, objetos **JSON**, strings ou arrays de bytes, que ou não diferem do padrão ou representam um grande perigo, pois podem expandir objetos **`Serializable`** e `Parcelable` e também permitem a configuração de flags inseguras. O pesquisador de segurança também pode encontrar versões mais exóticas de criação de intents, como converter um array de bytes em um `Parcel` e depois ler um intent a partir dele.
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material 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 do** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo do [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do github** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).