OWASP 类别: MASVS-PLATFORM: 平台交互
概览
与深层链接相关的安全风险源于其核心能力:实现移动应用内的无缝导航和交互。深层链接漏洞是由深层链接实现或处理中的弱点引起的。恶意攻击者可以利用这些缺陷访问特权功能或数据,从而可能导致数据泄露、隐私侵犯和未经授权的操作。攻击者可以通过各种技术利用这些漏洞,例如深层链接劫持和数据验证攻击。
影响
缺少适当的深层链接验证机制,或不安全地使用深层链接,可能帮助恶意用户在易受攻击的应用的权限上下文中执行主机验证绕过、跨应用脚本攻击和远程代码执行等攻击。根据应用的性质,这可能导致未经授权访问敏感数据或功能。
缓解措施
防止深层链接劫持
按照设计,Android 允许多个应用为同一个深层链接 URI 注册 Intent 过滤器。为了防止恶意应用拦截本应发送给你的应用的深层链接,请在应用的 AndroidManifest
中,在 intent-filter
中实现 android:autoVerify
属性。这允许用户选择他们偏好的应用来处理深层链接,确保预期的操作并防止恶意应用自动解释它们。
Android 12 引入了更严格的网络 Intent 处理以提高安全性。应用现在必须通过 Android App Links 或用户在系统设置中的选择来验证,才能处理来自特定域的链接。这可以防止应用劫持它们不应处理的链接。
要为你的应用启用链接处理验证,请添加与以下格式匹配的 Intent 过滤器(此示例取自验证 Android App Links 文档)
<!-- 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>
实施稳健的数据验证
深层链接可以包含额外参数,这些参数用于目标 Intent,例如执行进一步的操作。安全处理深层链接的基础是严格的数据验证。开发者应该一丝不苟地验证和清理所有来自深层链接的传入数据,以防止恶意代码或值被注入合法应用中。这可以通过对照预定义的允许值列表检查任何深层链接参数的值来实现。
应用在暴露敏感信息之前,应检查其他相关的内部状态,例如认证状态或授权。例如,完成游戏某个关卡的奖励。在这种情况下,值得验证完成该关卡的先决条件,如果未完成则重定向到主屏幕。
资源
- 验证 Android App Links
- 处理 Android App Links
- 网络 Intent 解析
- 通过拦截 Arrive 应用的魔术链接实现账户接管
- 深层链接和 WebView 漏洞利用(第一部分)
- 深层链接和 WebView 漏洞利用(第二部分)
- Jetpack Navigation 中最近关于深层链接问题的建议