Aprenda hacking em AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! 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).
Para experimentar com provedores de conteúdo, pode-se usar o comando `content` em dispositivos Android. Acesso root não é necessariamente requerido. Por exemplo, para ver a lista de arquivos gerenciados pelo Media Store, pode-se executar o seguinte comando: ```bash $ content query --uri content://media/external/file ``` Para tornar a saída mais amigável para o usuário, pode-se limitar as colunas exibidas ao identificador e caminho de cada arquivo indexado. ```bash $ content query --uri content://media/external/file --projection _id,_data ``` 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 para os manifestos de aplicativos (caso o provedor de conteúdo seja exportado por um aplicativo) ou o código-fonte do framework Android. Curiosamente, nos dispositivos Android, o Chrome suporta o acesso a provedores de conteúdo através 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 na Media Store e, em seguida, acessá-la usando o navegador: ```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 ``` Para descobrir o identificador do arquivo recém-inserido: ```bash $ content query --uri content://media/external/file \ --projection _id,_data | grep test.txt Row: 283 _id=747, _data=/storage/emulated/0/test.txt ``` E para visualizar o arquivo no Chrome, pode-se usar uma URL como a mostrada na imagem a seguir. Observe o identificador do arquivo 747 (descoberto acima) que é usado como sufixo na URL. ![Chrome "Olá, mundo!"](https://census-labs.com/media/whatsapp-screenshot-hello-world.png) Por exemplo, você poderia listar todos os arquivos relacionados ao WhatsApp com: ```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 ... ``` ## O bypass da Política de Mesma Origem (Same-Origin-Policy) do Chrome CVE-2020-6516 A _Política de Mesma Origem_ (Same Origin Policy - SOP) \[[12](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin\_policy)] nos navegadores determina que o conteúdo Javascript da URL A só poderá acessar o conteúdo na URL B se os seguintes atributos da URL permanecerem os mesmos para A e B: * 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` Claro, existem exceções às regras acima, mas em geral, um recurso de `https://www.example1.com` (por exemplo, um 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 (Cross-Origin-Resource-Sharing - CORS) permita explicitamente, não deveria ser possível para um recurso da web contornar as regras da SOP.** É essencial notar que o Chrome considera `content://` como um _esquema local_, assim como `file://`. Neste caso, as regras da SOP são ainda mais estritas, pois cada URL de esquema local é considerada uma origem separada. Por exemplo, o código Javascript em **file:///tmp/test.html** não deveria ser capaz de acessar o conteúdo de **file:///tmp/test2.html**, ou qualquer outro arquivo no sistema de arquivos. **Consequentemente, de acordo com as regras da SOP, um recurso carregado via `content://` não deveria poder acessar qualquer outro recurso `content://`.** Bem, a vulnerabilidade CVE-2020-6516 do Chrome criou uma "exceção" a essa regra. CVE-2020-6516 \[[03](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-6516)] é um bypass da SOP em recursos carregados via uma URL `content://`. **Por exemplo, código Javascript, executando dentro do contexto de um documento HTML carregado de `content://com.example.provider/test.html`, pode carregar e acessar qualquer outro recurso carregado via 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 restrito \[[13](https://developer.android.com/about/versions/10/privacy/changes#scoped-storage)] não é implementado e, consequentemente, dados específicos de aplicativos em **/sdcard**, e mais interessantemente em **/sdcard/Android**, podem ser acessados através do provedor de conteúdo da Loja de Mídia do sistema. Uma prova de conceito é bastante simples. Um documento HTML que usa `XMLHttpRequest` para acessar URLs `content://` arbitrárias é carregado em **/sdcard**. Em seguida, é adicionado na Loja de Mídia 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 é, de fato, a URL da Loja de Mídia do exemplo "Olá, mundo!". Surpreendentemente, o código Javascript, executando dentro da origem do documento HTML, irá buscar e exibir o conteúdo de **test.txt**. ```markup PoC ``` **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/)
Aprenda a hackear AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! 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 do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).