安全動態(tài)

雅虎郵箱存儲型XSS漏洞,黑客能看任何人的郵件

來源:聚銘網(wǎng)絡(luò)    發(fā)布時間:2016-12-12    瀏覽次數(shù):
 

信息來源:FreeBuf

最近來自芬蘭Klikki Oy的研究員Jouko Pynn?nen發(fā)表了一篇博客,其中演示了惡意攻擊者如何利用XSS漏洞攻下雅虎郵箱,將受害者收件箱中的郵件發(fā)到外部站點;以及構(gòu)建病毒,這個病毒可以通過向郵件簽名中添加惡意腳本,附加在所有傳出的電子郵件中。

由于惡意代碼就位于郵件消息的正文中,代碼會在受害者打開郵件時立即執(zhí)行,不需要其他交互過程。所有問題的癥結(jié)實際上在于雅虎郵箱無法正確過濾HTML郵件中潛在的惡意代碼。

以下是對這名研究人員博客文章的內(nèi)容編譯:

發(fā)現(xiàn)歷程

離去年給雅虎挖洞也快一周年了,這個時間點我也打算再來一發(fā)。一開始我覺得基本的HTML過濾應(yīng)該不會再有漏洞了,但在最近寫郵件的時候,我發(fā)現(xiàn)了很多添加附件的選項,這些選項我去年倒是沒有太注意。然后我寫了一封郵件,里面包含各種附件,并發(fā)到某外部郵箱,這樣我就可以檢查郵件的HTML源碼了。

yahoo-attachment-options.png

雅虎郵箱提供了一項功能,可以從云服務(wù)中分享文件。在郵件中進(jìn)行分享之后,文件不會附在郵件的附件中,而是會使用HTML代碼插入一個鏈接,比如Google文檔/Dropbox的鏈接。

link-enhancr.png

在此,data-* HTML屬性吸引了我的注意。首先是因為我去年窮舉了一些雅虎郵箱過濾所允許的HTML屬性,但是沒有能夠窮舉出全部屬性。第二,由于data-*屬性存儲的為Javascript所用的特定應(yīng)用數(shù)據(jù),所以這可能是個不錯的攻擊切入點。也就是說,可以在郵件中嵌入一些HTML屬性繞過雅虎郵箱的過濾。

為了進(jìn)一步了解data-*屬性,我使用Chrome的開發(fā)者工具進(jìn)入源碼標(biāo)簽,尋找JavaScript文件中引用的data-url屬性。我發(fā)現(xiàn)YouTube的鏈接也會被雅虎郵箱“優(yōu)化”,如果你在郵件中輸入Youtube的視頻鏈接,雅虎郵箱就會自動幫你生成一個“鏈接加強卡片”,如下圖所示,卡片中會包含一些data-*屬性。

yahoo-youtube.png

當(dāng)用戶打開包含這類“卡片”的郵件,雅虎就會通過<IFRAME>嵌入視頻,視頻旁邊還會有一個分享按鈕,這些功能就是通過雅虎郵箱JS代碼的data-*屬性實現(xiàn)的。

接下來,我嘗試用data-*屬性構(gòu)造郵件,漏洞有了!如果我們在data-url這個值中插入引號,就會導(dǎo)致分享按鈕的HTML無法正確解析。而只要URL指向的網(wǎng)站在雅虎的白名單中,比如指向Youtube,雅虎就不會再進(jìn)行檢查或者編碼。data-url的值會被用來設(shè)置innerHTML div創(chuàng)建按鈕:

我進(jìn)行的測試如下:

From: <attacker@attacker.com> Subject: hello To: victim@yahoo.com MIME-Version: 1.0 Content-type: text/html <div class="yahoo-link-enhancr-card" data-url="https://www.youtube.com/aaa&quot;&gt;&lt;img src=x onerror=alert(/xss/)&gt;&lt;"> <div class="card-share-container"> <a class="enhancr-play-btn"></a> </div></div> 

當(dāng)我從雅虎郵箱打開郵件時,那段針對鏈接進(jìn)行“優(yōu)化”的JavaScript代碼會使用data-url屬性來渲染按鈕。而隱藏在屬性中的HTML片段也會隨之加載,我所添加的HTML代碼是一個包含onerror屬性的<IMG>,攻擊者的惡意代碼也就得以執(zhí)行。

yahoo-xss2.png

實際上,這個問題的癥結(jié)可以追溯到雅虎郵箱的一個函數(shù):

function generateButton(e,t) { var n=this,r;
   t.insert(['<button data-share-url="',e,'" class="',o,'"> \
                   <span class="icon icon-social"></span> \
                   </button>'].join(""));
   r=t.one("."+o);
   n._attachButtonListeners(r);
}

這個函數(shù)名稱為t.shareMenu.generateButton(r.cardUrl,s),第一個參數(shù)就是郵件中嵌入的data-url屬性。

可以看到,底部HTML的部分就是直接把字符串拼接了起來,沒有做任何修改。

影響

此次發(fā)現(xiàn)的這個漏洞的影響跟去年的XSS漏洞實際上是一樣的。

為了證明漏洞的存在性,我給雅虎安全部門發(fā)了一封郵件,郵件打開時,會使用AJAX讀取用戶收件箱中的郵件內(nèi)容,并把它發(fā)送到攻擊者的服務(wù)器。

作者已經(jīng)于11月12日通過HackerOne向雅虎安全提交了漏洞,11月29日雅虎提供了1萬美元的賞金。

 
 

上一篇:2016年12月11日 聚銘安全速遞

下一篇:京東回應(yīng)數(shù)千萬用戶信息泄露:2013年的安全漏洞