/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
/中文/
近期有人使用了最新的Flash 0day漏洞cve-2018-15982和帶有自毀功能的專屬木馬程序進行攻擊,Adobe官方及時響應進行了修複更新。Adobe Flash 0day漏洞補丁能夠快速安全的修複此次國家級網絡攻擊,極大程度的保護了用戶的安全。Adobe Flash 0day漏洞補丁安全可靠,如果你在使用Adobe Flash,那就快來進行Adobe Flash 0day漏洞修複吧!
通過分析我們發現此次的CVE-2018-15982 0day漏洞是flash包com.adobe.tvsdk.mediacore.metadata中的一個UAF漏洞。Metadata類的setObject在將String類型(屬於RCObject)的對象保存到Metadata類對象的keySet成員時,沒有使用DRCWB(Deferred Reference Counted, with Write Barrier)。攻擊者利用這一點,通過強製GC獲得一個垂懸指針,在此基礎上通過多次UAF進行多次類型混淆,隨後借助兩個自定義類的交互操作實現任意地址讀寫,在此基礎上泄露ByteArray的虛表指針,從而繞過ASLR,最後借助HackingTeam泄露代碼中的方式繞過DEP/CFG,執行shellcode。
在漏洞的觸發過程,flash中Metadata的實例化對象地址
循環調用Metadata的setObject方法後,Metadata對象的keySet成員
keySet成員的部分值
強製垃圾回收後keySet成員被釋放的內存部分
在new Class5重用內存後,將導致類型混淆
後續攻擊者還通過判斷String對象的length屬性是否為24來確定漏洞利用是否成功。(如果利用成功會造成類型混淆,此時通過獲取String對象的length屬性實際為獲取Class5的第一個成員變量的值24)。
通過進一步反編譯深入分析,我們可以發現Metadata類的setObject對應的Native函數,實際功能存在於setObject_impl裏。
在Object_impl裏,會直接將傳入的鍵(String對象)保存到Metadata的keySet成員裏。
Buffer結構體定義如下(keySet成員的結構體有一定差異)。
add_keySet中保存傳入的鍵(String對象)
這個時候垃圾回收機製認為傳入的鍵未被引用,從而回收相應內存,然而Metadata對象的keySet成員中仍保留著被回收的內存的指針,後續通過new Class5來重用被回收的內存,造成UAF漏洞。