首页 > 移动安全 > 实战Webview跨域访问风险
2018
01-14

实战Webview跨域访问风险

漏洞原理:

WebView对象的行为是通过WebSettings类进行设置的,如果配置不当,攻击者就可以利用该漏洞可以打破Android沙盒隔离机制,从而通过某个应用来攻击其它应用,盗取其它应用本地保存的配置文件、敏感信息等。

主要利用了android.webkit.WebSettings类中setAllowFileAccess()、setJavaScriptEnabled()、setAllowFileAccessFromFileURLs()、setAllowUniversalAccessFromFileURLs()四个方法配置不当(允许webview使用file协议并允许使用javaScript)的风险,并配合Activity组件暴露漏洞进行攻击。

setAllowFileAccess()

  1. // 启用或禁用Webview中的文件访问,默认是true
  2. webView.getSettings().setAllowFileAccess(true);

setJavaScriptEnabled()

  1. // 设置webview是否启用javascript执行,默认是false,设置为true就是启用javascript执行。
  2. webview.getWebSettings().setJavaScriptEnabled(true);

setAllowFileAccessFromFileURLs()

  1. // 设置是否允许通过 file url 加载的文件中Js代码读取其他的本地文件。
  2. // 需要注意的是如果getAllowUniversalAccessFromFileURLs()的值为true,则此设置的值将被忽略。要启用最严格的安全策略,应该禁用此设置:
  3. webView.getSettings().setAllowFileAccessFromFileURLs(false);
  4. // Api级别15及以下,默认是true
  5. // Api级别JELLY_BEAN(API级别16,android4.1版本代号,中文翻译果冻豆)及以上默认是false

setAllowUniversalAccessFromFileURLs()

  1. // 设置是否允许通过 file url 加载的 Javascript 可以访问其他的源(包括httphttps等源)
  2. webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
  3. // Api级别15及以下,默认是true
  4. // Api级别JELLY_BEAN(API级别16,android4.1版本代号,中文翻译果冻豆)及以上默认是false
漏洞危害:

攻击者利用配置不当的风险,诱导用户点击攻击链接,在本地生成html文件,并使用intent对象传递该恶意html的file url给被攻击app可导出的组件,使被攻击app加载本地生成html文件中的恶意js,达到盗取用户其它应用私有目录中保存的敏感欣喜、配置文件的目的。会导致隐私信息泄露,针对IM类软件会导致聊天信息、联系人等等重要信息泄露,针对浏览器类软件,则更多的是cookie信息泄露。

以某个app为例,可一下形成该漏洞的原因,以及进行测试的方法。

1,如图X5WebView类继承了webview类,并且设置了允许file协议,以及启用了javascript执行;

实战Webview跨域访问风险 - 第1张  | 阿德马Web安全

2,再看看使用该X5Webview类的Activity,发现URL是从intent传递的对象中获取的,并且没有做任何白名单处理,直接启动了Activity;

实战Webview跨域访问风险 - 第2张  | 阿德马Web安全

3,并且发现该activity是可导出的,如图:

实战Webview跨域访问风险 - 第3张  | 阿德马Web安全

基于以上三点,攻击者可以用恶意链接实现生成本地恶意攻击html,并传递恶意html的file路径给可导出的组件,该组件加载访问html文件执行其中的恶意js,会导致私有目录中的文件被攻击者获取。

最后编辑:
作者:admin
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。