OWASP カテゴリ: MASVS-PLATFORM: プラットフォームのインタラクション
概要
ディープリンクに関連するセキュリティ リスクは、モバイルアプリ内でシームレスなナビゲーションと操作を可能にするコア機能に起因しています。ディープリンクの脆弱性は、ディープリンクの実装または処理における弱点から発生します。こうした欠陥は、悪意のある攻撃者が悪用して特権機能やデータにアクセスし、データ侵害、プライバシー侵害、不正行為につながる可能性があります。攻撃者は、ディープリンク ハイジャックやデータ検証攻撃など、さまざまな手法によってこの脆弱性を悪用できます。
影響
適切なディープリンク検証メカニズムがない、またはディープリンクが安全でない状態で使用されていないと、悪意のあるユーザーが脆弱性のあるアプリケーションの権限コンテキスト内でホスト検証バイパス、クロスアプリ スクリプティング、リモートコード実行などの攻撃を実行するおそれがあります。アプリケーションの性質によっては、機密データや機能への不正アクセスにつながる可能性があります。
リスクの軽減
ディープリンクの不正使用を防ぐ
Android では、複数のアプリが同じディープリンク URI のインテント フィルタを登録できるように設計されています。悪意のあるアプリがアプリ向けのディープリンクをインターセプトしないようにするには、アプリケーションの AndroidManifest
内の intent-filter
に android:autoVerify
属性を実装します。これにより、ユーザーはディープリンクの処理に使用するアプリを選択できるため、意図した操作を確実に実行し、悪意のあるアプリがディープリンクを自動的に解釈するのを防ぐことができます。
Android 12 では、セキュリティを強化するために、ウェブ インテントの厳格な処理が導入されました。アプリは、Android アプリリンクまたはシステム設定でのユーザー選択のいずれかを通じて、特定のドメインからのリンクを処理するように検証する必要があります。これにより、アプリが処理すべきでないリンクをハイジャックするのを防ぐことができます。
アプリのリンク処理の検証を有効にするには、次の形式に一致するインテント フィルタを追加します(この例は、Android アプリリンクを検証するのドキュメントから抜粋したものです)。
<!-- Make sure you explicitly set android:autoVerify to "true". -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- If a user clicks on a shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="..." />
</intent-filter>
堅牢なデータ検証を実装する
ディープリンクには、さらなるアクションの実行など、ターゲット インテントに提供される追加のパラメータを含めることができます。安全なディープリンク処理の基盤は、厳格なデータ検証です。悪意のあるコードや値が正当なアプリに挿入されないように、ディープリンクからの受信データはすべて、デベロッパーが慎重に検証してサニタイズする必要があります。これは、ディープリンク パラメータの値を、想定される値のあらかじめ定義された許可リストと照合することで実装できます。
アプリは、機密情報を公開する前に、認証状態や認可など、その他の関連する内部状態を確認する必要があります。たとえば、ゲームのレベルをクリアしたときに報酬が得られる場合があります。この場合、レベルを完了しているという前提条件を検証し、完了していない場合はメイン画面にリダイレクトすることをおすすめします。
リソース
- Android アプリリンクを検証する
- Android アプリリンクの処理
- ウェブ インテントの解決
- アカウント乗っ取りによる Arrive アプリの魔法のリンクのインターセプト
- ディープリンクと WebView の悪用(パート 1)
- ディープリンクと WebView の悪用(パート 2)
- Jetpack Navigation のディープリンクに関する最近の報告