针对隐式 PendingIntent 漏洞的修复方法

本文面向的是其应用中存在隐式 PendingIntent 漏洞的开发者。

问题说明

您的一个或多个应用存在隐式 PendingIntent 问题,该问题可能会导致出现拒绝服务攻击、私有数据盗用和提权形式的安全威胁。请阅读下面的详细步骤,然后解决您的应用存在的问题。您可以通过 Play 管理中心针对相应应用提供的通知了解该应用中有哪些位置使用了隐式 PendingIntent。如果某个位置以“(in dynamically loaded code)”结尾,则该位置在由应用或应用使用的库动态加载的代码中。应用通常会通过按需功能分发使用动态加载的代码,但也存在其他不推荐使用的方法(部分不推荐使用的方法还违反了 Google Play 政策,不得采用)。此外,打包工具可以将应用代码转换为动态加载的代码。

我们建议您解决此问题,但这并非强制要求。此问题不会影响应用的发布状态。

更多详情

Android 应用使用 Intent 在组件之间发送消息。Intent 可用于指定目标组件(显式 Intent),或用于列出一项常规操作,然后让操作系统将 Intent 传递给设备上注册了与此操作匹配的 Intent 过滤器的任意组件(隐式 Intent)。

PendingIntent 是委托其他应用在未来某个时间进行传递的 Intent。创建封装在 PendingIntent 中的隐式 Intent 是一种安全漏洞,可能会导致发生拒绝服务攻击、私有数据盗用和提权。

后续步骤

1. 更新您的应用,通过下方突出显示的步骤解决“隐式 PendingIntent”提醒的问题。

检查您的应用,找到创建了 PendingIntent 的位置。例如,以下代码便会创建封装隐式 Intent 的 PendingIntent:

//创建隐式基本 Intent,并将其封装在 PendingIntent 中

Intent base = new Intent("ACTION_FOO");

base.setPackage("some_package");

PendingIntent pi = PendingIntent.getService(this, 0, base, 0);

Google 建议开发者采用以下任一方式(最好采用所有方式)来修复该漏洞:

  • 确保设置基本 Intent 的操作、软件包组件字段;
  • 确保 PendingIntent 仅传递给可信组件;
  • 使用 FLAG_IMMUTABLE(SDK 23 中的新增功能)创建 PendingIntent。此方法可防止接收 PendingIntent 的应用填充未填充的属性。如果应用在搭载 SDK 22 或较旧版本的设备上也能运行,我们建议开发者采用上述方案,并使用下列模式加强 PendingIntent 创建方式的安全性:

if (android.os.Build.VERSION.SDK_INT >= 23) {

  // 使用 FLAG_IMMUTABLE 创建 PendingIntent

} else {

  // 创建了 PendingIntent 的现有代码

}

2. 提交更新后的 APK

如要提交更新后的 app bundle 或 APK,请按以下步骤操作:

  1. 转到您的 Play 管理中心
  2. 选择相应的应用。
  3. 转到 App bundle 资源管理器
  4. 从右上角的下拉菜单中选择不合规 APK/app bundle 的应用版本,然后记下其所属的发布版本。
  5. 前往存在违反政策问题的轨道。该轨道对应以下 4 个页面之一:内部测试、封闭式测试、开放式测试或正式版。
  6. 点击页面右上角附近的创建新版本。(您可能需要先点击“管理轨道”)
    • 如果使用了违规 APK 的版本处于草稿状态,请舍弃该版本。
  7. 添加符合政策的 app bundle 或 APK 版本。
    • 确保 app bundle 或 APK 的不合规版本位于该发布版本的不包含部分。如需进一步的指南,请参阅这篇 Play 管理中心帮助文章的“不包含(app bundle 和 APK)”部分。
  8. 如需保存您对版本做出的更改,请选择保存
  9. 完成版本准备工作后,请选择检查发布版本

如果这个不符合政策规定的 APK 已发布到多个轨道,请在每个轨道中重复执行第 5 至 9 步。

在此期间,您的新应用或应用更新将会处于审核中状态,直至您的请求审核完毕。如果该应用未正确更新,您仍然会看到警告。

我们随时为您提供帮助

如果您有关于此漏洞的技术问题,可以在 Stack Overflow 上发帖咨询(使用“android-security”标签)。如需明确了解需要执行哪些步骤来解决此问题,您可以与我们的支持团队联系。

该内容对您有帮助吗?

您有什么改进建议?
false
主菜单
12589551554432036476
true
搜索支持中心
true
true
true
true
true
5016068
false
false