XSSI攻击利用

个人日记

 

0x00 介绍


From: MBSD Technical Whitepaper

PS: MBSD是一家日本安全公司,最近好像经常分享技术文档的样子。

Cross Site Script Inclusion (XSSI) 跨站脚本包含是一种攻击技术允许攻击者通过恶意js绕过边界窃取信息。具体的说,应该是通过潜入script标签加载外部数据,for example:

1
2
<!-- attacker's page loads external data with SCRIPT tag -->
<SCRIPT src="http://target.wooyun.org/secret"></SCRIPT>

过去几年,web安全研究者之中通用的认识中js文件,jsonp, json,或者版本较老的浏览器都有可能受到这种方式的攻击,除此之外,还可以通过一些浏览器的漏洞来得到js的错误信息利用,不过目前应该已经修复的差不多了。

2014,我们针对这个技术进行了专门的研究,发现了一些有趣的利用技术和浏览器漏洞,可以获取一些简单的文本中的信息,比如csv,在一些特定的情境下还可以获得更复杂的信息。我们主要的研究方向在于通过客户端脚本去识别目标数据的方法,比如变量,或者函数名。

下一节会开始介绍利用技术,最后会谈论下防御的手段。

0x01 攻击技术/漏洞


我们总共发现了5种与xssi相关的漏洞利用技术,或者是浏览器漏洞。

  • IE bug导致错误信息泄漏
  • 通过UTF-16编码获取其它类型的数据
  • chrome/firefox 中 Harmony proxy bug利用
  • 穷举
  • csv获取

2.1 IE bug导致错误信息泄漏


为了防止js错误信息跨域泄漏,对于外部加载的js文件,现在主流的浏览器只有固定的错误信息,比如“script error”,当是在ie9与ie10,情况不一定如此。

一般来说,在外部js发生语法错误的情况下,浏览器只会提供固定的错误信息,但是当在runtime发生错误的情况下,浏览器会提供详细的错误信息。比如"foo 未定义"之类的,某些浏览器一旦允许外域js回复详细的错误信息,就会导致信息泄漏。

就是说,当某个网页的内容能被js识别为javascript格式的话,那么就可能通过错误信息获取到目标的内容。

比如,目标网页

HTTP/1.1 200 OKContent-Type: text/csvContent-Disposition: attachment; filename="a.csv"Content-Length: 131,abc,def,ghi

攻击者设置错误显示

1
2
3
<SCRIPT>window.onerror = function(err) {alert(err)}</SCRIPT>
<!-- load target CSV -->
<SCRIPT src="(target data's URL)"></SCRIPT>

一旦加载成功,网页则会显示 "'abc' is undefined" 。

会出现这种情况是因为浏览器将目标识别为javascript,那么abc就会被识别为某个未定义的变量。当为这种情况的时候,浏览器就允许页面捕捉来自不同网页的错误信息。

做一个总结就是,有被利用的可能性的数据都是可以被识别,或者通过某种方式识别为有效js的数据。

我们在2014年7月报告这个问题,分配MS14-080,后来的 CVE-2014-6345也同样被分配到这个bug (1](2] 他们的修补方案跟其他的浏览器是差不多的,把错误信息改成某个固定的信息。

不过,稍微需要注意的一点,出现该漏洞的只有ie 9 和 ie 10.

遗憾的是我们并不是最早注意到这个问题的货,08年的时候,安全研究人员Chris Evans就在firefox (3]中发现了类似的问题,不过他的攻击代码看起来好麻烦的样子,这货利用多重重定向来欺骗浏览器。另外一件事就是13年的时候,研究人员Yosuke Hasegawa 和 @masa141421356也做过相关的研究,(4]

2. 用UTF-16获取json和其他类型的数据


大家可以看到,上面的东西只在csv这种操蛋的玩意上有用, 所以我们做了更多的研究看看能否获取不同格式的数据,之后我们发现通过UTF-16编码可以达到我们的目标。

其实本身是一个很简单的技巧 比如页面a ,我们加入 charset="UTF-16BE"

1
2
3
4
<!-- set an error handler -->
<SCRIPT>window.onerror = function(err) {alert(err)}</SCRIPT>
<!-- load target JSON -->
<SCRIPT src=

文章评论