
1.3.5 浏览器参数注入
2018年,有两个明显的URL Scheme安全问题是由Windows下的IE和Edge参数注入引发的。其中一个是Electron自定义协议导致命令注入(CVE-2018-1000006),另一个是Edge远程代码执行漏洞(CVE-2018-8495)。
Windows下的IE和Edge对URL Scheme的处理方式存在差异。当浏览器接收到一个URL Scheme时,它会访问注册表以查询相应的应用程序路径,之后进行URL解码,并调用ShellExecute函数簇以启动应用程序,如图1-9所示。正是URL解码这一步导致双引号的闭合,从而引发了参数注入问题。
1.Electron自定义协议导致命令注入
2018年1月,Electron发布了自定义协议导致命令注入的安全公告(CVE-2018-1000006)。对于参数注入而引发的问题,构造的PoC如下:

图1-9 URL Scheme调用流程链

使用IE浏览器访问该链接,最终生成的启动参数如下:

通过参数注入,调用Electron支持的--gpu-launcher参数,设置该参数的值为cmd命令,并最终执行该cmd命令,启动计算器,如图1-10所示。

图1-10 CVE-2018-1000006 PoC演示
2.Edge远程代码执行漏洞
2018年10月,Edge公开了远程代码执行安全漏洞(CVE-2018-8495)。该漏洞同样是利用参数注入,最终达到了远程代码执行的效果。整个漏洞利用过程非常巧妙,下面进行详细分析。
首先需要指出的是,在Edge浏览器中居然可以打开一些不合法的URL Scheme(没有包含URL Protocol字段),比如wshfile项,如图1-11所示。
当然,在Windows 7和Windows 8中不能打开不合法的URL Scheme。
wshfile项指向了wscript.exe,这是一个非常熟悉的Windows内置脚本解释器。那么,我们可以利用wshfile尝试去运行脚本。上文提到Edge浏览器中存在参数注入问题,那么是否有脚本可以接收参数并用于执行呢?

图1-11 Edge浏览器通过URL Scheme调用wshfile
漏洞作者最终找到了以下解决方案:

该脚本文件支持接收参数,并且会将命令直接拼接到字符串中,然后通过PowerShell执行。

最终构造的PoC如下:

执行后触发的效果如图1-12所示。

图1-12 利用wshfile项构造PoC来打开calc.exe
目前,Windows 10已经发布了修复补丁,Edge已经不能调用这类不合法的URL Scheme。
此外,在分析漏洞过程中,知道创宇404团队也有了一些额外的发现,例如,在注册表HKEY_CLASSES_ROOT下发现了类似wshfile的URL Scheme,这些URL Scheme都指向wscript.exe,同样有可能触发远程代码执行。这些URL Scheme包括:

在C:\Windows\System32\目录下,我们还发现了SyncAppvPublishingServer.vbs文件。该文件同样可被用于触发远程代码执行,并且相较于漏洞作者所提供的方法,这种方式更为可靠。
除了SyncAppvPublishingServer.vbs文件外,位于C:\Windows\System32\Printing_Admin_Scripts\zh-CN目录中的pubprn.vbs文件也具备触发远程代码执行的能力。
需要补充的是,在Windows 7操作系统中,Chrome和Edge浏览器都存在打开非法URL Scheme的问题,但由于Chrome并未出现参数注入问题,因此可以暂时认为它是安全的。