雅虎某分站的XSS導致雅虎郵箱淪陷

wyzsk發表於2020-08-19
作者: mramydnei · 2014/03/09 11:17

0x00 前言


很多時候我們會因為一個活動或者一些其它的原因建立一些臨時的站點。但是糟糕的是一旦這一切過去後我們會忘了關閉它。就像我在http://hk.promotions.yahoo.com上發現的這個漏洞一樣,那些臨時站點往往成為我們強大安全體系中的軟肋。

0x01 初探


讓我們看看我在雅虎香港的這個子站上發現的一些有趣的東西:

enter image description here

就如同你從請求日誌中當中所看到的, 有些東西正在嘗試跨域請求其它域名下的資料。

http://hk.promotions.yahoo.com/petshow2011/php/getImages.php?file=<url>  

跨域代理對於挖洞的人來說,就像是金礦般的存在。我們總能從它身上找到一些漏洞,這一個也不例外。不得不說,我們很幸運。因為這裡並沒有用白名單來限制URL所指向的域名。而且這個代理居然沒有在Response上設定content-type。這意味著?嗯,我們找到了一個XSS。

enter image description here

enter image description here

但這個XSS並不能讓我興奮起來。因為它只不過是一個在幾乎可以看作是靜態網站上的XSS。換句話來說,它根本就沒有任何價值。

0x02 變廢為寶


那我們如何才能讓它變得有用呢?還記得content-type的事情吧?嗯,一個沒有設定content-type的response意味著我們可以控制整個response的內容。那我們為什麼不試著搞一個swf呢?這樣就意味著我們在hk.promotions.yahoo.com域下擁有一個完全可控的swf檔案。也許有人會問為什麼swf會比HTML更有用呢?其實我很想說是因為“愛情”,但實際上是因為crossdomain.xml。因為flash可以在crossdomain.xml允許的前提下進行一些跨域的通訊,那麼接下來我們只要在找到一些設定上不太安全的crossdomain.xml就可以搞一些有趣的事情了。在經過一些列的檢測後我把目標鎖定在了下面的三個域名裡。

finance.yahoo.com:

#!html
<cross-domain-policy>  
    <allow-access-from domain="*.yahoo.com"/>  
    <allow-access-from domain="us.js2.yimg.com"/>  
    <allow-access-from domain="*.yimg.com"/>  
</cross-domain-policy>  

www.flickr.com:

#!html
<cross-domain-policy>  
    <allow-access-from domain="*.yahoo.com"/>  
    <allow-access-from domain="l.yimg.com"/>  
    <allow-access-from domain="d.yimg.com"/>  
    <allow-access-from domain="s.yimg.com"/>  
    <site-control permitted-cross-domain-policies="master-only"/>  
</cross-domain-policy>  

ca-mg5.mail.yahoo.com 不過似乎這個比前兩個更加有趣一些

#!html
<cross-domain-policy>  
    <allow-access-from domain="*.yahoo.com" secure="false"/>  
    <allow-access-from domain="l.yimg.com" secure="false"/>  
    <allow-access-from domain="s.yimg.com" secure="false"/>  
</cross-domain-policy>  

如果你把注意力放在這個secure=flase上面,我想你應該沒白這個設定會允許我們透過HTTP的方式來訪問一些只允許透過HTTPS來訪問的資源。詳情可以參見:“Using false in an HTTPS policy file is not recommended because this compromises the security offered by HTTPS.”

現在一切都已經很明瞭了。我們可以藉助我們構造的swf檔案來和ca-mg5.mail.yahoo.com 進行通訊。使用工具SWF<->JS XHR proxy,讓我們嘗試著來搞點郵件吧!我們先嚐試透過這個swf裡的JavaScript來傳送一些跨域的請求:

enter image description here

看上去一些都很順利。我們可以從response中看到收穫的auth tokens和一些個人資訊。然而藉助其中的一個token我們可以列出郵件的列表

enter image description here

進一步我們可以透過使用這些message id來閱讀郵件的內容

enter image description here

當然,因為我們可以讀取那些具有CSRF tokens的頁面,所以我們也可以試著刪除一些郵件或者以當前使用者的身份來傳送郵件。當然可能更加有趣的是我們可以控制所有繫結了這個郵箱的帳號,重置那些帳號的密碼並偷偷的刪除那些重置郵件。

0x03 最後


作為修復方案,雅虎安全團隊選擇刪除了這個站點。不得不說這也是個不錯選擇。但是關於crossdomain.xml,他們表示並不會對齊進行任何的修改。也許業務的緊密度和業務線的長度在某些時候並不能讓我們做一些變動。但這仍然是個需要被解決的問題。

PS:yahoo為此漏洞支付了作者3000刀!~

from:http://blog.saynotolinux.com/2014/03/01/yahoos-pet-show-of-horrors-abusing-a-crossdomain-proxy-to-leak-a-users-email/

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章