今天看到有人说chrome访问一个设备路径导致win10蓝屏,一搜帖子还挺多的。
作为win内核研究人员,对此非常感兴趣。赶紧打开虚拟机,装上chrome,测试一把。
果然蓝了。
挂上Windbg调试器,很容易就发现问题在哪里了。
eax=9d35e390 ebx=00000012 ecx=00000000 edx=9d35e390 esi=b7cb5798 edi=9d35e390eip=b8fd693a esp=abc7f78c ebp=abc7f790 iopl=0 nv up ei ng nz na po nccs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010282condrv!CdpDispatchCleanup+0x1a:b8fd693a 8b11 mov edx,dword ptr [ecx] ds:0023:00000000=????????Resetting default scopeLAST_CONTROL_TRANSFER: from 82a4f2a6 to 829959e4STACK_TEXT: abc7ec84 82a4f2a6 00000003 417ab436 0000001e nt!RtlpBreakWithStatusInstructionabc7ecd8 82a4ecb4 896dc340 abc7f0c0 abc7f0f4 nt!KiBugCheckDebugBreak+0x1fabc7f094 8299439a 0000001e c0000005 b8fd693a nt!KeBugCheck2+0x7adabc7f0b8 829942d1 0000001e c0000005 b8fd693a nt!KiBugCheck2+0xc6abc7f0d8 82a50f6b 0000001e c0000005 b8fd693a nt!KeBugCheckEx+0x19abc7f0f4 829d5b52 abc7f638 82b59960 abc7f1f0 nt!KiFatalExceptionHandler+0x1aabc7f118 829d5b24 abc7f638 82b59960 abc7f1f0 nt!ExecuteHandler2+0x26abc7f1e0 8292e595 abc7f638 abc7f1f0 00010037 nt!ExecuteHandler+0x24abc7f61c 829ce781 abc7f638 00000000 abc7f718 nt!KiDispatchException+0x1b5abc7f688 829d3062 ffffffff ffffffff ffffffff nt!KiDispatchTrapException+0x51abc7f688 b8fd693a ffffffff ffffffff ffffffff nt!KiTrap0E+0x382abc7f790 828b0368 b7cb5798 9d35e390 a9d2c220 condrv!CdpDispatchCleanup+0x1aabc7f7a8 82bd9e04 abc7fa74 b7cb5798 a9d2c220 nt!IofCallDriver+0x48abc7f7e8 82bd49aa 00000000 a9d2c220 00000001 nt!IopCloseFile+0x184abc7f8ac 82bb53b3 b7cb5798 45ff2480 00000000 nt!IopParseDevice+0xa6aabc7f99c 82bb7cb7 00000040 87ff2480 6c600001 nt!ObpLookupObjectName+0xea3abc7fa3c 82beecb7 098cf240 87ff2480 6c600001 nt!ObOpenObjectByNameEx+0x1c7abc7fc04 829cce6b 098cf240 098cf270 098cf2ac nt!NtQueryFullAttributesFile+0x15fabc7fc04 77cd5ef0 098cf240 098cf270 098cf2ac nt!KiSystemServicePostCall098cf220 77cd352a 75ff982e 098cf240 098cf270 ntdll!KiFastSystemCallRet098cf224 75ff982e 098cf240 098cf270 098cf2d0 ntdll!NtQueryFullAttributesFile+0xa098cf2ac 0fcb8f87 085375a8 00000000 098cf2d0 KERNELBASE!GetFileAttributesExW+0x7eWARNING: Stack unwind information not available. Following frames may be wrong.098cf350 10ec66a9 098cf54c 098cf520 00a90000 chrome!ChromeMain+0x34a47
mov edx,dword ptr [ecx]
读0地址导致内存访问异常,蓝屏。
具体原因就是微软condrv.sys处理cleanup例程的时候对访问指针判断不够严谨,FileObject->FsContext未空,未作判断直接读取内容导致蓝屏。
condrv!CdpDispatchCleanupPAGE:00016925 mov eax, [ebp+Irp]PAGE:00016928 mov ecx, [eax+60h] //Irp->Tail.Overlay.CurrentStackLocationPAGE:0001692B mov ecx, [ecx+18h] //IoStack->FileObjectPAGE:0001692E test ecx, ecxPAGE:00016930 jz loc_181F9PAGE:00016936 mov ecx, [ecx+0Ch] //FileObject->FsContextPAGE:00016939 push esiPAGE:0001693A mov edx, [ecx] //ecx=0,读取违例
我也往回看了几个老版本win10系统,condrv.sys同样存在一样的问题,说明这个已经存在很久了,只是最近刚被发现了。
粗略分析来看,FsContext一般来说并不能被攻击者控制,并且此处只是一个读内存问题,一般不能得到一个有效的漏洞攻击利用。
所以大家并不用特别担心,如果有人拿来恶作剧,最多就是让你电脑蓝屏重启一下,危害并不大。
但是,注意别在写文档、写代码等等情况下,还未保存数据的时候,中招了。
那么,节哀,刚刚辛辛苦苦写的东西肯定没了!
最后,等待微软修复吧。
最后的最后:
并不是只有chrome访问这个设备路径才有问题,所有使用chrome内核的浏览器都会中招
朋友发你一个看起来像txt文本的批处理文件,也会导致windows蓝屏。
以及其他各种脚本文件,点开之前都看看内容是不是存在设备路径\\.\globalroot\device\condrv\kernelconnect
...
(完)