GeForce ExperienceOS命令注入漏洞CVE-2019-5678

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

漏洞概述

在这篇文章中,我们会跟大家介绍这个NVDIA GeForce Experience(GFE)中的远程命令执行漏洞-CVE-2019-5678。版本号在3.19之前的GFE都会受到该漏洞的影响,攻击者可以通过诱骗目标用户访问钓鱼网站来利用该漏洞。

NVIDIA GFE

NVIDIA官方网站将GeForce Experience描述为“捕获和共享视频、屏幕截图和与朋友的实时流,并使您的驱动程序保持最新并优化您的游戏设置”的一种方式,它是与Geforce产品一起安装以给用户提供更多丰富功能的应用程序。

漏洞的发现

MWR实验室在其发布的安全报告中指出,GFE在运行时会开启一台本地API服务器,并允许控制GFE的各个功能。当你在GFE的GUI接口中修改一个设置之后,程序便会调用这个本地API。接下来,我们需要研究一下这个API服务器的运行机制,看看有没有什么有趣的功能。由于GFE启动的服务器为NodeJS Express,因此我们可以在“C:\Program Files (x86)\NVIDIA Corporation\NvNode”中找到大量相关的JavaScript源文件。

为了向服务器发出有效的请求,这里需要一个包含了随机令牌的自定义HTTP头,这个随机令牌会在程序启动的时候生成,并存储在“%LOCALAPPDATA%\NVIDIACorporation\NvNode\nodejs.json”中。文件名nodejis.json是静态命名,存储位置不会改变,因此定位这个文件会非常容易,文件内容大致如下:

2.png

分析认证Header

首先,我们需要弄清楚是否可以绕过身份验证机制来向API发送未经身份验证的有效请求。查看index.js文件的第185行代码,我们发现这里所谓的header检测,只是通过对比文件中包含的密钥值和自定义安全Header值来实现的。如果对比失败,则会返回403错误响应。

3.png

暂时我还没找到绕过它的方法,因为这种验证机制比较直接。不过值得注意的是,CORS的使用方法。在第181行代码,“Access-Control-Allow-Origin”头在所有的请求中都会被设置为“*”,这也就意味着如果我们能够以某种方式获取到秘密令牌,那么攻击者就可以控制服务器能接收的请求来源了,并且直接向服务器发送有效请求。此外,攻击者还可以使用XHR请求以及自定义安全Header来发送请求。

API测试

如果想要成功向API发送请求(例如执行任意代码),我们就可以充分利用和控制这些API了,通过grep命令搜索所有源文件中关于“exec”的代码,我们找到了NvAutoDownload.js这个文件:

4.png

大家可以看到,节点“/gfeupdate/autoGFEInstall/”可以接收一个POST请求,Content-Type会被设置为“text/*”,并最终向请求body中注入任意文本内容,而childProc函数会将这些命令以操作系统命令的形式执行:

5.png

上述请求可以成功转型calc.exe,这都不是什么问题,因为攻击者只需要知道文件中的秘密令牌即可。所以,下一步就是要找出一种方法来读取文件中包含的秘密令牌值。

漏洞利用

如前所述,由于这里的CORS策略的实现方式,即允许接收任何来源的请求,攻击者就可以通过浏览器来执行攻击了。当然了,攻击的前提是知道秘密令牌值,而唯一的方法就是欺骗用户上传包含了秘密令牌值的文件。由于这个文件使用的是静态路径以及静态文件名,所以攻击者可以轻松利用浏览器来实现这一点,而且只需要用户按几个键就可以实现命令注入的。

漏洞利用详细步骤

在Chrome浏览器中,可以直接通过快捷键来将任意内容复制到剪贴板中,但是在Firefox中,就需要额外的鼠标点击操作了。最终,针对Chrome的漏洞利用方式需要按下组合键:“CTRL+V+Enter”。

具体步骤如下:

1、“CTRL”-将包含秘密值的文件路径拷贝到剪贴板,“%LOCALAPPDATA%\NVIDIACorporation\NvNode\nodejs.json”,它还会打开文件输入窗口,并上传文件。

2、“V”-剪贴板的值会被拷贝到文件输入窗口中。

3、“Enter”-上传nodejs.json文件之后,页面将会读取文件中的内容。

4、页面会通过一个XHR请求向GFE API发送请求,并使用文件中读取到的内容来在目标主机中执行任意命令。

6.gif

总结

漏洞利用的过程确实需要一些用户交互,但是需要进行的操作非常少。目前,NVIDIA已经在最新版本的GFE v3.19中修复了这个问题,因此我们强烈建议广大用户尽快安装最新版本的GFE。当然了,如果你不需要使用GFE的话,最好还是把它卸载掉,以减少额外的攻击面。

PoC:【GitHub传送门

* 参考来源:rhinosecuritylabs,FB小编Alpha_h4ck编译


发表评论 取消回复

电子邮件地址不会被公开。 必填项已用*标注