Nice to meet you.

Microsoft Edge远程命令执行漏洞

字数统计: 2.1k阅读时长: 8 min
2018/10/13 Share

漏洞简介

漏洞名称:Microsoft Edge 远程命令执行漏洞
漏洞编号:CVE-2018-8495
漏洞危害:攻击者可以利用该漏洞,通过Microsoft Edge浏览器在远程计算机上运行恶意代码
风险等级:
影响范围:
     Windows 10 Version 1607 for x64-based Systems
     Windows 10 Version 1607 for 32-bit Systems
     Windows Server 2016
     Windows Server 2016 (Server Core installation)
     Windows 10 Version 1703 for x64-based Systems
     Windows 10 Version 1703 for 32-bit Systems
     Windows 10 Version 1709 for 32-bit Systems
     Windows 10 Version 1709 for 64-based Systems
     Windows Server, version 1709 (Server Core Installation)
     Windows 10 Version 1803 for 32-bit Systems
     Windows 10 Version 1803 for x64-based Systems
     Windows Server, version 1803 (Server Core Installation)


漏洞原理及复现

  (CVE-2018-8495)漏洞原因主要是 Microsoft Edge 滥用自定义URI方案,参数过滤存在问题从而实现了远程代码执行。

Microsoft Edge 启动默认邮件客户端

在一些网页中,就比如在我的博客主界面,头像下面是有一个邮件的按钮的,点击就可以启动默认邮件客户端来发送邮件。
我们也可以通过类似”mailto:xxx@qq.com“的URL来启动本地的默认邮件客户端。在Edge中,输入类似的URL将出现提示:“‘Microsoft Edge’正在尝试打开‘邮件’”,询问用户是否切换应用。
switch-software
在我的电脑上,默认的邮件客户端是Outlook。
default-program
如下图所示,某些参数将发送给Outlook。然而这些参数,是可由用户控制的字符串来进行更改的。然后问题来了,还有哪些外部应用程序启动URI方案?

Microsoft Edge 启动WScript.exe

在注册表中,可以找到所有可以使用的注册自定义协议,注册表 计算机\HKEY_CLASSES_ROOT\ 内包含shell\open\command子文件夹的子项。然后,作者找到了 计算机\HKEY_CLASSES_ROOT\ms-word\shell\open\command 这个注册表项,它的值为 C:\Program Files (x86)\Microsoft Office\root\Office16\protocolhandler.exe "%1"。这指向Office16文件夹内一个名为protocolhandler.exe的可执行程序,%1表示直接将参数进行传递,这意味着如果我们有一个用户点击一个URL标记,指向’ms-word:test’,将会启动该程序,然后发生以下情况:
error-operate
作者没有去尝试其他的命令行参数来启动’protocolhandler.exe’进而实现一些有趣的攻击方法。
他找到 计算机\HKEY_CLASSES_ROOT\WSHFile\Shell\Open\Command 这个子项,如图所示:
regedit-wshfile
Windows脚本宿主提供了一个环境,用户可以使用各种语言执行脚本,使用各种对象模型来执行任务,这可以将用户构造好的参数通过URI方案直接传递给’WScript.exe’。
原文中讲到:如果用户点击”wshfile:test”,Edge 将会弹出提示,问用户是否选择”Microsoft @ Windows Script Host”打开此wshfile。
open-wshfile1
但是不知道为啥,我在进行了相同的操作后,没有打开”Microsoft @ Windows Script Host”这一选项。
open-wshfile2
然后我就用火绒浏览器,在地址栏输入 wshfile:test ,再去文件夹找到’WScript.exe’来打开链接
(Chrome浏览器提示“要打开 Microsoft @ Windows Script Host 吗?”,但是我点击没有反应)
open-wshfile3
点击打开链接后:
nofile-expansion
‘WScript.exe’试图执行位于参数中指定路径C:\WINDOWS\system32\wshfile:test的文件,但该文件不存在。我们可以创建一个名为”wshfile:test”的文件吗?Windows系统中文件名是不能有冒号的,所以,不可行。

漏洞利用

第一个测试,通过路径遍历,测试 wshfile:test/../../foo.vbs ,点击打开链接,显示“无法找到脚本文件”:
notfind-script
这说明我们可以指向任何目录中的任何文件,只要我们可以将文件放在可预测的位置,我们就会有RCE。但是,看起来大多数(如果不是所有)来自Edge的缓存文件都会进入临时目录位置(目录名通常为某个hash值)。换句话说,我们可以写入文件,但是我们还不能得知该文件的位置。作者想到了一篇文章:WSH注射:案例研究。在这篇文章中,指出Windows附带了一个签名的VBS ‘C:\Windows\System32\Printing_Admin_Scripts\en-US\pubprn.vbs’ 遭受’WSH注入’的困扰。这表明特定的VBS文件可以接收传递给它的2个参数,这些参数可以精心设计,以使其可以欺骗VBS脚本执行任意命令。这篇文章写在2017年9月3号,漏洞已经修复,唯一受影响的是尚未更新的计算机。所以这还没有用,该文章中提到有更多这样的案例存在但没有具体说明,因此作者开始寻找类似的案例。
作者首先查看了我在Windows中找到的每个VBS文件,然后查看它是否接受任何参数。他发现一个VBS脚本:

C:\Windows\WinSxS\amd64_microsoft-windows-a..nagement-appvclient_31bf3856ad364e35_10.0.17134.48_none_c60426fea249fc02\SyncAppvPublishingServer.vbs

这个特定的脚本接受一些参数并将它们传递给powershell.exe shell执行而不过滤它,允许我们注入任意命令。如果你看看’SyncAppvPublishingServer.vbs’的第36行,我们看到:

psCmd = “powershell.exe -NonInteractive -WindowStyle Hidden -ExecutionPolicy RemoteSigned -Command&{”&syncCmd&“}”

‘syncCmd’、Edge都不会对引号进行过滤,因此我们可以根据需要传递尽可能多的参数’WScript.exe’。同样为了将这个powershell隐藏执行,可以使用’-WindowStyle Hidden’这个参数。
此版本中的问题是此特定文件夹名称取决于用户所在的Windows构建。在我的操作系统版本17134中,该文件夹包含’10 .0.17134’,如果您使用的是其他操作系统,则它将不同。几乎没有关于如何确定这些路径名的信息。
所以,我们所需要的只是Edge中的一个访问漏洞,它允许我们检测本地文件(不读取它们),我无法找到这样的错误。 但是重要的是,我们不必通过猜测整个文件夹名称。在Windows文件夹中有一个名为“DOS PATH”的速记版本,所以猜测文件夹位置的DOS路径版本是可能的。
所以,我们的不需要猜测完整路径。

C:\Windows\WinSxS\amd64_microsoft-windows-a..nagement-appvclient_31bf3856ad364e35_10.0.17134.48_none_c60426fea249fc02\SyncAppvPublishingServer.vbs

只需要使用DOS PATH就可以了

C:\Windows\WinSxS\AMD921~1.48_\SyncAppvPublishingServer.vbs

所以这使我们的攻击更加强大。因为这两个指向完全相同的文件。 至于弹出那个讨厌的提示?没有用户会被愚弄点击“确定”并运行Windows脚本程序的!但是,当出现此提示时,默认焦点位于“确定”按钮上,这意味着用户所要做的就是按住输入键,所以我们可以诱骗他们接受提示并触发exp。

EXP

最后的攻击 exp如下:

1
2
3
4
5
6
7
<a id="q" href='wshfile:test/../../WinSxS/AMD921~1.48_/SyncAppvPublishingServer.vbs" test test;calc;"'>test</a>
<script>
window.onkeydown=e=>{
window.onkeydown=z={};
q.click()
}
</script>

具体攻击演示视频:
视频


遇到的情况

我在我和我室友的电脑上试EXP的时候都是出现这样的错误:
no-engine
网上的解决方法也没有用,突然想起来前天电脑自动更新,额,可能是自动更新打了补丁吧,有空再去Windows Server 2016上试试。


建议

1.不要打开来历不明的文件或者链接,避免被被攻击者利用在机器上执行恶意代码;
2.打开Windows Update更新功能,点击“检查更新”,或手动下载安装相应补丁,重启系统。微软官方补丁下载地址:https://portal.msrc.microsoft.com/en-us/security-guidance
【备注】建议在安装补丁前做好数据备份工作,避免出现意外。


参考链接:
https://xz.aliyun.com/t/2881
https://leucosite.com/Microsoft-Edge-RCE/
https://enigma0x3.net/2017/08/03/wsh-injection-a-case-study/
http://m.8n8k.com/3849.html

声明:本站如无意中侵犯了某个媒体或个人的知识产权,请联系告之,我将立即删除。本站内容来自于互联网,仅适于技术爱好者学习研究使用,学习中请遵循国家相关法律法规,一否则切后果自责,本站不承担任何责任!

文中若存在不妥或有误之处,敬请指正,不胜感激。

CATALOG
  1. 1. 漏洞简介
  2. 2. 漏洞原理及复现
    1. 2.1. Microsoft Edge 启动默认邮件客户端
    2. 2.2. Microsoft Edge 启动WScript.exe
    3. 2.3. 漏洞利用
    4. 2.4. EXP
  3. 3. 遇到的情况
  4. 4. 建议