关于腾讯玄武实验室公布的应用克隆漏洞的一些思考

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 的手机我们可以得到利用该漏洞的一般步骤(这里还以支付宝为例):

  1. 向用户下发一个包含上传应用私有数据代码的 html 文件,假设在用户手机上存放为 /sdcard/appcopy.html ;
  2. 利用支付宝扫码得到二维码信息 “file:///sdcard/appcopy.html” 或通过短信中携带该信息的方式让用户主动选择使用支付宝打开 ;
  3. 复制用户信息并上传给黑客;
  4. 黑客拿到信息写入自己的手机,并打开支付宝;
  5. 支付宝没有校验手机的 Mac , IMEI 等各种硬件信息,导致登录成功,黑客成功窃取用户资金;

从上面的步骤来看,黑客首先让用户下载一个有安全隐患的文件,而用户下载文件时往往会有提醒,一般用户都不会随意下载,这一步就可以过滤到大多数用户了。然后,还必须让用户主动使用支付宝打开该文件(因为没有 Root 的手机,一个 app 是无法访问另一个 app 的私有数据的),如果以二维码的方式是很难与受感染的手机进行匹配的,正如玄武实验室提出的方法,利用短信的方式进行诱导;随着人们安全意识的提高,越来越少的人才会点击不明短信中的链接,这里也能过滤到一大部分人。如果 1、2 步能够成功实现 3、4 步就没有什么难点了。接下来是关键的第 5 步,如果我记得没错的话,支付宝从很早就将用户账号和手机硬件进行了绑定,等用户在其它手机进行登录的时候,支付宝会向用户绑定的手机号发送短信验证,只要用户手机卡不丢失,黑客也是 无法窃取用户资金 的。另外,setAllowFileAccessFromFileURLs 和 setAllowUniversalAccessFromFileURLs 在 android 4.1 之后是默认关闭的,考虑到国内大部分手机系统版本都在 android 4.1 以上,大多数情况下使用 WebView 也不会存在该漏洞。

综上所述: 能够利用该漏洞的前提条件十分苛刻,是很难成功的,这也是该漏洞从 12年3月 首次被发现到现在没有爆发的原因之一,我们不用过分担心。

如果文中有什么不妥之处,还望斧正。

猜你喜欢

转载自blog.csdn.net/niuzhucedenglu/article/details/79042834