OWASP 类别: MASVS-PLATFORM: 平台交互
概览
StrandHogg 攻击 / 任务亲和力漏洞是由 Android 处理多任务的方式中的设计缺陷导致/促成的,特别是称为“任务重新关联”(task reparenting)的功能。应用任务重新关联是一种允许应用将 Activity 从一个任务移动到另一个任务的功能。
StrandHogg 攻击利用了对如何审查传入的应用任务堆栈 Activity 的不明确之处,并允许恶意应用进行以下操作:
- 将恶意 Activity 移入或移出受害者堆栈
- 在受害者 Activity 完成后,将恶意 Activity 设置为返回堆栈
通过操纵 allowTaskReparenting
和 taskAffinity
设置来利用此漏洞。
影响
恶意应用可以将其某个 Activity 的 taskAffinity 设置为与目标应用的 packageName 匹配。这可以与 Intent 劫持相结合,以便用户下次启动目标应用时,恶意应用也会启动并显示在目标应用的顶部。
然后可以使用任务亲和力漏洞来劫持合法的用户操作。
用户可能会被诱骗将凭据提供给恶意应用。默认情况下,一旦 Activity 启动并与任务关联,该关联会持续存在于 Activity 的整个生命周期。但是,将 allowTaskReparenting 设置为 true 会打破此限制,允许现有 Activity 重新关联到新创建的“原生”任务。
例如,应用 A 可以被应用 B 针对,在从应用 A 完成的 Activity 返回时,将应用 A 的 Activity 重定向到应用 B 的 Activity 堆栈。这种从一个应用到另一个应用的切换对用户是隐藏的,并会产生重大的网络钓鱼威胁。
缓解措施
更新到 android:minSdkVersion="30"
。
StrandHogg 攻击 / 任务亲和力漏洞最初在 2019 年 3 月修复,更新和更全面的变种在 2020 年 9 月修复。Android SDK 版本 30 及更高版本(Android 11)包含适当的操作系统补丁以避免此漏洞。虽然可以通过单个应用配置部分缓解 StrandHogg 攻击的第 1 版,但第 2 版攻击只能通过此 SDK 版本补丁来阻止。
资源
- Usenix 15 会议上描述该漏洞的原始学术论文{.external}
- Promon 安全团队对原始漏洞的扩展描述{.external}
- Android 开发者关于 android:allowTaskReparenting 的文档
- Android 开发者关于 android:taskAffinity 的文档
- Android 开发者关于 android:allowTaskReparenting 应用元素的文档