_ _ (_) | | __ ____ __ _ _ _ _ __ ___ _ __ _ __ ___ | |_ \ \ / /\ \/ /| || | | || '_ ` _ \ | '_ \ | '_ \ / _ \| __| \ V / > < | || |_| || | | | | || |_) |_ | | | || __/| |_ \_/ /_/\_\| | \__,_||_| |_| |_|| .__/(_)|_| |_| \___| \__| _/ | | | |__/ |_| /---------------------------------------------------------------------------------------\ |>...................[ 分析IE EMP 沙盒逃逸漏洞-CVE-2015-2489 ]...................<| |>......................[ by nEINEI/vxjump.net ]......................<| |>......................[ 2015-09-14 ]......................<| \>...................... [ neineit_at_gmail.com ] ......................SetValue后, IE EPM会将这个请求通过COM IPC传递给Broker进程,然后Broker的COM对象响应该请求,来执行SettingStore::CSettingsBroker::SetValue 操作,这个操作 可以写入某个注册表值到系统注册表中。 当攻击者使用下面这个键值_IEVALUE_GUID_Trident_CleanupEncryptedMediaExtensions时,就可以向注册表 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce 写入任意值,这样在开机启动时就可以允许IL等级是Medium权限的进程。 .text:5DD33948 dd offset _IEVALUE_GUID_Trident_CleanupEncryptedMediaExtensions .text:5DD3394C dd 1015Fh, 406102h 在GetValueById这个函数中,通过__imp__bsearch来获得那些ID是可以被允许的, .text:5DDA2A98 push ebp .text:5DDA2A99 mov ebp, esp .text:5DDA2A9B sub esp, 0Ch .text:5DDA2A9E push esi .text:5DDA2A9F push offset ?_CompareValueGuids@SchemaStore@SettingStore@@YAHPBX0@Z ; PtFuncCompare .text:5DDA2AA4 xor eax, eax .text:5DDA2AA6 mov [ebp+Key], ecx .text:5DDA2AA9 push 0Ch ; SizeOfElements .text:5DDA2AAB push 15F5h ; NumOfElements .text:5DDA2AB0 mov [ebp+var_8], ax .text:5DDA2AB4 mov esi, edx .text:5DDA2AB6 mov [ebp+var_6], eax .text:5DDA2AB9 mov [ebp+var_2], ax .text:5DDA2ABD lea eax, [ebp+Key] .text:5DDA2AC0 push offset ?s_rgValues@SettingStore@@3QBUVALUEINFO@1@B ; Base .text:5DDA2AC5 push eax ; Key .text:5DDA2AC6 call ds:__imp__bsearch .text:5DDA2ACC mov [esi], eax .text:5DDA2ACE add esp, 14h .text:5DDA2AD1 neg eax .text:5DDA2AD3 sbb eax, eax .text:5DDA2AD5 and eax, 7FF8FFFEh .text:5DDA2ADA add eax, 80070002h .text:5DDA2ADF pop esi .text:5DDA2AE0 mov esp, ebp .text:5DDA2AE2 pop ebp .text:5DDA2AE3 retn .text:5DDA2AE3 ?GetValueById@SchemaStore@SettingStore@@YGJPBU_GUID@@PAPBUVALUEINFO@2@@Z endp .text:5DDA2AE3 所以,微软在补这个漏洞的时候,补的是ID的标志值,更新到补丁版本可以看到, .text:5DD31700 dd offset _IEVALUE_GUID_Trident_CleanupEncryptedMediaExtensions .text:5DD31704 dd 1015Fh, 400102h // 这里已经修改为了400102h,而不是406102h .text:5DD3170C dd offset _IEVALUE_GUID_Ried_International_Scripts_21IEPropFontName .text:5DD31710 dd 10160h, 400102h .text:5DD31718 dd offset _IEVALUE_GUID_Ried_InternetSettings_Lockdown_Zones_11803 .text:5DD3171C dd 20161h, 101h .text:5DD31724 dd offset _IEVALUE_GUID_Ried_ActiveXCompatibility_d2d588b5_d081_11d0_99e0_00c04fc2f8ec_Compatibility_Flags .text:5DD31728 dd 10163h, 101h .text:5DD31730 dd offset _IEVALUE_GUID_LCIE_TabProcConfig_Value 这样调用__imp__bsearch时,给参数是_IEVALUE_GUID_Trident_CleanupEncryptedMediaExtensions的操作会搜索失败, 在后面的分支里面将不会执行_SetValue这个这个真正写注册表的操作。 [0x04] .其它 CVE-2015-2489这个IE EPM 提权的漏洞利用十分简单,不完美的地方是需要重启后才能执行任意代码,不是立刻就能执行任意代码. ---------------------------EOF--------------------------------------------------------------------------------------------