近期来自美国Oy的研究员JoukoPynnönen发表了一篇博客,其中演示了蓄意防御者怎么运用XSS漏洞攻下雅虎邮箱,将被害者收件箱中的短信发到外部站点;以及建立病毒,这个病毒可以通过向电邮签名中添加蓄意脚本,附加在所有传出的电子电邮中。
因为蓄意代码就坐落电邮消息的正文中,代码会在被害者打开电邮时立刻执行,不须要其他交互过程。所有问题的根源实际上在于雅虎邮箱未能正确过滤HTML电邮中潜在的蓄意代码。
以下是对这名研究人员博客文章的内容编译:
发觉历程
离去年给雅虎钻洞也快一华诞了,这个时间点我也准备再来一发。一开始我认为基本的HTML过滤应当不会再有漏洞了,但在近期写电邮的时侯,我发觉了这些添加附件的选项,这种选项我今年倒是没有太留意。
之后我写了一封短信,上面包含各类附件,并发到某外部邮箱,那样我就可以检测短信的HTML源码了。
雅虎邮箱提供了一项功能,可以从云服务中分享文件。在电邮中进行分享以后,文件不会附在短信的附件中雅虎邮箱登陆首页,而是会使用HTML代码插入一个链接,例如文档/的链接。
在此,data-*HTML属性吸引了我的留意。首先是由于我今年枚举了一些雅虎邮箱过滤所容许的HTML属性,并且没有才能枚举出全部属性。
第二,因为data-*属性储存的为所用的特定应用数据,因此这或许是个不错的防御发力点。也就是说,可以在电邮中嵌入一些HTML属性跨过雅虎邮箱的过滤。
为了逐步了解data-*属性,我使用的开发者工具踏入源码标签,寻求文件中引用的data-url属性。
我发觉的链接也会被雅虎邮箱“优化”雅虎邮箱登陆首页,假如你在电邮中键入的视频链接,雅虎邮箱都会手动帮你生成一个“链接推进卡片”,如右图所示,卡片中会包含一些data-*属性。
当用户打开包含这类“卡片”的短信,雅虎都会通过嵌入视频,视频里面就会有一个分享按键,这种功能就是通过雅虎邮箱JS代码的data-*属性实现的。
接下去,我尝试用data-*属性构造电邮,漏洞有了!
假如我们在data-url这个值中插入冒号,都会造成分享按键的HTML未能正确解读。
而只要URL对准的网站在雅虎的白名单中,例如对准,雅虎就不会再进行检测或则编码。data-url的值会被拿来设置div争创按键:
我进行的检测如下:
From: Subject: helloTo: victim@yahoo.comMIME-Version: 1.0Content-type: text/html
当我从雅虎邮箱打开电邮时,那段针对链接进行“优化”的代码会使用data-url属性来渲染按键。而掩藏在属性中的HTML花絮也会逐渐读取,我所添加的HTML代码是一个包含属性的
,防御者的蓄意代码也就得以执行。
实际上,这个问题的根源可以溯源到雅虎邮箱的一个函数:
function generateButton(e,t) { var n=this,r;
t.insert([''].join(""));
r=t.one("."+o);
n._attachButtonListeners(r);}
这个函数名称为t..(r.,s),第一个参数就是短信中嵌入的data-url属性。
可以看见,顶部HTML的部份就是直接把字符串条纹了上去,没有做任何更改。
影响
这次发觉的这个漏洞的影响跟今年的XSS漏洞实际上是一样的。
为了证明漏洞的存在性,我给雅虎安全部委发了一封短信,短信打开时,会使用AJAX调用用户收件箱中的短信内容,并把它发送到防御者的服务器。
作者早已于11月12日通过向雅虎安全递交了漏洞,11月29日雅虎提供了1万日元的赏金。