Intent Redirection
Intent リダイレクト
説明
Android の Intent リダイレクトの脆弱性は、アプリが Intent (別のアプリコンポーネントにアクションを要求するために使用されるメッセージングオブジェクト) を別のコンポーネントに送信する際に、攻撃者が Intent を操作して悪意のあるアプリやアクティビティにリダイレクトする場合に発生します。これにより、アプリコンポーネントへの不正アクセスが発生する可能性があります。
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class YourActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get the Intent from the previous activity
Intent intent = getIntent();
Intent forward = intent.getParcelableExtra("key");
if (forward != null) {
startActivity(forward);
}
}
}
推奨事項
経験則として、ネストされた Intent のリダイレクトに関連する機能を公開することは避けるのが最善です。ただし、状況により必要な場合は、緩和策として次の戦略を使用してください:
- Intent がどこにリダイレクトされているかを確認します。
- PendingIntent オブジェクトを使用します。これにより、コンポーネントがエクスポートされるのを防ぎ、ターゲットアクションの Intent を不変にします。
- IntentSanitizer を使用して、サニタイズされた Intent のコピーを作成します
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class YourActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get the Intent from the previous activity
Intent intent = getIntent();
Intent forward = intent.getParcelableExtra("key");
ComponentName name = forward.resolveActivity(getPackageManager());
if (name.getPackageName().equals("safe_package") && name.getClassName().equals("safe_class")) {
startActivity(forward);
}
}
}
リンク
標準
- OWASP_MASVS_L1:
- MSTG_PLATFORM_2
- OWASP_MASVS_L2:
- MSTG_PLATFORM_2
- PCI_STANDARDS:
- REQ_2_2
- REQ_6_2
- REQ_6_3
- REQ_11_3
- HIPAA_CONTROLS:
- SECURITY221
- SECURITY212
- SECURITY213
- OWASP_MASVS_v2_1:
- MASVS_CODE_4
- SOC2_CONTROLS:
- CC_2_1
- CC_4_1
- CC_7_1
- CC_7_2
- CC_7_4
- CC_7_5