您好,登錄后才能下訂單哦!
微軟Outlook for Android移動應用的XSS漏洞示例分析,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
今天分享的Writeup是關于Outlook for Andriod的存儲型XSS漏洞,作者通過朋友發來的技術郵件偶然發現了該漏洞,歷經長達幾個月的復現構造,最終微軟承認了該漏洞(CVE-2019-1105)。
2018年底的時候,我一個朋友發郵件請我幫忙分析他在研究的一些JavaScript代碼,雖然我不做漏洞挖掘,但他發過來的郵件在我的手機上顯示出了一些奇怪的東西。我手機是安卓系統,以下是隱去發件人信息的郵件顯示截圖:
那個灰色邊框,越看越有點奇葩。當我分析后發現。這可能是其中JavaScript包含了一個HTML形式的iframe框架,該iframe框架在解析時,手機應用無法正常顯示呈現。但可疑的是,當我用筆記本電腦打開郵件時,整個解析都是正常的,如下所示:
這讓我覺得是一個問題:在郵件中嵌入iframe框架可能會是一個漏洞,這可能和我手機上的Outlook應用有關。就Outlook來說,比較扯的是,iframe框架不受阻止外部圖像設置的BlockExternalImages影響,但是,如果攻擊者有能力在郵件中植入可運行的JavaScript代碼,那將會是一個危險的安全威脅。
BlockExternalImages:Outlook for iOS/Andriod中的安全設置,BlockExternalImages設置為true時將啟用阻止外部圖像。
有鑒于此,為了驗證我的猜測,我嘗試在電子郵件中插入腳本標簽tag去代替iframe框架,但是不行。然而,我發現,可以通過在iframe框架中使用JavaScript URL,就能構造出一種繞過這種限制的方法,這就非常有意思了。
通常,在一個Web瀏覽器中,可以通過javascript:這樣的語法形式來調用一個URL,但是由于同源策略限制,單獨域下的iframe框架中的JavaScript是不能對頁面中的其它數據進行訪問獲取的。在Outlook for Andriod應用中,卻不存在這樣的限制,我構造的iframe框架中的JavaScript可以對我的用戶cookie、token甚至其它郵件發起訪問,不僅如此,還能把這些信息發回給攻擊者的遠程控制端,汗......。
這種安全問題相當可怕,要實現漏洞利用,攻擊者只需發送一封包含有經過構造的JavaScript代碼郵件給受害者,受害者用Outlook打開就會中招。正常來說,Outlook會對一些不安全的語法語義進行過濾轉義,但由于構造的JavaScript代碼處于iframe框架中,Outlook服務端不會對其進行探測發現,所以當郵件傳送交付后,Outlook客戶端也不會對其執行過濾轉義,最終,包含在iframe框架中的JavaScript就能在客戶端手機設備上成功運行了。這也就是我們所說的存儲型XSS(Stored XSS),這種類型漏洞的風險隱患極大,攻擊者可以利用它來實現多種目的,包括竊取信息和回傳數據。攻擊者只需向受害者發送一封構造好的郵件,當受害者閱讀之后,就能竊取受害者的cookie、其它郵件或是個人數據等敏感信息。嚴重點說,這種存在于郵件閱讀客戶端的Stored XSS可經武器化分發部署,造成大規模的蠕蟲或惡意軟件方式的破壞感染。
我覺得這是一個大問題,急需讓微軟方面知曉。于是,針對該漏洞,我制作了一個簡短的PoC,它會執行一段任意外部腳本去竊取和回傳個人敏感信息,由于漏洞利用構造不夠深入,其中沒有太多對郵件數據的訪問獲取展示。我馬上把這個PoC發給了微軟安全團隊。
關于該漏洞,我確實不知道引發漏洞的源代碼出在哪里,因為我自己就沒有Outlook程序源碼,而且,我基本沒有調試移動應用的經驗,但我想開發人員看到這段PoC后應該能理解。
但遺憾的是,微軟安全團隊卻復現不了該漏洞,我也陷入了難堪和困境,但這明顯是真的啊,我又向微軟安全團隊發了一段我這邊漏洞復現的視頻,之后,我了解到有一名安全研究人員也上報了該漏洞,但根據POC,微軟安全團隊仍然沒成功復現。
為了證實是否是Outlook設置存在差異導致的原因,我又進行了一些測試,但也沒發現問題所在,看來,這個漏洞要涼涼了。
每個安全工程師和開發人員都會告訴你,不能重現的bug是一個令人頭痛的問題,他們的時間對企業來說是寶貴而有限的資源。廠商安全團隊可以花費很多精力去復現一個漏洞,最終的推理會是,如果他們不能成功復現漏洞,那么攻擊者也不太可能成功復現和利用。所以從這點來說,廠商安全團隊會盡量把責任推卸到上報漏洞的安全研究者身上,他們希望的是盡可能方便復現和確認的上報方式。
我不能就這樣罷休,幾個月之后,這個漏洞仍然是我的一塊心病,如何能讓微軟安全團隊得以確認是一個難點。為此,我想到了從Outlook應用中提取HTML加載內容的方法,之后我才體會到,這種提取方式可能就是漏洞本身的問題吧!我能從Outlook應用中竊取數據,也就說明我可以用它讀取和加載其中的HTML內容。于是,結合這個點,我構造了一個新的Payload,有了如下執行效果:
我構造的Payload形如以下:
<iframe src="javascript:alert(window. top. document. body. innerHTML+'')"src=h
該Payload在Outlook服務端會被轉義為HTML形式,但在Outlook客戶端,它會被解析成:
<iframe src="javascript:alert(window. top. document. body. innerHTML+'')"src=h</iframe>
漏洞出在客戶端的代碼解析中,Payload中的電話號碼tel:+442330最終會被形成可點擊按鈕。該漏洞之前一直不能由微軟成功復現,是因為我把我手機中的本地化設置為了UK,其電話號碼會被判斷為有效號碼,而其它樣式的本地化設置,將會把這個UK號碼識別為無效號碼,所以不能有效復現。
終于發現了問題所在,我把Payload中的電話設置成了US格式xxx-xxx-xxxx,它支持多種地區化設置下的漏洞復現,我迅速地向微軟安全團隊上報了POC。2019年3月26日,微軟方面復現了漏洞并承諾在90天內進行修復。
看完上述內容,你們掌握微軟Outlook for Android移動應用的XSS漏洞示例分析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。