CVE-2016-0059 IE資訊洩露漏洞分析
0x00 概要
本文將對CVE-2016-0059進行深度分析,該漏洞是由於微軟超連結物件庫記憶體資料洩露造成的,成功利用該漏洞可以獲得一些資訊從而對使用者系統造成進一步威脅。要利用該漏洞,攻擊者必須誘導使用者點選一個email裡的或者一個office文件裡的超連結。
起初是把該漏洞作為Microsoft Office Excel 堆溢位漏洞報告給微軟的 ,但是該漏洞實際上是由 Internet Explorer物件庫 hlink.dll (微軟超連結物件庫) 引起的,因此微軟把該漏洞定義為 Internet Explorer資訊洩露漏洞。本文將仍然用Microsoft Office來證明和分析該漏洞。
受影響產品:
- IE 9
- IE 10
- IE 11(包括win10版)
0x01 漏洞驗證
要重現該漏洞,我們可以用 Microsoft Office Excel 2007開啟POC FG-VD-15-073_PoC.xls。然後我們可以到Excel.exe崩潰了,崩潰資訊顯示如下:
#!bash
(3344.1804): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=1a06d0d0 ebx=00000002 ecx=18b22fea edx=00000001 esi=18b23000 edi=18b22fe8
eip=6cd40b40 esp=00b739b4 ebp=00b739c4 iopl=0 nv up ei ng nz na po nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010282
hlink!WzDupWzToWz+0x16:
6cd40b40 668b06 mov ax,word ptr [esi] ds:002b:18b23000=????
0:000> u
hlink!WzDupWzToWz+0x16:
6cd40b40 668b06 mov ax,word ptr [esi]
6cd40b43 03f3 add esi,ebx
6cd40b45 6685c0 test ax,ax
6cd40b48 75f6 jne hlink!WzDupWzToWz+0x16 (6cd40b40)
6cd40b4a 2bf1 sub esi,ecx
6cd40b4c d1fe sar esi,1
6cd40b4e 8d5e01 lea ebx,[esi+1]
6cd40b51 85d2 test edx,edx
0:000> !heap -p -a esi
address 18b23000 found in
_DPH_HEAP_ROOT @ 5601000
in busy allocation ( DPH_HEAP_BLOCK: UserAddr UserSize - VirtAddr VirtSize)
1a173a5c: 18b22fe8 16 - 18b22000 2000
5e6d9abc verifier!AVrfDebugPageHeapAllocate+0x0000023c
77c97ab1 ntdll!RtlDebugAllocateHeap+0x0000003c
77c4ba4e ntdll!RtlpAllocateHeap+0x0004cfde
77bfdc26 ntdll!RtlpAllocateHeapInternal+0x00000146
77bfdab8 ntdll!RtlAllocateHeap+0x00000028
770f32e6 combase!CRetailMalloc_Alloc+0x00000016 [d:thcomcombaseclassmemapi.cxx @ 641]
6cd337fd hlink!CMalloc::Alloc+0x0000002d
6cd40c32 hlink!operator new+0x00000023
6cd3d50e hlink!HrReadLengthWzStm+0x00000034
6cd39b2c hlink!HLNK_PersistStm::Load+0x0000010c
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:Program Files (x86)Common FilesMicrosoft Sharedoffice12mso.dll -
3280dc07 mso!Ordinal2575+0x00000320
3280dac1 mso!Ordinal2575+0x000001da
3280da7a mso!Ordinal2575+0x00000193
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:Program Files (x86)Microsoft OfficeOffice12oart.dll -
3a99fb87 oart!Ordinal5476+0x00000709
0:000> dp 18b22fe8
18b22fe8 00720041 00610072 00440079 006d0075
18b22ff8 00320070 d0d0d000 ???????? ????????
18b23008 ???????? ???????? ???????? ????????
18b23018 ???????? ???????? ???????? ????????
18b23028 ???????? ???????? ???????? ????????
18b23038 ???????? ???????? ???????? ????????
18b23048 ???????? ???????? ???????? ????????
18b23058 ???????? ???????? ???????? ????????
0:000> kb
# ChildEBP RetAddr Args to Child
00 00b739c4 6cd3590d 00000000 00b73a88 00b73a1c hlink!WzDupWzToWz+0x16
01 00b739e0 6cd331cf 1a068f28 00000000 00b73a1c hlink!CExtensionService::Release+0x105d
02 00b73a28 3280da8e 1a068f28 00000000 00b73a88 hlink!HLNK::GetStringReference+0x5f
WARNING: Stack unwind information not available. Following frames may be wrong.
03 00b73a58 3a99fb87 08f74fd0 00000000 00b73a88 mso!Ordinal2575+0x1a7
04 00b73d70 77bf6d70 77cc74a8 19cd6ff0 00000000 oart!Ordinal5476+0x709
05 00b73d98 77c91c3a 000df3e0 00000060 14b90fa0 ntdll!RtlpPopEntrySListLockedAlt+0x20
06 00b73de8 32c8de4f 32195748 2fc48b8c 00000000 ntdll!RtlpStdLockRelease+0x14
07 00b73dec 32195748 2fc48b8c 00000000 00000000 mso!Ordinal1743+0x2f43
08 00b73df0 2fc48b8c 00000000 00000000 00000000 mso!MsoPvAllocCore+0x36
09 00b73df4 00000000 00000000 00000000 00b73c90 Excel!Ordinal40+0x108b8c
0x02 漏洞分析
由於輸入字串缺失結尾標誌符,從而導致讀取字串時讀取到了字串以外的記憶體資料,最終導致了該漏洞的產生。這個漏洞發生在hlink!WzDupWzToWz() 函式里,當該函式進行字串複製的時候產生了漏洞,成功利用該漏洞可導致資訊洩露。
首先我們看一下這個特製的XLS檔案,在偏移0x66C 和 0x140DC處分別不同,POC檔案和正常檔案在這兩處對比如圖:
圖1 正常檔案和POC檔案在偏移0x66c處對比
圖2 正常檔案和POC檔案在偏移0x140dc處對比
然後我們用工具Offvis來解析POC檔案如圖:
圖3 POC檔案0x66c處解析
圖4 POC檔案0x140dc處解析
從圖3我們看到,0x66C處對應的是ModifyTime域,實際上它不會導致漏洞產生,這裡我們忽略它。從圖4可以看到0x140dc處的 位元組D0對應complexData域。並且complexData是fopt (OfficeArtRGFOPTE)結構的一部分,OfficeArtRGFOPTE結構被微軟定義為:
圖5 OfficeArtRGFOPTE結構
從上面的定義中,我們看不到complexData域包含特定的結構。
然後我們在windbg用如下方式設定斷點:
#!bash
bu hlink!HLNK::GetMonikerReference " .printf "GetMonikerReference:\n"; db poi(poi(esp+4)+0x4c);"
該斷點被斷幾次後你會看到如下除錯資訊:
從上面除錯資訊可以看到,堆緩衝區0x16c52fe8處包含了complexData域的一部分。它指向一個沒有結束標誌符的寬位元組字串。
下面是hlink!HLNK::GetMonikerReference函式的部分程式碼,它呼叫 hlink!WzDupWzToWz() 函式來處理這個寬位元組字串。
下圖是對函式hlink!WzDupWzToWz()的分析
圖6 hlink!WzDupWzToWz()函式分析
總的來說,該問題是由於讀取輸入字串的時候,該字串沒有結束識別符號,從而讀取到了該字串記憶體以外的資料造成的。這個過程是 hlink!WzDupWzToWz() 函式進行字串複製操作的時候發生的。
庫檔案hlink.dll時用來處理超連結物件的。我們可以透過如下方式建立一個超連結來構造POC檔案:
圖7 在XLS 檔案裡建立超連結
我們把它儲存為 test.xls,然後用 Offvis解析如下:
圖8 新構造的EXCEL檔案解析
從上圖可以清楚第看到我們建立的超連結被儲存在了HLink 結構中,HLink結構被微軟定義如下:
Hyperlink結構定義如下:
根據上面的定義,我們可以透過與HLink結構進行對比,來推斷complexData域的資料結構。上面構造的test.xls裡HLink結構如下:
由此推斷complexData域資料內部結構如下(譯者注:這裡紅框中00 D0,可能應該是 00 00):
我們修改hyperlinkBitFields欄位的值為 |08 00 00 00|
,修改HyperlinkString欄位的字串結束符NULL 為 |00 D0|
如圖:
儲存後在WIN7 和WIN10裡測試,可以觸發漏洞。下圖是在WIN10裡的截圖:
如上圖所示,開啟修改後的test.xls,可以看到hlink.dll並沒有被載入。然後點選超連結"test",這時候hlink.dll被載入,並觸發了漏洞,如圖:
相關文章
- 漏洞利用之資訊洩露2024-04-29
- JS敏感資訊洩露:不容忽視的WEB漏洞2020-08-19JSWeb
- 資訊洩露之web原始碼洩露2020-09-26Web原始碼
- IE中的記憶體洩露2010-12-10記憶體洩露
- 網站安全之使用者資訊洩露漏洞案例分享2019-11-28網站
- 中移鐵通禹路由 ExportSettings 敏感資訊洩露漏洞2024-05-14路由Export
- Google+再曝漏洞!5250萬使用者資訊恐洩露2018-12-12Go
- MongoDB 伺服器漏洞洩露加密貨幣 Bezop 使用者資訊2018-04-28MongoDB伺服器加密
- DNS域傳送資訊洩露2020-08-19DNS
- 安全研究人員發現中國網貸App漏洞洩露大量個人資訊2019-07-23APP
- Lowmemorykiller記憶體洩露分析2018-11-15記憶體洩露
- 曝部分省市社儲存安全漏洞 數千萬個人資訊或遭洩露2015-04-23
- “行業互助”成公民資訊洩露毒瘤2019-07-02行業
- 使用 mtrace 分析 “記憶體洩露”2019-09-21記憶體洩露
- 曼聯遭黑客入侵,球員資訊恐洩露!2020-11-30黑客
- iPhone 7與iPhone 7 Plus配置資訊洩露2016-08-29iPhone
- 如何關閉Flash Cookie來避免資訊洩露?2016-10-20Cookie
- 朋友圈測試遊戲易洩露資訊2015-11-05遊戲
- Google下自己 看看多少資訊被洩露–資料資訊圖2012-08-03Go
- Twitter漏洞,或造成使用者私密訊息洩露2018-09-23
- APP資料洩露漏洞該如何修復和加固2022-11-03APP
- 利用Exchange漏洞入侵安插後門,小心資料洩露2021-11-01
- 蘋果macOS“快速預覽”曝漏洞:洩露加密檔案2018-06-20蘋果Mac加密
- 5G網路被曝存在嚴重漏洞 手機號碼等資訊容易洩露2019-02-05
- 超四成網站存安全漏洞 或致55億條個人資訊存洩露風險2015-12-25網站
- dp洩露2024-10-09
- 網際網路時代,如何防止個人資訊洩露2018-07-25
- 智慧穿戴洩露資訊風險曝光 只有蘋果值得相信?2016-07-12蘋果
- 世界上最大的資料洩露–資訊圖2014-12-28
- 美政府漏洞程式洩露:Windows攻擊氾濫成災2018-05-14Windows
- Java IO Stream控制程式碼洩露分析2021-09-09Java
- 2018年近50億條個人資訊被洩露 內部漏洞遠高於黑客攻擊2019-02-19黑客
- 資訊洩露、DNS快取中毒!版本低於4.3的NicheStack受高嚴重安全漏洞影響2021-08-06DNS快取
- 資訊洩露事件頻發,下一個會是誰?2018-10-08事件
- 駭客失誤?76.2萬車主,家庭住址資訊洩露2024-09-15
- 網站資料被惡意篡改洩露如何查詢漏洞2019-11-17網站
- 匿名黑客洩露vBulletin零日漏洞,波及全球數萬站點2019-09-25黑客
- Telegram爆出漏洞 語音呼叫即可洩露使用者IP地址2018-10-01