android:exported

OWASP カテゴリ: MASVS-PLATFORM: プラットフォームのインタラクション

概要

android:exported 属性により、コンポーネント(アクティビティ、サービス、ブロードキャスト レシーバなど)を他のアプリのコンポーネントが起動できるかどうかが決まります。

  • true の場合、アクティビティはどのアプリからもアクセスでき、正確なクラス名で起動できます。
  • false の場合、アクティビティは、同じアプリのコンポーネント、同じユーザー ID を持つアプリ、または特権システム コンポーネントでしか起動できません。

この属性のデフォルト値の背後にあるロジックは時間とともに変化し、コンポーネントのタイプと Android のバージョンによって異なりました。たとえば、API レベル 16(Android 4.1.1)以前は、<provider> 要素の値はデフォルトで true に設定されています。この属性を明示的に設定しなければ、一部のデバイス間でデフォルト値が異なるというリスクがあります。

影響

デフォルト値が異なると、誤って内部のアプリケーション コンポーネントを公開してしまう可能性があります。たとえば次のような結果が考えられます。

サービス拒否攻撃。 アプリの内部機能の変更を目的とした他のアプリによる不正なアクセス。 機密データの漏洩。 脆弱なアプリケーションのコンテキストでのコード実行。

リスクの軽減

常に android:exported 属性を明示的に設定します。こうすることで解釈の余地がなくなり、コンポーネントの可視化に関する意図が明確に示されます。