跳转至

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