説明
外部から受け取ったIntentを、FLAG_GRANT_READ_URI_PERMISSION や FLAG_GRANT_WRITE_URI_PERMISSION などのURI権限フラグを残したまま渡すと、攻撃者がアプリのアクセス可能なコンテンツURIの権限を他のコンポーネントへ委譲させるおそれがあります。
想定される影響
- アプリ内部のファイルやコンテンツURIの情報漏えい
- 書き込み権限の委譲によるデータ改ざん
- 権限の境界の回避
対処方法
- 外部のIntentを渡す前に、不要な権限付与フラグを取り除いてください。
- URIと宛先のコンポーネントを許可リストで検証してください。
- 必要最小限の権限だけを明示的に付与し、使用後は取り消してください。
例
変更前
java
Intent result = getIntent();
result.putExtra("status", "ok");
setResult(RESULT_OK, result);
finish();
変更後
java
Intent result = new Intent();
result.putExtra("status", "ok");
setResult(RESULT_OK, result);
finish();
解説:
- 変更前: 外部から受け取ったIntentを
setResultでそのまま返すと、攻撃者がURI権限フラグを含め、アプリのContentProviderへのアクセス制限を回避するおそれがあります。 - 変更後:
setResult用に新しいIntentを作成し、必要なデータだけをコピーします。