如何修复 Fragment 注入漏洞

本文面向的是在应用中采用不安全的 PreferenceActivity 类实施方式的开发者。在这种情况下,这些类会让人利用 Fragment 实现注入攻击。这种实现方式让恶意的外部应用可以加载原本不公开的 Fragment。

问题说明

从 2017 年 3 月 1 日起,Google Play 开始禁止发布存在以下情况的新应用或应用更新:其 PreferenceActivity 类可能有安全漏洞,让攻击者可以利用 Fragment 实现注入攻击。请参阅 Play 管理中心内的通知。Play 管理中心显示的截止日期过后,系统可能会将所有包含未修复安全漏洞的应用从 Google Play 中移除。

需要采取的行动​

  1. 登录您的 Play 管理中心,然后转到“提醒”部分,了解受影响的应用以及解决这些问题的截止日期。
  2. 更新受影响的应用并修复该漏洞。
  3. 提交受影响应用的更新版本。

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

更多详细信息

如果可能,请在您的清单中为 PreferenceActivity 设置 exported=false。这样可防止外部应用向该类发送 Intent。

如果必须将存在漏洞的 PreferenceActivity 导出至外部应用,那么请确定该类存在漏洞的原因,然后采取适当的措施。有以下两种可能性:

  1. 错误地实施 isValidFragment:

检查存在漏洞的类是否包含或沿用了实施 isValidFragment 的方式(即在所有代码路径中返回 True)。如果确实是这样,请更新该类,以检查是否存在允许的 Fragment 类列表。例如:如果 PreferenceActivity 应该允许使用 MyFragment 类而不得使用其他 Fragment,请按照如下方式实施检查:

         public boolean isValidFragment(String fragmentName) {
            return MyFragment.class.getName().equals(fragmentName);

         }

  1. targetSdkVersion 小于 19 并且未实施 isValidFragment:

如果应用目前在清单中将其 targetSdkVersion 设为小于 19 的值,并且存在漏洞的类不包含 isValidFragment 的任何实施方式,那么漏洞便来自于 PreferenceActivity。

为了进行修复,开发者应该将 targetSdkVersion 更新为 19 或更高版本。或者,如果 targetSdkVersion 无法更新,那么开发者应按照第 1 种情况中所述的说明实现 isValidFragment,以检查是否存在允许的 Fragment 类。

请注意,应用还必须遵守开发者分发协议内容政策

我们随时为您提供帮助

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

该内容对您有帮助吗?

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