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。