当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0106776

漏洞标题:利用FoxMail持久型XSS漏洞偷取任意的邮件内容或执行任意代码等

相关厂商:腾讯

漏洞作者: Tea

提交时间:2015-04-09 11:38

修复时间:2015-07-08 17:04

公开时间:2015-07-08 17:04

漏洞类型:远程代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-04-09: 细节已通知厂商并且等待厂商处理中
2015-04-09: 厂商已经确认,细节仅向厂商公开
2015-04-12: 细节向第三方安全合作伙伴开放
2015-06-03: 细节向核心白帽子及相关领域专家公开
2015-06-13: 细节向普通白帽子公开
2015-06-23: 细节向实习白帽子公开
2015-07-08: 细节向公众公开

简要描述:

你以为FOXMAIL的XSS就只能弹框么。。

详细说明:

这个不是站在
WooYun: Foxmail邮箱客户端持久型XSS跨站脚本攻击漏洞(收邮件就触发)
研究的问题,是去年提交了TSRC以后更新版本后绕过一些问题的东西。
测试版本,最新版本7.2 build 6.0.40
本报告不包含以前版本的利用信息。
PS:因为软件更新以后在TSRC提交的问题已经修护,后面版本产生的问题算为新问题(跟TSRC工作人员确认过了,他们也认为我以前提交的问题修护了)
新问题,就换个地方提了。
还有一点就是,

version.png


这个地方后面更新了小版本号,这里一直没有更新时间,而且FOXMAIL里面的更新是更新不到最新的小版本号版本的,诡异
下面就来说说问题的情况了。
其实FOXMAIL就类似是一个大的浏览器,里面CSS,JS,HTML都解析。
然后呢,FOXMIAL里面加载了Jquery的。这里可以做下判断看看。
这里会方便后面获取任意邮件的内容什么的。
具体可以看:
mail_frame.html
里面加载的JS。。

JQU.png


/Template/Conversation/Javascript/Main.js
这个JS里面有很多好玩的方法,发邮件,打开邮件,菜单,快速回复等。
自己看看功能
比如:
window.J2D_WriteLog() 写日志,这个会写内容到一个文本文件在FOXMAIL目录的子目录
window.J2D_PopupCompose(4294968029, 'Ni,Hao.') 可以直接打开写信窗口
window.J2D_ChangeTopState(4294968029, 1) 给邮件置顶
window.J2D_ContinueXSend(mailid) 触发快速回复,这个会直接发送回邮件
上面这些截图就不截了,自己可以去玩。。
在FOXMAIL里面标记一个邮件用到的是mailid.
如何获取这个mailid呢。我们可以用如下的方法获取到:

var mailidtmp = $('.mail_session').attr('mailid');


在发送邮件过去以后,收到邮件后就有了

MAILID.png


我们的目标是偷任意的邮件内容。
但是能执行代码的为什么不执行呢。。
这里先给出触发这个XSS的POC:
测试代码里面。。
FOXMAIL邮件查看页面里面还启用了CSP..
好了,我们下面说怎么获取任意的邮箱内容了。
前面说了,$ajax是有的,方便了我们后面获取邮件内容发送出去。。
后面我们会把内容GET出去(这里只作验证)更猥琐的大牛自行完善。。
以下只给出结果,过程就不说了,会跟以前的问题重复,怕挨打。。
先个几个短的JS功能:
/*实现获得当前MAILID,然后遍历几个MAILID,打开其他的邮件,并且插入'c'*/

var maxmid=$('.mail_session').attr('mailid');var minmid=maxmid - 4;for (minmid;minmid<maxmid;minmid++){window.J2D_PopupCompose(minmid, 'c')}


开始在这里逗留了很久,一直找不到直接转其他邮件并且把收件人或者CC人改变为自己控制的邮箱的方法,不然你发送一个邮箱,对面一触发再给你转过来,也是没得意义的事情。
window.J2D_PopupCompose(minmid, 'c')这个方法的实现就是,打开其他邮件通过mailid控制,并且插入后面跟的内容。比如上面的"c".
这下猥琐的思路就来了。。
XSS触发-->获取当前mailid-->打开其他邮件-->在其他邮件内容出插入新XSS代码-->XSS代码在新页面执行
以上就是利用的流程了。
还有一个FOXMAIL的mailid(我测试自己不同机器)总是以相同的一个 mailid开始,然后增加。所以,只是玩玩的话,可以猜几个 mailid玩玩。
给出获取内容的JS(只是测试):

function removeHTMLTag(str){str=str.replace(/<\/?[^>]*>/g,'');str=str.replace(/[ | ]*\n/g,'\n');str=str.replace(/\n[\s| | ]*\r/g,'\n');str=str.replace(/&nbsp;/ig,''); return str;};var mid =$('blockquote').html();alert(removeHTMLTag(mid));


//$('blockquote').html 这里用这个是因为测试的时候这里方便
然后给出最后的POC:
其实利用代码太粗糙,可以好好改改,但是测试能用,证明问题就行了。

漏洞证明:

EXEC1.png


EXEC2.png


EXEC3.png


GET到服务器出邮件内容:

CONT1.png


这里是查询远程服务器日志的内容(GET出去的邮件内容)

CONT2.png


CONT3.png


要想多偷邮件,就用上面的For循环多循环就OK了。
传出去用户像是不知道,但是一下邮箱打开很多其他邮件的框框还是很可疑的,暂时做不到静默偷取。。

KK.png


如这种框框。。会很多。

修复方案:

window.open("*.exe")这个很容易绕过。exe后面跟/或者.等
CSP 其他的都有完善了,object-src没有完善好。
最好是可以让用户插入的XSS代码全部都假死。过滤够。

版权声明:转载请注明来源 Tea@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-04-09 17:02

厂商回复:

非常感谢您的报告,问题已着手处理,感谢大家对腾讯业务安全的关注。如果您有任何疑问,欢迎反馈,我们会有专人跟进处理。

最新状态:

暂无