歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

Chakra漏洞(CVE-2018-8266)漏洞分析

來源:本站整理 作者:佚名 時間:2020-03-18 TAG: 我要投稿

雖然微軟已經在新版Edge瀏覽器中棄用Chakra引擎,但作為曾經的微軟主力JS引擎,Chakra在其短暫的生命周期中為我們留下了許多經典JS漏洞,這些案例是學習腳本引擎漏洞非常不錯的資料。本文我們一起來看一個Chakra引擎的JIT類型混淆漏洞。
 
漏洞復現
Bruno Keith在《Attacking Edge through theJavaScript compiler》這篇paper中給出了該漏洞的PoC。為便于觀察,我們對其稍加改動,調試所用Poc如下。

漏洞調試的第一步有兩個關鍵要素:能復現問題的樣本和能復現問題的環境,上面已經有了樣本,接下來需要搭建能復現漏洞的環境。
首先在ChakraCore項目中搜索當前漏洞的CVE號:

隨后定位到該漏洞補丁對應的commit:

接著選取一個補丁之前的版本,這里最終選取的是d1dc14版本(Bruno Keith指出的版本)。許多文章中一般只會提及所需ChakraCore版本對應的sha1,如果遇到這種情況,可以直接替換下面鏈接中的sha1進行下載:
https://github.com/microsoft/ChakraCore/tree/sha1
下載完成后,需要編譯生成可供調試的二進制文件,ChakraCore原生支持VS編譯,這里采用VS2015編譯,編譯選項為x64+release。編譯完成后,在如下相對路徑會生成相關二進制文件(如需生成IR等中間代碼,請編譯為Debug版本):
Build\VcBuild\bin\x64_release
我們主要關注ch.exe(用于加載ChakraCore.dll)和ChakraCore.dll(漏洞模塊)。
現在已經有了復現問題的環境,將ch.exe設為啟動項目,并在”屬性->調試->命令行參數”配置PoC文件全路徑,啟動調試,可以觀察到如下異常:

為了進一步定位問題,接下來我們采用Windbg Preview的TTD(Time Travel Debugging)進行調試,TTD調試的一個好處是可以在不用重啟調試器的情況下進行反向回溯。
安裝完Windbg Preview后,首先在界面上設置一下源碼路徑和符號路徑:

接著用管理員權限啟動調試器,進行TTD文件路徑等基本設置,點擊Record開始調試,此過程中如果出現彈窗,請不要點cancel,否則TTD調試將終止。

腳本執行完畢后,在調試器中觀察到和VS中相同的崩潰點:

 
定位成因
從上一小節最后一張截圖中我們可以看到崩潰時rax被當做指針來尋址,出問題的rax取自rdi,看一下rdi里面存了什么:

似乎一個DynamicObject對象的auxSlots指針被覆寫為了一個非預期值,而且這個非預期值來PoC。
接下來借助TTD回溯auxSlots對應的內存地址是在前面何時被改寫的:

可以看到前一次改寫這個地址處的數據是在JIT代碼中,緊接著往前回溯一條指令,我們來看一下改寫前此處是什么:

而0x2337、2這兩個整數此時仍Inline存儲在DynamicObject中。

此時回頭看一下PoC,注意到數字1、2、3、4、5、0x1337、0x2337都是PoC里面設置的屬性值。
為什么上述DynamicObject對象的5個屬性會變成這種兩頭存儲的狀態?
為了回答這個問題,首先要理解DynamicObject對象的屬性存儲方式,關于這部分更多的細節可以參考《AttackingEdge through the JavaScript compiler》。這里僅借助ChakraCore源碼中對auxSlots的注釋進行說明:

以上注釋對應的源碼文件:
lib\Runtime\Types\DynamicObject.h
可以看到此時auxSlots對應的情況似乎是(#2),接下來我們再次往前回溯,看再前面一次修改auxSlots對應地址處的操作在什么時候?

[1] [2] [3]  下一頁

【聲明】:黑吧安全網(http://www.www.hfjixin.com)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱admin@www.hfjixin.com,我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        百度 好搜 搜狗

        警告:本站禁止未滿18周歲訪客瀏覽,如果當地法律禁止請自覺離開本站!收藏本站:請使用Ctrl+D進行收藏