天天看點

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

最近來自芬蘭klikki oy的研究員jouko pynnönen發表了一篇部落格,其中示範了惡意攻擊者如何利用xss漏洞攻下雅虎郵箱,将受害者收件箱中的郵件發到外部站點;以及建構病毒,這個病毒可以通過向郵件簽名中添加惡意腳本,附加在所有傳出的電子郵件中。

由于惡意代碼就位于郵件消息的正文中,代碼會在受害者打開郵件時立即執行,不需要其他互動過程。所有問題的症結實際上在于雅虎郵箱無法正确過濾html郵件中潛在的惡意代碼。

以下是對這名研究人員部落格文章的内容編譯:

發現曆程

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

雅虎郵箱提供了一項功能,可以從雲服務中分享檔案。在郵件中進行分享之後,檔案不會附在郵件的附件中,而是會使用html代碼插入一個連結,比如google文檔/dropbox的連結。

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

為了進一步了解data-屬性,我使用chrome的開發者工具進入源碼标簽,尋找javascript檔案中引用的data-url屬性。我發現youtube的連結也會被雅虎郵箱“優化”,如果你在郵件中輸入youtube的視訊連結,雅虎郵箱就會自動幫你生成一個“連結加強卡片”,如下圖所示,卡片中會包含一些data-屬性。

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

當使用者打開包含這類“卡片”的郵件,雅虎就會通過嵌入視訊,視訊旁邊還會有一個分享按鈕,這些功能就是通過雅虎郵箱js代碼的data-*屬性實作的。

接下來,我嘗試用data-*屬性構造郵件,漏洞有了!如果我們在data-url這個值中插入引号,就會導緻分享按鈕的html無法正确解析。而隻要url指向的網站在雅虎的白名單中,比如指向youtube,雅虎就不會再進行檢查或者編碼。data-url的值會被用來設定innerhtml div建立按鈕:

我進行的測試如下:

當我從雅虎郵箱打開郵件時,那段針對連結進行“優化”的javascript代碼會使用data-url屬性來渲染按鈕。而隐藏在屬性中的html片段也會随之加載,我所添加的html代碼是一個包含onerror屬性的,攻擊者的惡意代碼也就得以執行。

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

實際上,這個問題的症結可以追溯到雅虎郵箱的一個函數:

這個函數名稱為t.sharemenu.generatebutton(r.cardurl,s),第一個參數就是郵件中嵌入的data-url屬性。

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

影響

此次發現的這個漏洞的影響跟去年的xss漏洞實際上是一樣的。

為了證明漏洞的存在性,我給雅虎安全部門發了一封郵件,郵件打開時,會使用ajax讀取使用者收件箱中的郵件内容,并把它發送到攻擊者的伺服器。

作者已經于11月12日通過hackerone向雅虎安全送出了漏洞,11月29日雅虎提供了1萬美元的賞金。

繼續閱讀