以下の内容はhttps://cysec148.hatenablog.com/entry/2025/07/27/124041より取得しました。


第18回:Drozerでコンテンツプロバイダの脆弱性を調べる

Hello there, ('ω')ノ

📚 コンテンツプロバイダとは?

Androidでは、アプリ間でデータをやり取りする仕組みとして「コンテンツプロバイダ」が用意されています。

たとえば…

  • 電話帳アプリ → 他のアプリから連絡先データを取得できる
  • 音楽アプリ → 外部からプレイリストの読み取り・書き込みが可能

というように、アプリがデータを公開・共有するためのインターフェースです。


⚠️ なぜ脆弱性になり得るのか?

本来はアクセス制限(パーミッション)をかけるべきところを、

  • 無制限に公開していた
  • exported=true で外部からアクセス可能にしていた
  • readPermission / writePermission を指定していなかった

などの設定ミスがあると、悪意のあるアプリや診断ツールから中身が抜き取られてしまう恐れがあります。


🛠 Drozerを使った診断のステップ

ではさっそく、Drozerを使って実際に診断してみましょう。 ここでは仮想アプリ com.example.vulnerableapp を例に進めます。


✅ ① URIの一覧を取得する

dz> run app.provider.finduris -a com.example.vulnerableapp

出力例:

content://com.example.vulnerableapp.provider.UserProvider
  [Read permission: null | Write permission: null]

→ この結果から、「読み書き両方に制限がない」ことがわかります。


✅ ② 実際に中身を読み取ってみる

dz> run app.provider.query content://com.example.vulnerableapp.provider.UserProvider

出力例:

| id | username | password     |
|----|----------|--------------|
| 1  | alice    | password123  |
| 2  | bob      | qwerty!      |

→ このように、アプリ内部のユーザーデータが丸見えになってしまう場合があります。これは完全にアウトです!


✅ ③ 書き込みができるかも試す

dz> run app.provider.insert content://com.example.vulnerableapp.provider.UserProvider "username=bob&password=hacked"

→ 書き込みに成功すれば、外部アプリからデータ改ざんができてしまう状態。これは情報漏洩だけでなく不正操作も可能になる重大な脆弱性です。


🔍 さらに深掘りできるDrozerのモジュール

モジュール名 説明
app.provider.info プロバイダの詳細設定を表示
app.provider.query 実際にデータベースを読み取る
app.provider.insert データの挿入(書き込み)テスト
app.provider.delete データ削除のテスト
app.provider.update データ更新のテスト

→ 実行可能かどうかを確認することで、「読み取り可能なだけか」「改ざんもできるか」を分類できます。


✅ 診断時のチェックポイント

チェック項目 内容
URIのパスが外部に公開されていないか content://... にアクセスできてしまう
パーミッションが適切に設定されているか readPermission / writePermission の指定があるか
データの読み書き制限が効いているか Drozerで試してみて反応するか
実際のデータ構造に機微情報が含まれていないか ユーザー情報、ID、位置情報など

🧠 なぜこれが危険なのか?

  • 誰でもユーザーデータを読み取れる → 個人情報漏洩
  • 外部から勝手に書き換えられる → データ改ざんやなりすまし
  • ログイン情報などを取得 → アカウント乗っ取りのリスクも

実際の脆弱なアプリでも、テスト用のContent Providerを削除し忘れて公開していたという事例があります。


✅ まとめ

  • コンテンツプロバイダはアプリ間のデータ共有の仕組みだが、設定ミスによりデータ漏洩の温床になる
  • Drozerを使えば、外部からアクセスできるかを実際に確認できる
  • URIの列挙 → データ読み取り・書き込み → パーミッション確認という流れで診断する
  • 特にnullのパーミッション設定には要注意!

Best regards, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2025/07/27/124041より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14