Android 10以下版本任务劫持漏洞是否有正式有效的修复方案?
Android任务劫持相关问题解答
Gmail/Instagram可被复现劫持的原因
你操作没有错误,该漏洞可复现的核心原因如下:
- Gmail、Instagram的主启动Activity未显式设置
android:taskAffinity属性,安卓系统默认会将应用包名作为默认taskAffinity值,恶意应用直接将自身Activity的taskAffinity设置为对应包名即可匹配到目标应用的任务栈。 - 两者均未给主入口Activity配置
singleInstance/singleTask这类强隔离任务栈的启动模式,也未全局设置allowTaskReparenting="false",恶意应用配合该配置即可将目标应用的启动重定向到自身Activity。
修复方案仍可复现的原因
多数公开教程提到的修复方案只覆盖了部分规则,需同时满足以下所有配置才能完全修复:
- 显式给所有对外导出的Activity设置独立的
android:taskAffinity值,不要使用默认包名 - 主启动Activity配置
android:launchMode="singleTask",强制在应用自有任务栈启动,禁止其他应用的Activity并入该任务栈 - 全局给Application节点或所有Activity设置
allowTaskReparenting="false",禁止Activity被重定向到其他应用的任务栈 - 非对外暴露的Activity显式设置
android:exported="false"
Android官方的正式修复方案
- 系统层面:从Android 12(API Level 31)开始收紧了任务栈匹配规则,targetSdkVersion>=31的应用必须显式声明
android:exported属性,同时普通应用默认无法获取其他应用的taskAffinity值,恶意应用必须申请QUERY_ALL_PACKAGES权限才能构造匹配规则,大幅提升了攻击门槛。 - 应用兼容层面:官方针对低版本系统的修复建议就是上述提到的全量配置规则,适配所有Android版本即可完全避免任务劫持漏洞。
内容的提问来源于stack exchange,提问作者Sher Sanginov
相关产品推荐
相关产品推荐

