针对 Intent 配置易被盗用安全漏洞的修复方法

本文面向的是发布的应用中存在 Intent 配置易被盗用的安全漏洞的开发者。

问题说明

您的一个或多个应用存在 Intent 配置易被盗用问题,该问题让恶意网络或网站可以访问专用应用组件。请参阅 Play 管理中心内的通知。Play 管理中心内显示的截止日期过后,系统可能会将所有包含未修复安全漏洞的应用从 Google Play 中移除。

需要采取的行动

  1. 登录您的 Play 管理中心,然后转到“提醒”部分,了解受影响的应用以及解决这些问题的截止日期。

  2. 按照下文中强调的步骤更新受影响的应用。

  3. 提交受影响应用的更新版本。

重新提交后,我们会重新审核您的应用。审核过程可能需要几个小时才能完成。如果应用通过审核并成功发布,便无需进一步操作。如果应用未通过审核,则新版应用将无法发布,您会收到电子邮件通知。

更多详细信息

WebView 在访问不受信任的网络内容时会使用 Intent.parseUri 解析 intent:// 链接,然后使用 startActivity 发送这些 Intent;在这种情况下,WebView 很容易遭到 Intent 配置盗用攻击。恶意网络内容可能会借此操纵 WebView,进而向专用应用组件发送任意 Intent。这可能会导致应用遭攻破,例如受这类组件操纵的专用应用数据被盗。请注意,不受信任的网络内容往往包括通过 HTTP 加载的可信网域中的内容。

为避免此安全漏洞,建议您采用下列其中一种方法:

方法 1:确保 WebView 不能发送任意 Intent

针对通过 Intent.parseUri 构建的 Intent,应用可以使用以下代码限制此类 Intent 只能以隐式 Intent 的形式发送给具有 BROWSABLE Intent 过滤器的组件:

     // convert Intent scheme URL to Intent object
  Intent intent = Intent.parseUri(url);
  // forbid launching activities without BROWSABLE category
  intent.addCategory("android.intent.category.BROWSABLE");
  // forbid explicit call
  intent.setComponent(null);
  // forbid Intent with selector Intent
  intent.setSelector(null);
  // start the activity by the Intent
  view.getContext().startActivity(intent, -1);

方法 2:确保受影响的 WebView 不会加载不受信任的网络内容

如果 WebView 需要解析任意 intent:// 配置网址,那么请确保 WebView 不会加载不受信任的网络内容。不受信任的网络内容包括通过未加密连接加载的网络内容。开发者可以在清单中将 android:usesCleartextTraffic 设为 false,或设置禁止 HTTP 流量的网络安全配置。或者,开发者也可以防止任何受影响的 WebView 通过 loadUrl 加载采用 HTTP 协议的网址。

我们建议开发者务必防止受影响的 WebView 加载从不受信任来源获取且不受限制的网址(例如,从不受信任的 Intent 获取的网址)。

我们随时为您提供帮助
如果您针对此漏洞有技术方面的问题,可以在 Stack Overflow 上发帖咨询(使用“android-security”标签)。有关您需要采取哪些步骤来解决此问题的说明,请与我们的开发者支持团队联系。

该内容对您有帮助吗?

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