挖洞經驗 | 看我如何發現雅虎郵箱APP的儲存型XSS漏洞
今天我要分享的是參與雅虎(Yahoo!)漏洞眾測專案發現的一個關於雅虎郵箱 iOS應用的漏洞,最終,憑藉該漏洞,我進入了雅虎安全名人堂並獲得了$3500美金獎勵。
漏洞情況
我測試的物件是 Yahoo! Mail iOS APP應用,也就是雅虎郵箱的iOS版本,在該APP應用程式的xml檔案中存在一個儲存型XSS漏洞。攻擊者可以利用XML特性構造任意HTML/Javascript程式碼嵌入郵件,在該APP使用者開啟郵件時,都可以實現這種任意程式碼渲染呈現,極端點來說,利用XML的實體擴充套件攻擊,可以形成DoS攻擊,造成APP服務崩潰。
XML實體擴充套件攻擊:XML Entity Expansion實現,通過在XML的DOCTYPE中建立自定義實體的定義實現,比如,這種定義可以在記憶體中生成一個比XML的原始允許大小大出很多的XML結構,用它來使這種攻擊得以耗盡網路伺服器正常有效執行的必需記憶體資源。
漏洞分析
漏洞初報
在任意的雅虎郵箱登入網頁或客戶端中登入進入你的雅虎郵箱,然後上傳以下樣式的一個xml檔案作為郵件附件,之後,把這封帶以下 yahoo-xss.xml 附件的郵件,傳送到你自己的雅虎郵箱或另一雅虎測試郵箱中去。
<?xml version=”1.0″ encoding=”utf-8″?> <svg xmlns=”http://www.w3.org/2000/svg”> <script>prompt(document.location)</script> </svg>
用雅虎郵箱iOS客戶端(Yahoo! Mail iOS APP),進入你的收件測試雅虎郵箱,檢視 yahoo-xss.xml 附件,開啟它,看看是否有XSS反應。結果是當然有的,會嚇了你一跳。如下:
注意:我也搞不懂啥原因,雅虎郵箱iOS應用中的XML渲染機制非常怪異危險。如果你收到包含以上yahoo-xss.xml 附件的多個附件,那麼,即使你開啟其它附件的時候,這個 yahoo-xss.xml 觸發的儲存型XSS都會解析跳出。
我匆匆忙忙地上報了這個漏洞,以下是雅虎安全團隊人員在HackerOne上給我的迴應:
到了這步,接下來我要做的就是想辦法來最大化利用這個漏洞,看看能對雅虎郵箱iOS應用形成什麼比較壞的安全威脅和影響。但無奈我一時半會也沒什麼頭緒,只好先放一放。
漏洞續報
後來有一天,我突然想到了一種提升漏洞利用且安全無害的方法,那就是我可以用HTTP請求,像“GET”方式一樣,嘗試對本地APP客戶端資源進行獲取!BingGo!我一試,真成了!我可以用這種方法獲取到雅虎郵箱iOS應用的整個快取資料,其中包括使用者cookie、通訊錄列表、郵件內容等等。
漏洞利用復現
首先,在任意雅虎郵箱網頁或客戶端中登入你的雅虎郵箱賬戶,上傳一個如下包含如下程式碼的XML檔案,然後,把它作為附件傳送到你的另外一個測試雅虎郵箱中(受害者郵箱)。
在你的雅虎測試郵箱中開啟這個收到的XML附件,基於上面我提到的那個“怪異”的XML解析原因,這裡可以想像一種情況:當攻擊者向你傳送了一個PPT文件,但在附件中也附加了以上那個可以觸發XSS的XML檔案,那麼,當你開啟收到的PPT文件時,這個XML檔案也就會同時觸發XSS反應。也就是說,無論你有多少個附件(包括視訊附件),只要包含以上那個XML附件,你開啟其它任何一個附件,都會奇怪地觸發XML檔案中XSS漏洞。
利用該漏洞,構造key.xml,我可以獲取受害者郵箱中包括髮送者、接收者和聯絡人在內的通訊錄資訊。在XML附件程式碼中,XSS漏洞會首先顯示客戶端的瀏覽器版本資訊,然後是定位檔案位置,再之後是獲取郵件列表資訊(這裡看網速,估計需要30秒左右的時間)。之後,點選key.xml的OK之後,郵件列表資訊就通過GET方式回傳給攻擊者了,像下圖這樣。我是在內部區域網中做的測試,我的Server接收端用nc -lvvv 8090開啟了8090埠監聽:
利用該漏洞,構造cachedbpost.xml,我可以獲取受害者的Cookie資訊。點選cachedbpost.xml的OK之後,整個Cache.db檔案就會通過POST方式回傳給攻擊者,如下圖所示。我在內部區域網中做的測試,我的Server接收端用nnc -lvvv 8090 > yahoo.db命令開啟了8090埠監聽,並把Cache.dbd儲存為yahoo.db:
收到完整的Cache.db檔案之後,我們把其中的標題頭內容過濾,用以下命令檢索形成完整的受害者cookie資訊:
strings yahoo.db | grep -i Cookie -A 10 -B 5
另外,還可以按http服務端來進行列舉,形成對特定網站的請求cookie:
strings yahoo.db | grep -i https
雅虎安全團隊工作人員接收到該漏洞後,迅速進行了分類、修復和處置。