説明
外部のIntentに含まれる Intent オブジェクトやコンポーネント情報を検証せずに startActivity、startService、sendBroadcast などへ渡すと、攻撃者がアプリの権限や信頼関係を利用して、意図しないコンポーネントを起動するおそれがあります。
想定される影響
- 内部コンポーネントの呼び出しや権限チェックの回避
- 機密情報を含むextra値の受け渡し
- フィッシング画面や悪意あるコンポーネントの起動
対処方法
- 外部から受け取ったIntentをそのまま転送しないでください。
- 対象のパッケージ、クラス、actionを許可リストで検証してください。
setPackage、setClassName、setComponentを使い、信頼できる宛先を明示してください。
例
変更前
java
Intent next = getIntent().getParcelableExtra("next");
startActivity(next);
変更後
java
String target = getIntent().getStringExtra("target");
if ("safe".equals(target)) {
Intent next = new Intent(this, SafeActivity.class);
startActivity(next);
}
解説:
- 変更前: 外部のIntentを検証せずに渡すと、攻撃者がこのアプリの権限で内部コンポーネントや他のアプリのコンポーネントを起動させるおそれがあります。
- 変更後: 外部のIntentを転送せず、新しいIntentを作成して許可した宛先だけを設定します。