关于腾讯玄武实验室公布的应用克隆漏洞的一些思考
2018-01-09 国家信息安全漏洞共享平台 公布了 《关于Android平台WebView控件存在跨域访问高危漏洞的安全公告》
另外,关于该漏洞的原理 这里 有个补充说明:
从上文中我们可以看出是由于 WebView 的 file 跨域问题,使应用加载的 JavaScript 可以获取应用的 私有数据 (即 /data/data/packageName/ 下的文件)导致的这个漏洞,其中涉及到了 2 个方法: setAllowFileAccessFromFileURLs 和 setAllowUniversalAccessFromFileURLs 。下面是这 2 个方法的源码:
setAllowUniversalAccessFromFileURLs
/**
* Sets whether JavaScript running in the context of a file scheme URL
* should be allowed to access content from any origin. This includes
* access to content from other file scheme URLs.
* ...
*/
public abstract void setAllowUniversalAccessFromFileURLs(boolean flag);
setAllowFileAccessFromFileURLs
/**
* Sets whether JavaScript running in the context of a file scheme URL
* should be allowed to access content from other file scheme URLs. To
* enable the most restrictive, and therefore secure policy, this setting
* should be disabled. Note that the value of this setting is ignored if
* the value of {@link #getAllowUniversalAccessFromFileURLs} is true.
* Note too, that this setting affects only JavaScript access to file scheme
* resources. Other access to such resources, for example, from image HTML
* elements, is unaffected.
* ...
*/
public abstract void setAllowFileAccessFromFileURLs(boolean flag);
根据这 2 个方法的注释,我们可以得到这样的结论:如果要通过 JavaScript 获得应用的私有数据,WebView 必须通过 loadUrl(“file:///XXXXXXXXXX”) 的形式访问本地文件,那么 loadUrl 可以访问其它 app 的私有数据吗?很明显如果用户没有将手机 Root ,一个 app 的是无法直接通过 file:///XXXX 的形式访问其它 app 的私有数据的。所以,对于一个没有 Root 的手机我们可以得到利用该漏洞的一般步骤(这里还以支付宝为例):
- 向用户下发一个包含上传应用私有数据代码的 html 文件,假设在用户手机上存放为 /sdcard/appcopy.html ;
- 利用支付宝扫码得到二维码信息 “file:///sdcard/appcopy.html” 或通过短信中携带该信息的方式让用户主动选择使用支付宝打开 ;
- 复制用户信息并上传给黑客;
- 黑客拿到信息写入自己的手机,并打开支付宝;
- 支付宝没有校验手机的 Mac , IMEI 等各种硬件信息,导致登录成功,黑客成功窃取用户资金;
从上面的步骤来看,黑客首先让用户下载一个有安全隐患的文件,而用户下载文件时往往会有提醒,一般用户都不会随意下载,这一步就可以过滤到大多数用户了。然后,还必须让用户主动使用支付宝打开该文件(因为没有 Root 的手机,一个 app 是无法访问另一个 app 的私有数据的),如果以二维码的方式是很难与受感染的手机进行匹配的,正如玄武实验室提出的方法,利用短信的方式进行诱导;随着人们安全意识的提高,越来越少的人才会点击不明短信中的链接,这里也能过滤到一大部分人。如果 1、2 步能够成功实现 3、4 步就没有什么难点了。接下来是关键的第 5 步,如果我记得没错的话,支付宝从很早就将用户账号和手机硬件进行了绑定,等用户在其它手机进行登录的时候,支付宝会向用户绑定的手机号发送短信验证,只要用户手机卡不丢失,黑客也是 无法窃取用户资金 的。另外,setAllowFileAccessFromFileURLs 和 setAllowUniversalAccessFromFileURLs 在 android 4.1 之后是默认关闭的,考虑到国内大部分手机系统版本都在 android 4.1 以上,大多数情况下使用 WebView 也不会存在该漏洞。
综上所述: 能够利用该漏洞的前提条件十分苛刻,是很难成功的,这也是该漏洞从 12年3月 首次被发现到现在没有爆发的原因之一,我们不用过分担心。
如果文中有什么不妥之处,还望斧正。