导语:本文分析如何利用Microsoft Edge同源策略的安全漏洞窃取用户本地数据。
2015年,Microsoft发布了Edge浏览器,该浏览器最初名为Project Spartan。与IE不同是Edge支持许多新的安全措施,比如内容安全策略(Content Security Policy,CSP)、JS和CSS特征。对这些新特征的支持不仅能增强安全性,也可能会带来一些安全问题。
新项目的开发都是基于对原来产品多年的安全修复上。新浏览器产品开发过程中可能会经历更多的错误,原因就是因为新攻击技术的产生,浏览器安全也是一个不断的重开发过程,浏览器被视为潜在攻击面最丰富的源。浏览器中导致用户数据泄露的一些小的安全漏洞不断的被修复,而这些安全修复和从中学到的知识,可能并不会应用到浏览器的设计中。
这正好可以解释为社么Microsoft Edge是唯一一个发现此漏洞的浏览器。
注:微软已修复该漏洞
影响范围?
研究人员在Microsoft Edge 40.15063.0.0版本上测试成功。
如何窃取本地文件?
由于同源策略(Same Origin Policy,SOP)的限制不允许https://attacker.com读取file://C:/your/stuff.txt中的内容。这也是为什么有不同源的原因。如果要用JS请求读取数据,对应的协议、主机名(hostname)、端口都要匹配。但文件URL有一点不一样,file:// protocol和https:// protocol是明显不同的,这也就是为社么攻击者的域名不能读取本地文件的原因。
那如果两个file URL的主机名和端口呢?也就是说只有文件协议和路径相同,两个file url默认来自相同源,因为:
· 端口匹配:因为没有端口;
· Hostname匹配:因为没有hostname;
· 协议匹配:都是file://;
所以,如果浏览器开发者没有考虑file://urls这种特殊格式,那么在浏览器打开机器上的恶意HTML文件,就有可能读取任意本地文件中的内容。
这是真实的威胁还是理论上的威胁?
因为其他攻击向量的存在,所以这不仅仅是一个理论上的威胁。如果不能通过浏览器传播恶意HTML文件,还可以通过邮件等其他形式。过去这些年用户打开过.exe、.js、word等各种格式的附件,更何况.html格式的附件了。
研究人员伪造了一封邮件,添加了文件作为附件,然后在“邮箱和日历”应用中打开附件后,应用并没有拦截附件。然后研究人员发送含有该文件的邮件给用户,当用户打开附件后,发送了许多本地文件到服务器。可能没有反病毒软件会把该附件当作恶意文件,研究人员还可以HTTPS连接提取文件,这样就神不知鬼不觉了。研究人员使用的“邮箱和日历”版本为17.8600.40445.0。根据用户安装的应用,还可以有很多不同的方式来传播恶意文件。
如何保护文件?
目前来看,唯一的保护方式就是更新Edge浏览器和“邮箱和日历”应用程序。最重要的是不要打开未知来源的附件,不管附件是什么格式的。
PoC
PoC代码
<html> <head> <script> let resultDiv = document.getElementById("result"); let xhr= new XMLHttpRequest(); let user = document.location.href.match(/file:\/\/\/C:\/Users\/([a-z0-9\-]*)\//i)[1]; xhr.open("GET",'file://C:/Users/${user}/Desktop/secret.txt"); xhr.onreadystatechange = ()=> { if(xhr.readyState==4) { resultDiv.innerText = xhr.responseText; } } xhr.send(); </script> </head> <body> </body> <div id="result"></div> </html>