

Microsoft Edge和IE浏览器同源策略绕过漏洞分析
source link: https://www.freebuf.com/vuls/200131.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、前言
最近爆出了IE浏览器和Edge浏览器跨域获取敏感信息的漏洞(绕过同源策略),不过并未被微软承认,于是天融信阿尔法实验室进行了一系列深度测试,看看此漏洞是否真实严重。
二、知识扩展
为了大家能够更流畅地理解测试流程,我们先来了解下什么是同源策略和跨域。
1.同源策略
同源策略(SOP)是在现代浏览器中实现的安全功能,它限制从一个源加载的Web页面或脚本与来自另一个源的资源交互,从而防止不相关的站点相互干扰。也就是说,不同源的客户端脚本在没有明确授权的情况下,是不能读写对方资源的。
所谓同源就是指域名、协议、端口都相同,URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则表示他们同源。相反,只要协议,域名,端口有任何一个的不同,就被当作是跨域。
下表是相对于 http://www.topsec.com.cn/admin/index.html 的同源检测结果:
2.跨域
跨域是指从一个域的网页去请求另一个域的资源,比如从 http://www.a.com 去请求 http://www.b.com 的资源,但一般情况下是不允许进行跨域的。因为前面我们说过,浏览器受同源策略的影响,不是同源的脚本不能操作其他源下面的对象,而如果想要操作另一个源下的对象时就需要授权了。
3.浏览器为什么一定要有同源策略呢?
其实这样做的目的主要就是为了用户的上网安全。我们可以试想一下,如果没有同源策略的情况。比如一个恶意网站的页面通过iframe嵌入了银行的登录页面(二者不同源),在用户登录银行的时候恶意网页上的javascript脚本就可以获取其用户名和密码。因此,有了同源策略,我们才能更安全的上网。
三、测试流程
本次测试,我是通过在本地搭建环境重新复现了漏洞并多番修改poc进行了不同的测试。
先来测试下IE浏览器。
192.168.8.23/test.html这里有一处重定向:
Main.html
主要poc,这里是漏洞触发的对象performance. getEntriesByType,在Edge浏览器中是performance.getEntries,下面会有详细介绍:
setTimeout(function(){alert(performance. getEntriesByType ("resource")[0].name)},4000);
这里有一处回跳history.html,这个回跳的作用是返回重新刷新页面,不然只能获取预先设定好的url。
请求main.html,可以看到弹出了我们预先设定好的url:
此时,上图中的弹出的URL不等同于192.168.6.23 这个源,这表明我们已经成功绕过浏览器中的同源策略并访问了应该受限制的资源。但是,这有什么用?因为我们只是能获取到预先设定的url,并没有特别有用的信息,比如username,password等。别着急,我们继续看。
此时通过history.html重新刷新页面,也就是htstory.back()返回一步,这里接下来会重新跳转回blog.tepsec.com.cn/?s=php这个页面,然后我们点击Search进行搜索,在搜索框中输入topsec,现在让我们看下效果:
可以看到成功获取到了用户输入的信息topsec,实现了跨域获取敏感信息的功能。所以,现在我们可以得出个结论,当用户在与网页交互时,我们可以利用此漏洞来获取交互时的URL信息,试想一下,如果用户的敏感信息在url中的话,比如某网站的登陆账号密码和url做了关联 http://foo.com/username=admin&password=admin ,或者其他敏感信息,那么危害就非常大了。
同时不仅仅是输入,点击其他页面时也可以抓到整个url信息:
下面再测试下Edge浏览器。
192.168.8.23/test.html还是这个没有变:
Main.html
这里修改的地方有两处,一处是getEntriesByType变成getEntries,另一处角标由[0]变成了[2]:
setTimeout(function(){alert(performance. getEntries("resource")[2].name)},4000);
同样有回跳跳转history.html(history.back)。
访问main.html,可以看到和IE浏览其一样同样弹出了我们预先设定好的url。
但是和IE不同的是这里并不能动态获取用户修改的url,也就是用户输入信息还是点击都无法获取用户更改后的url信息,始终是弹出下面的url,所以暂时判断在Edge浏览器下此漏洞并没有什么危害 。
最后,我们再来看看关键的performance.getEntries这个api有哪些属性,从下图可以看到有四个属性,目前能被用上的就是url信息也就是name属性。
'url': perf.name, 'entryType': perf.entryType, 'type': perf.initiatorType, 'duration(ms)': perf.duration
这里修改下name变成duration,弹出了个时间并没啥用处:
也就是说这个漏洞获取到的name属性也就是url还有些利用价值,像类型和时间基本没什么利用价值。
四、漏洞利用
在实际利用过程中,攻击者不会像上述一样将信息弹出来显示给受害者,只会悄悄地将信息窃取。
我们简单修改下POC,模拟一下真实环境下的漏洞利用。
Main.html
首先将页面高宽进行调整使其看起来真实一些,而不仅仅是那一小块,然后将alert弹出信息的方式改为通过访问cookie.php将信息发送至攻击者服务器。
cookie.php
现在来访问下Main.html:
打开页面后进行随意搜索或点击,然后来看192.168.8.23服务器下的log.txt文件:
Recommend
-
15
Browser Security-同源策略、伪URL的域 瞌睡龙
-
60
一、Origin(源) 源由下面三个部分组成: 域名 端口 协议 两个 URL ,只有这三个都相同的情况下,才可以称为同源。 下来就以 “http://www.example.com/pa...
-
70
*本文作者:x565178035,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。 同源策略 准确的说,同源策略是指,浏览器内部在发起如下请求时,该来源必须是当前同源的HTTP资源: 1. 以跨站点的方...
-
14
什么是同源策略同源策略是指在浏览器中,允许某个网页的脚本访问另一个网页的数据(如Cookie),但前提是这两个网页必须是同源的,同源指的是两个网页协议相同,域名相同,端...
-
5
Nginx解决同源策略跨域 - 搞搞震省略一万字… localtion ~ .*\.(ttf|otf|eot|woff)$ { add_header Access-Control-Allow-Origin *; 或指定域名 add_header Access-Control-Allow-Origin "http://www.example.com"; }
-
5
同源策略引发的跨域问题它都能轻松解决!先来认识认识有这么强大功能框架的神奇之处...
-
4
原文链接 同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互,这是一个用于隔离潜在恶意文件的关键的安全机制
-
6
跨域?如何解决?同源策略? 跨域:
-
11
This Post is Available In:CNENES
-
7
This Post is Available In:CNENES
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK