4.1.4 近年典型XSS攻击事件分析

1.雅虎邮箱XSS漏洞

2016年雅虎邮箱(见图4-6)被报具有XSS漏洞,黑客利用该漏洞能直接把受害者的收件内容转发到外部网站,并且顺带有蠕虫扩散的功能。不过让人庆幸的是,此漏洞在互联网上还没有大面积传播之前已经被官方修复。

图4-6 雅虎邮箱

这个漏洞影响了所有版本的雅虎Web邮箱,但移动App并未受影响。据报道,雅虎邮箱是全球第二大电子邮件服务商,截止2014年2月,它已拥有3亿客户。

首先,发送一封带有所有已知HTML标签的邮件进行fuzz,看看雅虎邮箱有哪些标签没有过滤。观察雅虎邮箱的测试结果后,你会注意到,如果bool型的HTML属性赋予了值,过滤器会把它remove掉,但是等号会保留下来。

比如:


<INPUT TYPE="checkbox" CHECKED="hello" NAME="check box">

过滤后:


<INPUT TYPE="checkbox" CHECKED= NAME="check box">

初看似乎没什么问题,但是Web浏览器在处理时会发生某些特别的变化。比如,在checked属性里,默认等于check,不用赋值也可以正常显示。这种行为是基于HTML规范,在不带引号的属性值里,是允许无字符或空格字符的。

这个特性可以让黑客无限制地插入带bool属性的HTML标签,比如:


<img ismap='xxx' itemtype='yyy style=width:100%;height:100%;position:fixed;left:0px;top:0px; onmouseover=alert(/XSS/)//'>

雅虎邮箱过滤后:


<img ismap=itemtype=yyy style=width:100%;height:100%;position:fixed;left:0px;top:0px; onmouseover=alert(/XSS/)//>

这封带POC的邮件,使整个浏览器被img标记占满整个窗口。Javascript代码的onmouseover属性值将即时执行,不会与用户进行进一步的交互。在邮件设置里禁止或允许图像,都不能阻止该攻击。

2.WordPress插件Jetpack存储型XSS漏洞

图4-7 WordPress插件Jetpack

2016年5月,WordPress母公司Automattic发布了插件Jetpack 4.0.3版本,见图4-7,在这个官方的WordPress论坛插件的版本中,修复了一个威胁程度较高的存储型XSS漏洞,小于4.0.3的版本都会被影响。

该漏洞是一个存储型XSS漏洞,攻击者可以利用漏洞在Web平台中植入恶意代码,而恶意代码会被存储于后台数据库中,随后当其他用户访问受影响页面时,便会执行攻击者植入的恶意代码,从而实现XSS攻击。

该XSS漏洞存在于插件的短代码(shortcode embeds)模块中,wordpress shortcode是指一些使用“[]”包含的短代码,例如”[vimeo123]”,而Jetpack的shortcode模块能够将[vimeo 123]替换成另外一个链接,创建了一个嵌套链接的HTML结构。wordpress会识别这些短代码并根据短代码的定义输出特定的内容,简单易用,功能强大。

在评论中输入如下载荷即会触发漏洞:


<a title='[vimeo 123]'><abbr title='onmouseover="alert(1338);"'>a7</a>

因为title属性右边的单引号被转义,直到遇到abbr标签的title单引号为止,从而导致了弹窗出现。在Sucuri安全团队向Jetpack的管理者报告了该漏洞不久,Jetpack 4.0.3修复版本发布,修复版本中通过避免标签属性中的短代码被解释,从而解决了该问题。


<p><a title=' 
<div class="embed-vimeo" style="text-align: center;"><iframe src="https://player.vimeo.com/video/123" width="474" height="267" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe><br />
' rel="nofollow"><abbr title=' onmouseover="alert(1338);"'>a7</abbr></a></p>