深链接的不安全使用

OWASP 类别: MASVS-PLATFORM:平台交互

概述

与深链接相关的安全风险源于其核心功能,即能够在移动应用中实现无缝导航和交互。深链接漏洞源于深链接实现或处理中的弱点。这些缺陷可能被恶意攻击者利用,以访问特权功能或数据,可能导致数据泄露、隐私侵犯和未经授权的操作。攻击者可以通过各种技术利用这些漏洞,例如深链接劫持和数据验证攻击。

影响

缺乏适当的深链接验证机制或深链接的不安全使用,可以帮助恶意用户执行诸如主机验证绕过、跨应用脚本和远程代码执行等攻击,这些攻击是在易受攻击应用的权限上下文中进行的。根据应用的性质,这可能导致对敏感数据或功能的未经授权的访问。

根据设计,Android 允许多个应用为相同的深链接 URI 注册 Intent 过滤器。为了防止恶意应用拦截打算用于您的应用的深链接,请在应用的 AndroidManifest 中的 intent-filter 中实现 android:autoVerify 属性。这允许用户选择他们首选的应用来处理深链接,确保预期的操作并防止恶意应用自动解释它们。

Android 12 引入了 对 Web Intent 的更严格处理,以提高安全性。应用现在必须经过验证才能处理来自特定域的链接,这可以通过 Android 应用链接或系统设置中的用户选择来实现。这可以防止应用劫持它们不应该处理的链接。

要为您的应用启用链接处理验证,请添加与以下格式匹配的 Intent 过滤器(此示例取自 验证 Android 应用链接 文档)

  <!-- Make sure you explicitly set android:autoVerify to "true". -->
  <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
  
      <!-- If a user clicks on a shared link that uses the "http" scheme, your
           app should be able to delegate that traffic to "https". -->
      <data android:scheme="http" />
      <data android:scheme="https" />
  
      <!-- Include one or more domains that should be verified. -->
      <data android:host="..." />
  </intent-filter>

深度链接可以包含传递给目标意图的其他参数,例如执行其他操作。安全深度链接处理的基础是严格的数据验证。开发人员应仔细验证和清理来自深度链接的所有传入数据,以防止恶意代码或值注入合法应用程序中。这可以通过将任何深度链接参数的值与预定义的预期值白名单进行比较来实现。

在公开敏感信息之前,应用应检查其他相关的内部状态,例如身份验证状态或授权。例如,完成游戏关卡的奖励。在这种情况下,值得验证是否已完成关卡的前提条件,如果没有,则重定向到主屏幕。

资源