Intent Redirection
Intent 重定向
描述
当应用程序向另一个组件发送 Intent(用于请求另一个应用程序组件执行操作的消息传递对象),但攻击者操纵该 Intent 将其重定向到恶意应用程序或活动时,就会出现 Android 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