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>
实施强大的数据验证
深度链接可以包含传递给目标意图的其他参数,例如执行其他操作。安全深度链接处理的基础是严格的数据验证。开发人员应仔细验证和清理来自深度链接的所有传入数据,以防止恶意代码或值注入合法应用程序中。这可以通过将任何深度链接参数的值与预定义的预期值白名单进行比较来实现。
在公开敏感信息之前,应用应检查其他相关的内部状态,例如身份验证状态或授权。例如,完成游戏关卡的奖励。在这种情况下,值得验证是否已完成关卡的前提条件,如果没有,则重定向到主屏幕。
资源
- 验证 Android 应用链接
- 处理 Android 应用链接
- Web 意图解析
- 拦截 Arrive 应用的账户接管魔术链接
- 深度链接和 WebViews 利用 第 I 部分
- 深度链接和 WebViews 利用 第 II 部分
- Jetpack Navigation 中深度链接问题的最新建议