通用跨站脚本攻击(UXSS)

有同学问,用百度搜索了下,发现国内相关介绍基本是没有,就写篇文章来介绍下。不过看到有现成的介绍,就拿来翻译修改下。
本文的内容主要翻译来自该文章,把一些没必要的话给删了,做了一些整理修改,然后补充一些案例。

http://www.acunetix.com/blog/web-security-zone/universal-cross-site-scripting-uxss/

什么是UXSS?
大家都知道有反射型XSS、存储型XSS、DomXSS,还有之前wooyun知识库上由gainover翻译的mXSS,也就是突变XSS(文章地址http://drops.wooyun.org/tips/956)。
可能比较少同学了解何谓UXSS,UXSS全称Universal Cross-Site Scripting,翻译过来就是通用型XSS,也叫Universal XSS。
那么,UXSS由于前面提到的几种XSS有什么区别?

常见的XSS攻击的是因为客户端或服务端的代码开发不严谨等问题而存在漏洞的目标网站或者应用程序。这些攻击的先决条件是页面存在漏洞,而它们的影 响往往也围绕着漏洞页面本身的用户会话。换句话说,因为浏览器的安全功能的影响,XSS攻击只能读取受感染的会话,而无法读取其他的会话信息,也就是同源 策略的影响。
UXSS保留了基本XSS的特点,利用漏洞,执行恶意代码,但是有一个重要的区别:
不同于常见的XSS,UXSS是一种利用浏览器或者浏览器扩展漏洞来制造产生XSS的条件并执行代码的一种攻击类型。
讲了这么多大家应该明白,通俗的说,就是原来我们进行XSS攻击等都是针对Web应用本身,是因为Web应用本身存在漏洞才能被我们利用攻击;而UXSS不同的是通过浏览器或者浏览器扩展的漏洞来”制作XSS漏洞”,然后剩下的我们就可以像普通XSS那样利用攻击了。

 

影响
那么UXSS与通常的XSS有什么影响的区别?前面我们提到,因为同源策略,即使一个漏洞页面存在XSS,我们可以访问它的用户会话信息等,但是无法访问 其他域的相关的会话信息,而因为UXSS是利用浏览器本身或者浏览器扩展程序的漏洞,所以对于攻击发起时浏览器打开或缓存的所有页面(即使不同域的情况) 的会话信息都可以进行访问。简单的说,UXSS不需要一个漏洞页面来触发攻击,它可以渗透入安全没有问题的页面,从而创造一个漏洞,而该页面原先是安全无 漏洞的(比如下面的例子)。
Web浏览器是正在使用的最流行的应用程序之一、。浏览器可能有漏洞被发现,有一整个的漏洞纰漏过程,当一个新漏洞被发现的时候,不管是把漏洞藏起来自己利用还是说报告给官方,而这个过程中都有一段不小的时间,这一过程中漏洞都可能被利用于UXSS。
不仅是浏览器本身的漏洞,现在主流浏览器都支持扩展程序的安装,而众多的浏览器扩展程序可能导致带来更多的漏洞和安全问题。
因为UXSS攻击不需要页面本身存在漏洞,同时可能访问其他安全无漏洞页面,使得UXSS成为XSS里危险和最具破坏性的攻击类型之一。

UXSS案例
1、IE6或火狐浏览器扩展程序Adobe Acrobat的漏洞
这是一个比较老的漏洞,但这是一个比较经典的例子。当使用扩展程序时导致错误,使得代码可以执行。这是一个在pdf阅读器中的bug,允许攻击者在客户端执行脚本。构造恶意页面,写入恶意脚本,并利用扩展程序打开pdf时运行代码。
Stefano Di Paola 和 Giorgio Fedon在一个在Mozilla Firefox浏览器Adobe Reader的插件中可利用的缺陷中第一个记录和描述的UXSS
Adobe插件通过一系列参数允许从外部数据源取数据进行文档表单的填充,如果没有正确的执行,将允许跨站脚本攻击。原pdf: http://events.ccc.de/congress/2006/Fahrplan/attachments/1158- Subverting_Ajax.pdf或者详见http://jeremiahgrossman.blogspot.com/2007/01 /what-you-need-to-know-about-uxss-in.html

 

2、IE8跨站脚本过滤器缺陷
David Lindsay 和Eduardo Vela Nava已经在2010年的BlackHat Europe展示了这个漏洞的UXSS利用。
IE8中内置了XSS过滤器,用于检测反射XSS,并采取纠正措施:在页面渲染之前更改响应内容。
在这种特殊情况下,等号将会被过滤器去除,但是通过精心构造的XSS字符串在特定的地方,这个逻辑会导致浏览器创建XSS条件。微软的响应是改变了XSS 过滤器去除的字符。具体可以查看pdf: http://p42.us/ie8xss/Abusing_IE8s_XSS_Filters.pdf

3、Flash Player UXSS 漏洞 – CVE-2011-2107
一个在2011年Flash Player插件(当时的所有版本)中的缺陷使得攻击者通过使用构造的.swf文件,可以访问Gmail设置和添加转发地址。因此攻击者可以收到任意一个 被攻破的Gmail帐号的所有邮件副本(发送的时候都会抄送份)。Adobe承认了该漏洞,详见http://www.adobe.com /support/security/bulletins/apsb11-13.html

4、安卓版Chrome浏览器漏洞
移动设备也不例外,而且可以成为XSS攻击的目标。Chrome安卓版存在一个漏洞,允许攻击者将恶意代码注入到Chrome通过Intent对象加载的 任意的web页面。具体详见https://code.google.com/p/chromium/issues/detail?id=144813

其他的例子

http://insert-script.blogspot.com/2013/08/uxss-internet-explorer-euc-jp-parsing.html

http://www.rapid7.com/db/modules/auxiliary/gather/apple_safari_webarchive_uxss

http://www.wooyun.org/bugs/wooyun-2014-074655

http://www.cnvd.org.cn/flaw/show/CNVD-2012-5462

http://www.wooyun.org/bugs/wooyun-2014-071915

http://cxsecurity.com/issue/WLB-2012100086

http://www.maths.usyd.edu.au/u/psz/ff-utf7-uxss.html

更多的大家自己搜索把

典例分析
本来整理这篇文章的时候还不知道大牛发了一个UXSS,写完上wooyun正好就看到mramydnei大牛发了《安卓浏览器SOP绕过漏洞(UXSS)》的漏洞(详见http://zone.wooyun.org/content/14945),就补充到文章里。
简要分析下,这个漏洞是构造一个页面,页面嵌入iframe,然后通过\u0000进行浏览器的sop绕过进行XSS。
更多细节可以看大牛的博客以及参考文章http://parsec.me/625.html、http://parsec.me/660.html。

防范
防范UXSS的经验法则是打好所有的补丁,保持最新版本。
这将确保您的环境中使用的浏览器版本以及您所需要的扩展程序,是不可能通过UXSS进行漏洞利用的。
而然,这是否意味着你就高枕无忧呢?不是这样的,运行最新的版本也不能保证是完全安全的。当一个漏洞被发现、提交、确认、修复已经发布补丁,中间是有时间差的,而在这段时间内,将可能收到UXSS攻击。

另外,更多的XSS相关知识可以访问 https://xssing.org,目前在添加资料中

【via@fooying