この情報は、暗黙的な PendingIntent の脆弱性を含むアプリのデベロッパーを対象としています。
状況
1 つまたは複数のアプリに暗黙的な PendingIntent の問題が含まれていて、サービス拒否攻撃や、個人データの盗難、権限昇格といったセキュリティ上の脅威が発生する場合があります。以下の詳細な手順を確認して、アプリの問題を解決してください。当該アプリで暗黙的な PendingIntent が使用されている場所は、アプリの Google Play Console 通知で確認できます。「(動的に読み込まれたコード内)」で終わっている位置情報は、アプリまたはアプリで使用されるライブラリによって動的に読み込まれるコード内にあります。アプリは通常、オンデマンド機能配信を通じて動的に読み込まれたコードを使用しますが、推奨されない手法もあります(推奨されない手法の中にはGoogle Play のポリシーに違反するものもあるため、使用しないことをおすすめします)。また、アプリケーション コードを動的に読み込まれるコードに変換することもできます。
なお、この問題を修正することを推奨しますが、必須ではありません。この問題を修正しなくても、アプリの公開ステータスは影響を受けません。
その他の詳細
Android アプリは、インテントを使用してコンポーネント間でメッセージを送信します。インテントを使用する際、ターゲット コンポーネントを指定する方法(明示的インテント)と、一般的アクションをリスト化しておいて、オペレーティング システムから、対象アクションに合致するインテント フィルタを登録しているデバイス上の任意のコンポーネントに対して、インテントを配信させる方法(暗黙的インテント)があります。
PendingIntent とは、別のアプリに委任されているインテントで、将来配信される予定のものを指します。PendingIntent にラップされた暗黙的インテントを作成すると、セキュリティ脆弱性が生じ、サービス拒否攻撃や、個人データの盗難、権限昇格につながる可能性があります。
次の手順
1. 下記の手順に沿って、アプリを更新し、「暗黙的な PendingIntent」アラートを修正します。
PendingIntent を作成した場所をアプリ内で確認します。たとえば、以下のコードの場合、暗黙的インテントをラップしている PendingIntent を作成しています。
// 暗黙的ベース インテントを作成して、PendingIntent でラップする
Intent base = new Intent("ACTION_FOO");
base.setPackage("some_package");
PendingIntent pi = PendingIntent.getService(this, 0, base, 0);
Google は、以下のいずれか(できれば、すべてが望ましい)を適用して、脆弱性を修正することをおすすめします。
- ベース インテントのアクション、パッケージ、コンポーネントの各フィールドが設定されていることを確認します。
- PendingIntent の配信先を、信頼できるコンポーネントだけに限定するようにします。
- FLAG_IMMUTABLE(SDK 23 で追加)を使用して、PendingIntent を作成します。これにより、PendingIntent を受信したアプリが未入力プロパティを入力するのを防ぐことができます。SDK 22 以前を実行しているデバイス上でもアプリが稼働する場合は、以下のパターンを使用して PendingIntent 作成を強化しながら、以前のオプションを適用することをおすすめします。
if (android.os.Build.VERSION.SDK_INT >= 23) {
// FLAG_IMMUTABLE を使用して PendingIntent を作成する
} else {
// PendingIntent を作成する既存のコード
}
2. 更新した APK を送信する
更新した App Bundle または APK を送信するには:
- Google Play Console にアクセスします。
- アプリを選択します。
- App Bundle エクスプローラに移動します。
- 右上のプルダウン メニューで、ポリシーを遵守していない APK または App Bundle のアプリのバージョンを選択し、該当するリリースを書き留めます。
- ポリシーに関する問題があるトラックに移動します。4 つのページ([内部テスト]、[クローズド テスト]、[オープンテスト]、[製品版])のいずれかになります。
- ページの右上にある [新しいリリースを作成] をクリック(場合によっては、先に [トラックを管理] をクリックする必要があります)
- 違反している APK を含むリリースが未公開の状態の場合は、リリースを破棄
- ポリシーを遵守したバージョンの App Bundle または APK を追加します。
- ポリシーを遵守していないバージョンの App Bundle または APK がこのリリースの [含まれない APK] セクションに表示されていることを確認します。詳しくは、Google Play Console ヘルプセンター記事「リリースを準備して公開する」の「含まれない(App Bundle と APK)」を参照してください。
- リリースの変更内容を保存するには、[保存] を選択します。
- リリースの準備が完了したら、[リリースのレビュー] を選択します。
ポリシーを遵守していない APK が複数のトラックでリリースされている場合は、トラックごとにステップ 5~9 を繰り返してください。
新しいアプリやアプリのアップデートは、リクエストの審査が終わるまでの間、ステータスが [審査中] になります。アプリが適切に更新されていない場合は、引き続き警告が表示されます。
サポートのご案内
この脆弱性に関する技術的なご質問は、「android-security」タグを付けて Stack Overflow にご投稿ください。この問題の解決手順にご不明な点がありましたら、サポートチームにお問い合わせください。