隐式 intent 盗用

OWASP 类别: MASVS-PLATFORM:平台互动

概览

如果应用在调用 intent 时未指定完全限定的组件类名称或软件包,便会出现隐式 intent 盗用漏洞。这会让恶意应用取代预期的应用,通过注册 intent 过滤器来拦截 intent。

根据 intent 内容,攻击者可能会读取敏感信息或与可变对象互动,例如可变 PendingIntent或 Binder。

影响

通过盗用隐式 intent,攻击者可以读取或修改 intent 的内容,并拦截 intent 以执行操作。这会导致敏感信息/数据泄露或启用由攻击者控制的组件。

缓解措施

通过调用 setPackage(),将 intent 设为显式 intent,如以下代码段所示:

Kotlin

val intent = Intent("android.intent.action.CREATE_DOCUMENT").apply {
    addCategory("android.intent.category.OPENABLE")
    setPackage("com.some.packagename")
    setType("*/*")
    putExtra("android.intent.extra.LOCAL_ONLY", true)
    putExtra("android.intent.extra.TITLE", "Some Title")
}

startActivity(intent)

Java

Intent intent = new Intent("android.intent.action.CREATE_DOCUMENT");
intent.addCategory("android.intent.category.OPENABLE");

intent.setPackage("com.some.packagename");

intent.setType("*/*");
intent.putExtra("android.intent.extra.LOCAL_ONLY", true);
intent.putExtra("android.intent.extra.TITLE", "Some Title");
startActivity(intent);

如果您需要使用隐式 intent,请忽略您不想公开的任何敏感信息或可变对象。当应用无法确切了解哪个应用将执行操作(例如,撰写电子邮件、拍照等)时,可能需要使用隐式 intent。

资源