微软在2016年2月份发布的补丁中补掉了一个DLL劫持漏洞,该漏洞是MS16-014漏洞之一,CVE编号为CVE-2016-0041。在2015年12月份我注意到了这个漏洞的存在,但是并没有报告给微软,因为我没有给微软报告过漏洞……当时候特地去搜了一下关于phoneinfo.dll的信息,发现只有TK(@tombkeeper)在2015年的CanSecWest安全会议上的一个议题中(Sexrets of LoadLibrary)有提及。
0×01. 漏洞发现
当时候我在Windows 10下监控了一下Foxit Reader加载的DLL模块,发现当打开一个PDF文件的时候FoxitReader.exe会多次尝试加载PDF文件目录下的phoneinfo.dll文件,这个当然可以认为是一个DLL劫持漏洞。由于手头正好发现了Foxit Reader的另一个DLL劫持漏洞(Untrusted search path vulnerability),所以我把他们一起报给了Foxit。
0×02. 漏洞分析
查看一下尝试加载phoneinfo.dll时的调用栈,发现LoadLibraryExW起源于urlmon.dll中一个叫做UrlMkGetSessionOption的函数,调用栈如下图所示:
使用IDA Pro分析Windows 10下的urlmon.dll(分析时选择从微软的服务器下载对应的pdb符号文件),可以知道对应的调用路径如下所示:
UrlMkGetSessionOption └--> GetUserAgentString └--> GetUserAgentStringForMode └--> InitUserAgentGlobals └--> BuildUserAgentStringMobileHelper └-->LoadLibraryExW |
可以看出,最后在BuildUserAgentStringMobileHelper这个函数中通过调用LoadLibraryExW加载了phoneinfo.dll这个DLL文件。对应的代码如下所示:
Greg Linares working with CyberPoint SRT在SRT-VR-24DEC2015中给出了另外2个可以触发这个漏洞的路径:
_____________________________________________________ CINetHttpEdge::SetOptionUserAgent OR CINetHttp::SetOptionUserAgent OR CIEBrowserModeFilter::collectCacheEntryInfoCallback _____________________________________________________ | V MapBrowserEmulationStateToUserAgent (Ordinal 445) | V InitUserAgentGlobals (Ordinal 492) | V BuildUserAgentStringMobileHelper _____________________________________________________ ObtainUserAgentString (Ordinal 211) OR GetUserAgentString _____________________________________________________ | V InitUserAgentGlobals (Ordinal 492) | V BuildUserAgentStringMobileHelper |
urlmon.dll中可能还存在更多可以触发这个DLL劫持漏洞的API,具体可以在IDA中通过交叉引用来进行溯源。
0×03. 漏洞验证
Windows 10下并不存在phoneinfo.dll这个文件,在发现这个问题时我与同事讨论过,认为这可能是Windows Phone下的一个文件。在Windows 10下,只要软件中存在能够到达调用BuildUserAgentStringMobileHelper的代码执行路径,就可以触发这个漏洞。比如上面分析的Foxit Reader中调用的UrlMkGetSessionOption。
可以编写下面这样一段代码来进行验证:
void CPhoneInfoDlg::OnBnClickedCallFunction() { DWORD dwBufferLengthOut = 0; UrlMkGetSessionOption( URLMON_OPTION_USERAGENT, NULL, 0, &dwBufferLengthOut, 0); } |
编译后生成一个EXE文件(这里命名为PhoneInfo.exe);在Windows 10下,新建一种文件格式(如.foobar)并关联到PhoneInfo.exe。这样,在双击.foobar文件时,就会自动加载当前目录下的phoneinfo.dll文件。Exploit的效果如下图所示:
0×04. References
https://technet.microsoft.com/zh-cn/library/security/ms16-014.aspx
https://cansecwest.com/slides/2015/Sexrets_of_LoadLibrary__Yang_yu%20_CSW2015.pdf
https://github.com/CyberPoint/advisories/blob/master/SRT-VR-24DEC2015.txt
本文地址: 程序人生 >> CVE-2016-0041 Windows 10 PhoneInfo.dll Hijacking Vulnerability
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!