首页 > 漏洞分析 > CVE-2016-0041 Windows 10 PhoneInfo.dll Hijacking Vulnerability

CVE-2016-0041 Windows 10 PhoneInfo.dll Hijacking Vulnerability

微软在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的函数,调用栈如下图所示:
FoxitReader.exe StackTrace 进程调用栈

使用IDA Pro分析Windows 10下的urlmon.dll(分析时选择从微软的服务器下载对应的pdb符号文件),可以知道对应的调用路径如下所示:

UrlMkGetSessionOption
└--> GetUserAgentString
     └--> GetUserAgentStringForMode
          └--> InitUserAgentGlobals
               └--> BuildUserAgentStringMobileHelper
                    └-->LoadLibraryExW

可以看出,最后在BuildUserAgentStringMobileHelper这个函数中通过调用LoadLibraryExW加载了phoneinfo.dll这个DLL文件。对应的代码如下所示:
BuildUserAgentStringMobileHelper loadlibraryexw phoneinfo.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的效果如下图所示:
Windows10 urlmon.dll phoneinfo.dll劫持EXPLOIT POC

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) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



  1. chtq
    2016年3月1日10:33 | #1

    das

    [回复]