您的位置:首頁>正文

Microsoft Office記憶體損壞漏洞(CVE–2017–11882)分析

0x00背景

2017年11月, 微軟在例行系統補丁發佈中, 修復了一個Office遠端代碼執行的嚴重漏洞, 編號CVE-2017-11882。 該漏洞類型為緩衝區溢位, 位於EQNEDT32.EXE組件。 受害用戶打開惡意的office文檔時,

無需交互, 就可能執行惡意程式碼。

據悉, 這個元件是由Design Science Inc.開發的, 後來由微軟收購。 該組件於2001年編譯嵌入office, 之後沒有任何進一步的修改。 所以該漏洞已存在17年之久。 影響現階段流行的所有office版本。

360CERT經過分析確認, 確定該漏洞存在遠端命令執行風險, 建議用戶儘快更新相應補丁。

0x01漏洞概述

EQNEDT32.EXE用於在文檔中插入和編輯方程式。 插入到文檔中的任何公式都是OLE物件。 該元件是在OLE技術規範下設計的。 首發於Microsoft Office 2000和Microsoft 2003。 從Microsoft Office 2007套件開始, 顯示和編輯方程的方法發生了變化, 雖然EQNEDT32.EXE變得過時, 不過, 為了保持版本相容性, 它並沒有從Office套件中刪除。

EQNEDT32.EXE為OLE實現了一組標準的COM介面。

IOleObject

IDataObject

IOleInPlaceObject

IOleInPlaceActiveObject

IpersistStorage

而問題的就在於IpersistStorage:Load這個位置。 因為歷史久遠, 該元件開發的時候並沒有例如ASLR這樣的漏洞緩解措施。

利用起來更加的方便。

0x02 漏洞分析

檢測到VirusTotal上有該漏洞的POC, 多家檢測機構標注為CVE-2017-11882。 (最開始只有微軟能檢測)

如上所說, 通過惡意樣本分析, 問題出在EQNEDT.EXE中sub_41160F函數中。 如圖所示, strcpy函數沒有檢查複製時的長度造成了溢出。

通過調試可以猜測在正常情況下eax寄存器也就是第一個參數應該是字體名。

通過rtfobj抽取樣本中的OLE物件, 發現字體名為cmd.exe……。

在填充的AAA……之後是0x430C12, 也就是EQNEDT.EXE中調用WinExec的地方。

返回位址被覆蓋為0x430C12, 從而執行命令。

最後執行效果:

0x03影響版本

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

0x04修復建議

360CERT建議用戶及時更新補丁, 以提高系統安全性。

緩解措施:該問題可通過修改註冊表, 禁用該模組的方式進行緩解。 其中XX.X為版本號。

1reg add "HKLMSOFTWAREMicrosoftOfficeXX.XCommonCOM Compatibility{0002CE02-0000- 0000-C000-000000000046}" /v "Compatibility Flags" /t REG_DWORD /d 0x4001reg add "HKLMSOFTWAREWow6432NodeMicrosoftOfficeXX.XCommonCOM Compatibility{0002CE02-0000-0000-C000-000000000046}" /v "Compatibility Flags" /t REG_DWORD /d 0x4000x05時間線

2017年11月14日 微軟發佈安全更新

2017年11月20日 Github放出利用代碼

2017年11月21日 360CERT及時跟緊發佈預警通報

0x06參考文檔

https://github.com/embedi/CVE-2017-11882

https://embedi.com/blog/skeleton-closet-ms-office-vulnerability-you-didnt-know-about

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-11882

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示