关于 Android任意URL跳转的这些危害你知道吗?

admin 2022年5月19日10:07:38评论245 views字数 2665阅读8分53秒阅读模式


1
Android页面是如何跳转的

众所周知, Android 中页面跳转表现形式为 app 内的 Activity 组件间跳转,以及拉起其他 app 的 Activity 组件,主要依赖于 Intent ,也可以通过在 AndroidManifest.xml 中定义 <intent-filter> 的 <data> 标记进行 DeepLinks 跳转。相应的,跳转的时候可以传递参数,若接收参数方未对参数做校验,就存在被利用的风险。

组件间跳转,通过 Intent 拉起:

关于 Android任意URL跳转的这些危害你知道吗?

关于 Android任意URL跳转的这些危害你知道吗?

因为移动端需要混合 H5 开发,不少应用会内置浏览器控件 WebView (网页视图) 。WebView 控件主要用于在 Android app中加载 HTML 网页。网页端和 app可以通过 js 进行交互,如:网页读取手机联系人、调用手机相关的 api 等。

通常从网页中跳转应用程序会使用 DeepLinks 和 Intent 协议。DeepLinks 是一种在移动端网页中启动应用程序的超链接,目前移动端实现 DeepLinks 的方式都是通过URI Scheme,当隐式调用匹配到多个Intent时,会弹窗让用户选择。

在 Andriod 6.0 以后安卓发布了 AppLinks,可以让应用和网站 URL 进行绑定,这样当用户点击网站链接的时候就能调起指定 app,而不是出现选择界面,体验更加友好。本文暂不讨论这种形式。

网页跳组件,通过 DeepLinks 拉起:

 (1) 应用需事先定义 Intent Filter 的 data

关于 Android任意URL跳转的这些危害你知道吗?

 (2) 在网页中点击链接拉起应用

关于 Android任意URL跳转的这些危害你知道吗?

关于 Android任意URL跳转的这些危害你知道吗?

3、网页跳组件,通过 Intent 协议拉起

查看 Intent.parseUri(String uri, int flags) 的源码可知,第二个参数flags有三种类型:“Intent.URI_INTENT_SCHEME” 、 “Intent.URI_ANDROID_APP_SCHEME”和 “URI_ALLOW_UNSAFE”,前两种表示 Intent 协议可解析的两种格式 “intent” 和 “android-app”。

  • Intent:// 格式:

关于 Android任意URL跳转的这些危害你知道吗?

关于 Android任意URL跳转的这些危害你知道吗?

在网页中点击链接拉起应用

关于 Android任意URL跳转的这些危害你知道吗?


2
页面跳转的攻击链路

ATT&CK For Mobile 攻击模型中描述,初始访问阶段中的 drive-by compromise ,即在用户正常浏览网页时获取控制权限的技术手段。当用户访问网站时扫描用户浏览器版本和插件,利用漏洞访问内网,获取系统权限。

对于使用 WebView 加载网页的应用程序来说,同样也存在攻击面,当用户误访问一个恶意页面,即可利用移动端漏洞攻击手机系统,常见利用方式为获取用户账号体系的登录凭证及存在应用中的敏感数据,甚至利用应用实现的重要功能实现更深层次的攻击。

关于 Android任意URL跳转的这些危害你知道吗?

3
WebView中的任意URL漏洞

那么,如何利用页面跳转实现恶意利用呢?从上文 demo 中可以看到,使用 Intent 进行组件间跳转,需要在手机上安装一个恶意 app,而使用 DeepLinks 在用户点击网页链接可以实现远程攻击。下文主要说明 DeepLinks 远程攻击利用,通过 Intent 进行本地攻击也是类似操作。

使用 DeepLinks 需要在 AndroidManifest.xml 中定义 Intent Filter,直接查看 AndroidManifest.xml 可看到所有使用 DeepLinks 的组件。

关于 Android任意URL跳转的这些危害你知道吗?

WebViewActivity 中接收外部传入参数,且未校验直接加载

关于 Android任意URL跳转的这些危害你知道吗?

当用户在网页点击以下链接,触发一个 1-click 的任意 URL 跳转漏洞,拉起 WebViewActivity并加载 evil.com

关于 Android任意URL跳转的这些危害你知道吗?

关于 Android任意URL跳转的这些危害你知道吗?

上图因为从浏览器发起跳转,而浏览器自身做了跳转提示,对用户有一定的安全提示作用。

当获取到一个任意URL跳转漏洞,能达到什么样的危害取决于业务功能和利用方式。在 Web 安全中,任意 URL 跳转漏洞由于功能限制,可达到的危害不高。但在移动应用中,业务往往会通过 WebView 实现重要功能,若被利用造成的危害也就越大。

1、调用 java 敏感接口

当 WebView 设置允许加载 js,且添加了 js 与 java 交互接口,则有机会被攻击者访问。通常,js 接口分为两类:第一类获取用户敏感信息,如 Token 、定位信息等,第二类执行敏感操作。

关于 Android任意URL跳转的这些危害你知道吗?

在Android 4.2以后,通过js 调用java 接口需要添加@JavascriptInterface 注解

关于 Android任意URL跳转的这些危害你知道吗?

2、获取登录凭证

存在账号体系的应用程序,在加载网页时可能会设置 Cookie 以保持账号数据的同步,WebView 的 Cookie 文件通常存在于/data/data/appName/app_webview/Default/Cookies ,窃取 Cookie 有多种方式:

(1)若 WebView 设置了允许跨域读取文件,则可实现文件窃取,从而窃取 Cookie ,也就是玄武实验室披露的应用克隆漏洞。

关于 Android任意URL跳转的这些危害你知道吗?

(2)若业务在加载网页时设置 Cookie,那么通过任意 URL 跳转漏洞跳转到指定网站就能够直接获取 Cookie,同 XSS 获取 Cookie 方式,开一个服务端监听或者使用 XSS 平台。

关于 Android任意URL跳转的这些危害你知道吗?

(3)调用 java 敏感接口

同上文所述,若应用程序在 java 接口中实现了获取自身应用登录凭证的功能,则可以通过调用接口获取登录凭证。

3、访问任意组件

WebView 也可以处理 Intent 协议,通常在跳转拦截解析 Intent 协议,导向其他组件,造成 LaunchAnyWhere

关于 Android任意URL跳转的这些危害你知道吗?

更甚者,可以结合其他漏洞造成 RCE,利用思路为:

通过应用内的 LaunchAnyWhere 拉起私有组件,利用路径穿越漏洞或者任意文件读写漏洞覆盖可执行文件达到 RCE。


4
小结

本文阐述了 Android 中任意 URL 跳转漏洞可能产生的危害,其实最关键是要遵循安全设计原则,外部可控的参数都是不可信的,接收到参数需要校验再使用。还需实现纵深防御,比如不止在漏洞入口做校验,对于业务中重要敏感功能、敏感接口还需二次校验;梳理业务功能,若无必要,限制不允许加载js、不允许跨域读文件等功能。


参考文章:

1、【ATT&CK For Mobile】https://attack.mitre.org/matrices/mobile/android/

2、https://blog.oversecured.com/Android-security-checklist-webview/


精彩文章推荐


浅析污点分析技术



什么是非导出组件的越权访问?开发者必看



什么是对抗样本攻击,这篇文章告诉你......



Spring Cloud Function 远程代码执行漏洞安全风险通告


原文始发于微信公众号(vivo千镜):关于 Android任意URL跳转的这些危害你知道吗?

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月19日10:07:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   关于 Android任意URL跳转的这些危害你知道吗?http://cn-sec.com/archives/1018267.html

发表评论

匿名网友 填写信息