隱藏17年的Office遠程代碼執行漏洞?
感謝你的邀請
我的回答如下,希望采納
2017年11月14日,微軟發布了11月份的安全補丁更新。金山毒霸安全實驗室專家,發現其中一個修復是潛伏17年之久的Office遠程代碼執行漏洞(CVE-2017-11882)。黑客可借助該漏洞,以當前登錄的用戶的身份執行任意命令。
漏洞影響版本:
Office 365
Microsoft Office 2000
Microsoft Office 2003
Microsoft Office 2007 Service Pack 3
Microsoft Office 2010 Service Pack 2
Microsoft Office 2013 Service Pack 1
Microsoft Office 2016
漏洞事件分析:
漏洞出現在模塊EQNEDT32.EXE中,該模塊為公式編輯器,在Office的安裝過程中被默認安裝。該模塊以OLE技術(Object Linking and Embedding,對象鏈接與嵌入)將公式嵌入在Office文檔內。
圖 1 – Microsoft 公式編輯器
當插入和編輯數學公式時,EQNEDT32.EXE并不會被作為Office進程(如Word等)的子進程創建,而是以單獨的進程形式存在。這就意味著對于WINWORD.EXE, EXCEL.EXE等Office進程的保護機制,無法阻止EQNEDT32.EXE這個進程被利用。
由于該模塊對于輸入的公式未作正確的處理,攻擊者可以通過刻意構造的數據內容覆蓋掉棧上的函數地址,從而劫持程序流程,在登錄用戶的上下文環境中執行任意命令。
圖 2 – CVE-2017-11882 POC中所執行的命令
國外安全廠商0patch對修補前后的相應補丁進行了對比,發現更新補丁后的程序版本是使用匯編方式進行修補的,并據此推測由于年代久遠,微軟或已丟失相關程序的源代碼。再者,當時(2000年)的編譯器所編譯的程序并不包含ASLR等漏洞緩解措施,因此該模塊必將吸引更多黑客對其進行漏洞挖掘。為安全起見,強烈建議用戶取消對該模塊的注冊,解決方案請參考文章結尾部分。
圖 3 公式編輯器使用較低版本編譯器編寫(VisualC++ 3~4版)
圖 4 – EQNEDT32.exe未見任何漏洞環節措施
漏洞分析: (1)基本信息
截止分析報告撰寫時,只發現了RTF類型的CVE-2017-11882漏洞利用文檔。觸發漏洞的OLE對象加載方式與今年上半年的CVE-2017-0199漏洞類似,使用了\objupdate控制字來保證OLE對象的自動更新和加載。
圖 5 – RTF標準文檔中對\objupdate控制字的說明
該OLE對象的類型為“Equation.3”,即公式編輯器3.0類型對象,該公式對象使用了CFB格式進行存儲。
圖 6 – 漏洞文檔中的OLE數據頭
對該OLE對象進行提取和分析,可以發現公式的相關內容存放在\x01CompObj流之后。
圖 7 – 公式對象
(2)詳細分析
公式的內容使用了一種名為MTEF v.3的二進制格式進行存儲。該格式的頭部為28(0x1C)個字節,定義如下:
在漏洞利用文檔中,該結構如下所示。
圖 8 – 公式頭結構
對上圖的解析如下表所示。
偏移量變量名說明值0-1cbHdr公式頭大小0x001C2-5version版本號0×000200006-7cf剪貼板格式0xC3BE8-11cbObjectMTEF數據長度0×45,即69字節12-15reserved1未公開0×0000000016-19reserved2未公開0×0068242820-23reserved3未公開0x0069A87C24-27reserved4未公開0×00000000
緊隨該公式頭結構的數據為公式數據。公式數據使用字節流進行存儲。
圖 9 – 公式數據
MTEF v.3公式數據中,前5個字節為數據頭,解析如下表所示。
偏移量說明值0MTEF版本號0×031該數據的生成平臺0×00表示在Macintosh平臺生成,0×01表示在Windows平臺生成。此處為0×01。2該數據的生成產品0×00表示由MathType生成,0×01表示由公式編輯器生成。此處為0×01。3產品主版本號0×034產品副版本號0x0A
在數據頭之后的字節流即為公式數據。
數據0x0A所對應的數據類型為SIZE,只占用一個字節。
數據0×08所對應的數據類型為FONT,文檔中數據的解析如下表所示。
數值解釋0×08FONT記錄標志0×02typeface類型0×81字體風格0x636D642E……字體名(以空字符結尾),即圖9中的cmd.exe…字符串
圖 10 – 漏洞代碼
通過對下面的兩張圖進行對比,可以明白棧溢出的觸發過程。
圖 11 – 被覆蓋前的棧數據
圖 12 – 被覆蓋后的棧數據
被修改后的函數調用如下圖所示,在前文中已經提到,該公式編輯器并沒有開啟ASLR。這個硬編碼的地址0x00430C12對應于對函數WinExec的調用。因而該字體名對應的命令得以執行。
http://www.freebuf.com/vuls/154462.html
解決方案:
1.老鐵,建議大家盡快使用金山毒霸等方式修復該漏洞,目前金山毒霸也支持查殺。
2、由于該公式編輯器已經17年未做更新,可能存在大量安全漏洞,建議在注冊表中取消該模塊的注冊。
l 按下Win+R組合鍵,打開cmd.exe
l 輸入以下兩條命令:
對此,你有什么想法?歡迎大家關注、轉發、點贊、評論、收藏等方式交流。