雅虎邮箱存储型 XSS 漏洞,黑客能看任何人邮件

最近来自芬兰Klikki Oy的研究员Jouko Pynnönen发表了一篇博客,其中演示了恶意攻击者如何利用XSS漏洞攻下雅虎邮箱,将受害者收件箱中的邮件发到外部站点;以及构建病毒,这个病毒可以通过向邮件签名中添加恶意脚本,附加在所有传出的电子邮件中。

由于恶意代码就位于邮件消息的正文中,代码会在受害者打开邮件时立即执行,不需要其他交互过程。所有问题的症结实际上在于雅虎邮箱无法正确过滤HTML邮件中潜在的恶意代码。

以下是对这名研究人员博客文章的内容编译:

发现历程

离去年给雅虎挖洞也快一周年了,这个时间点我也打算再来一发。一开始我觉得基本的HTML过滤应该不会再有漏洞了,但在最近写邮件的时候,我发现了很多添加附件的选项,这些选项我去年倒是没有太注意。然后我写了一封邮件,里面包含各种附件,并发到某外部邮箱,这样我就可以检查邮件的HTML源码了。

雅虎邮箱提供了一项功能,可以从云服务中分享文件。在邮件中进行分享之后,文件不会附在邮件的附件中,而是会使用HTML代码插入一个链接,比如Google文档/Dropbox的链接。

在此,data- HTML属性吸引了我的注意。首先是因为我去年穷举了一些雅虎邮箱过滤所允许的HTML属性,但是没有能够穷举出全部属性。第二,由于data-属性存储的为Javascript所用的特定应用数据,所以这可能是个不错的攻击切入点。也就是说,可以在邮件中嵌入一些HTML属性绕过雅虎邮箱的过滤。

为了进一步了解data-属性,我使用Chrome的开发者工具进入源码标签,寻找JavaScript文件中引用的data-url属性。我发现YouTube的链接也会被雅虎邮箱“优化”,如果你在邮件中输入Youtube的视频链接,雅虎邮箱就会自动帮你生成一个“链接加强卡片”,如下图所示,卡片中会包含一些data-属性。

当用户打开包含这类“卡片”的邮件,雅虎就会通过嵌入视频,视频旁边还会有一个分享按钮,这些功能就是通过雅虎邮箱JS代码的data-*属性实现的。

接下来,我尝试用data-*属性构造邮件,漏洞有了!如果我们在data-url这个值中插入引号,就会导致分享按钮的HTML无法正确解析。而只要URL指向的网站在雅虎的白名单中,比如指向Youtube,雅虎就不会再进行检查或者编码。data-url的值会被用来设置innerHTML div创建按钮:

我进行的测试如下:

From: <attacker@attacker.com>Subject: helloTo: victim@yahoo.comMIME-Version: 1.0Content-type: text/html<div class="yahoo-link-enhancr-card" data-url="https://www.youtube.com/aaa"><img src=x onerror=alert(/xss/)><"><div class="card-share-container"><a class="enhancr-play-btn"></a></div></div>

当我从雅虎邮箱打开邮件时,那段针对链接进行“优化”的JavaScript代码会使用data-url属性来渲染按钮。而隐藏在属性中的HTML片段也会随之加载,我所添加的HTML代码是一个包含onerror属性的,攻击者的恶意代码也就得以执行。

实际上,这个问题的症结可以追溯到雅虎邮箱的一个函数:

function generateButton(e,t) {   var n=this,r;
   t.insert(['<button data-share-url="',e,'" class="',o,'"> \
                   <span class="icon icon-social"></span> \
                   </button>'].join(""));
   r=t.one("."+o);
   n._attachButtonListeners(r);
}

这个函数名称为t.shareMenu.generateButton(r.cardUrl,s),第一个参数就是邮件中嵌入的data-url属性。

可以看到,底部HTML的部分就是直接把字符串拼接了起来,没有做任何修改。

影响

此次发现的这个漏洞的影响跟去年的XSS漏洞实际上是一样的。

为了证明漏洞的存在性,我给雅虎安全部门发了一封邮件,邮件打开时,会使用AJAX读取用户收件箱中的邮件内容,并把它发送到攻击者的服务器。

作者已经于11月12日通过HackerOne向雅虎安全提交了漏洞,11月29日雅虎提供了1万美元的赏金。

文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2025-01-25 12:24:50

雅虎邮箱存储型 XSS 漏洞,黑客能看任何人邮件的相关文章

解析检查——存储型XSS漏洞解决方案

编者按:Web2.0时代,XSS漏洞不容小觑.特别是在UGC业务,支持"安全的"HTML是业务必须的特性,这就对UGC安全过滤器要求特别高,稍有不慎就会出现存储XSS漏洞.整篇文章着眼点在"方案",后续有机会我们还可以说说API的运营故事(这个元老级项目故事很多).通过对API的精细化运营是可以发现0day漏洞的--API自身的,甚至包括浏览器.比如CVE-2009-1862.CVE-2011-2458 以及一些其他八卦.存储型XSS漏洞,这个作为漏洞界的元老级漏洞

漏洞预警:WordPress 储存型 XSS 漏洞

2017年10月19日,WordPress 官方发布了一条安全通告表示在4.8.1版本中发现了一个存储型的XSS漏洞,通过该漏洞,攻击者可以在受影响网站的评论区写下包含恶意代码的留言,当该留言页面被打开时,其中的恶意代码会执行,导致该网站的权限,插件等被更改,甚至被完全控制,安全风险为高危. 目前WordPress是全球装机量比较大的CMS系统,建议站长们关注,并尽快开展自查工作,及时更新到最新版WordPress. 漏洞利用条件和方式: 远程利用 PoC状态 目前PoC已经公开 漏洞影响范围:

phpcms问答某模块存储型xss

 黑名单惹的祸啊 在回帖处,有个编辑器功能. 编辑器存在一个可以编辑源码,当时第一反映就是.这里肯定存在xss. 果不其然,但是,在开始的时候测试 <script>alert(1)</script> 以及 <img src=1 onerror=alert(1) /> 的时候,发现都无法执行js代码.   于是乎,便上http://html5sec.org/找些偏门的代码测试.   当测试:<form id="test"></form

HTMLencode解决QQ空间缺陷导致日志存储型XSS

  1. 接着看这个系列的第一个漏洞(content_gridsblog.js)中那部分的代码. 腾讯为了修复这个漏洞,采用了更为安全的JSON.parse函数作为修复方案.这种修复是没有问题的. 其它有类似缺陷的网站可以参考腾讯的修复方案. 2. 但实际上,在这段代码下方的不远处,还存在着另外一处缺陷,如下图所示: 可以看到, oGridInfo为 JSON.parse解析出来的一个[Object] 而 oGridInfo.templateName 取出来后,没有经过任何过滤,就传入到了 in

Magento存在XSS漏洞,在线商城可被攻击者操控

Magento是一套开源的电子商务系统,是主要面向企业的应用,可处理电子商务各方面的需求,包括像购物.航运.产品评论等等,最终为建设一个多用途和适用面广的电子商务网站提供帮助. Magento项目小组目前已经发布补丁,修复Magento上一个高危的安全漏洞. 漏洞信息 这个漏洞是一个存储型XSS,是安全厂商Sucuri于2015年11月10日发现的,可实施攻击的场景为:当用户注册一个新账户时或者当用户更改当前账户的邮件地址时等涉及到邮箱账号提交的场景. 该问题关键在于CMS(内容管理系统)如何过

针对XSS漏洞的前端防火墙:内联事件拦截

关于XSS漏洞怎样形成.如何注入.能做什么.如何防范,前人已有无数的探讨,这里就不再累述了.本文介绍的则是另一种预防思路.几乎每篇谈论 XSS 的文章,结尾 多少都会提到如何 防止,然而大多万变不离其宗.要转义什么,要过滤什么,不要忘了什么之类的.尽管都是众所周知的道理,但 XSS 漏洞十几年来几乎从未中断过,不乏一些大网站也时常爆出,小网站更是家常便饭.预警系统事实上,至今仍未有一劳永逸的解决方案,要避免它依旧使用最古老的土办法,逐个的过滤.然而人总有疏忽的时候,每当产品迭代更新时,难免会遗漏

JSP安全开发之XSS漏洞详解_java

前言      大家好,好男人就是我,我就是好男人,我就是-0nise.在各大漏洞举报平台,我们时常会看到XSS漏洞.那么问题来了,为何会出现这种漏洞?出现这种漏洞应该怎么修复? 正文 1.XSS?XSS?XSS是什么鬼?      XSS又叫跨站脚本攻击(Cross Site Scripting),我不会告诉他原本是叫CSS的,但是为了不和我们所用的层叠样式表(Cascading Style Sheets)CSS搞混.CSS(跨站脚本攻击),CSS(层叠样式表)傻傻分不清.所以就叫XSS咯.

防御&amp;捕获XSS漏洞利器之CSP

最近在整理项目组的服务器日志,从海量信息中查找有攻击嫌疑的用户.发现了千奇百怪的攻击手法,不过大部分都是SQL与XSS注入,这里说几个好玩的. 伪造HTTP_X_FORWARDED_FOR信息 HTTP_X_FORWARDED_FOR = 127.0.0.1', select(0)from(select(sleep(3)))v', 15.19.86.28 普通情况下我们获取到的IP型如 "\$ip = $_SERVER('HTTP_X_FORWARDED_FOR')" ,直接存入数据库

针对XSS漏洞的前端防火墙:可疑模块拦截

上一篇介绍的系统,虽然能防御简单的内联XSS 代码,但想绕过还是很容易的.由于是在前端防护,策略配置都能在源代码里找到,因此很快就能试出破解方案.并且攻击者可以屏蔽日志接口,在自己电脑上永不发出报警信息,保证测试时不会被发现.昨天提到最简单并且最常见的XSS代码,就是加载站外的一个脚本文件.对于这种情况,关键字扫描就无能为力了,因为代码可以混淆的千变万化,我们看不出任何异常,只能将其放行.因此,我们还需增加一套可疑模块跟踪系统.被动扫描和之前说的一样,最简单的办法仍是遍历扫描.我们可以定时分析页