Hacking Team 資料外洩事件前一個曝光的零時差漏洞 (CVE-2015-5119) 熱潮還未消退,另一個同樣危險的 Adobe Flash Player 漏洞 (CVE-2015-5122) 就浮上檯面。此漏洞一旦遭到攻擊,可能導致系統當機,並讓駭客取得系統控制權。此外,與CVE-2015-5119 相同的是,所有 Windows、Mac 及 Linux 最新版的 Flash (18.0.0.203) 都含有此漏洞。
這是一個新的漏洞,並未包含在先前我們未修補的 Flash Player 漏洞以及其他 Hacking Team 資料外洩事件當中發現的概念驗證攻擊 一文所討論的兩個 Flash 漏洞和 Windows 核心漏洞當中。
好消息是:此漏洞目前還在概念驗證階段,所以我們還在觀察是否有任何攻擊已運用該漏洞。壞消息是:該漏洞目前尚無修補程式,不過我們在確認此漏洞的真實性之後便立即通報了 Adobe (台北時間 7 月 11 日上午10:30),因此相信很外就會有修補程式。Adobe也在台北時間當天上午11:40針對此漏洞發布了安全公告。
這漏洞到底如何運作?
經過仔細分析,我們發現這是一個利用 TextBlock.createTextLine() 和 TextBlock.recreateTextLine(textLine) 兩個函式來製造使用已釋放物件情況的漏洞。
觸發此漏洞的程式碼為:my_textLine.opaqueBackground = MyClass_object。實際情況是:MyClass.prototype.valueOf 被覆寫,因此使得 valueOf 函式會呼叫 TextBlock.recreateTextLine(my_textLine)。然後 my_textLine 在釋放之後又被用到。
由於我們是在x86環境上利用偵錯 (debugging) 來追蹤這個漏洞,因此觸發漏洞的是 MyClass32 這個類別。漏洞攻擊函式本身則為 MyClass32 的 TryExpl。
以下說明漏洞攻擊的步驟:
- 我們有一個新的 Array 物件,名為 _ar,設定 _ar 的長度為 _arLen = 126。使用 Vector.<uint> 來設定 _ar[0…29] 的數值,Vector 長度為 0x62。使用 Vector.<uint> 來設定 _ar[46…125] 的數值,Vector 長度為 0x8。將 _ar[30….45] 的數值設為 textLine,使用 _tb.createTextLine() 來產生 textLine,並將 textLine.opaqueBackground 設為 1。