この情報は、インテント スキーム不正アクセスに対する脆弱性があるアプリのデベロッパーを対象としています。
状況
インテント スキーム不正アクセスの問題があるアプリが 1 つ以上存在します。この問題により、悪意のあるネットワークやウェブサイトが非公開のアプリ コンポーネントにアクセスできてしまう可能性があります。詳しくは Play Console の通知をご覧ください。Play Console に表示されている期限を過ぎた後もセキュリティの脆弱性が修正されていないアプリは、Google Play から削除される場合があります。
必要な対応
-
Play Console にログインし、[アラート] セクションで、該当するアプリや問題の解決期限を確認します。
-
下記の手順に沿って該当するアプリを更新します。
-
該当するアプリの更新バージョンを送信します。
再送信すると、アプリは再度審査されます。審査には数時間ほどかかることがあります。アプリが審査に合格して正常に公開された場合は、これ以上の対応は不要です。アプリが審査に不合格となった場合、アプリの更新バージョンは公開されず、メールで通知が届きます。
その他の詳細
信頼できないウェブ コンテンツに WebView がアクセスする場合は、Intent.parseUri を使用して intent:// リンクが解析され、startActivity を使用してインテントが送信されます。この際、インテント スキームによる不正アクセスを受けやすくなります。このような WebView では、悪意のあるウェブ コンテンツによって、任意のインテントが非公開のアプリ コンポーネントに送信されるおそれがあります。さらに、こうしたコンポーネントが操作する非公開のアプリデータの盗難など、アプリのセキュリティ侵害につながる可能性があります。なお、信頼できないウェブ コンテンツには、HTTP 経由で読み込まれる信頼済みドメインのコンテンツも含まれます。
以下のいずれかの方法でこの脆弱性への対応策を講じてください。
方法 1: WebView が任意のインテントを送信できないようにする
次のコードを使用することで、BROWSABLE インテント フィルタを使用するコンポーネントには、Intent.parseUri で構成されるインテントが暗黙的インテントとしてのみ送信されるよう制限できます。
// convert Intent scheme URL to Intent object
Intent intent = Intent.parseUri(url);
// forbid launching activities without BROWSABLE category
intent.addCategory("android.intent.category.BROWSABLE");
// forbid explicit call
intent.setComponent(null);
// forbid Intent with selector Intent
intent.setSelector(null);
// start the activity by the Intent
view.getContext().startActivity(intent, -1);
方法 2: 影響を受ける WebView で信頼できないウェブ コンテンツが読み込まれないようにする
WebView で任意の intent://
スキーム URL を解析する必要がある場合は、信頼できないウェブ コンテンツを読み込まないようにします。信頼できないウェブ コンテンツには、暗号化されていない接続により読み込まれたウェブ コンテンツが含まれます。そのため、マニフェストで android:usesCleartextTraffic
を false に設定するか、HTTP トラフィックを禁止するようにネットワーク セキュリティ構成を設定します。該当するすべての WebView で、loadUrl
により HTTP スキームの URL が一切読み込まれないようにすることもできます。
また、影響を受ける WebView で、信頼できないソースから取得された制限がない URL(たとえば、信頼できないインテントから取得された URL)が読み込まれないようにしてください。
サポートのご案内
この脆弱性に関する技術的なご質問については、Stack Overflow にご投稿ください。その際、「android-security」タグをご使用ください。この問題を解決するための手順で不明な点がありましたら、デベロッパー サポート チームにお問い合わせください。