CVE-2019-6145:未加引号的搜索路径和潜在滥用
2019-09-25 11:07:26 Author: www.4hou.com(查看原文) 阅读量:144 收藏

简介

SafeBreach Labs研究人员在Forcepoint VPN Windows客户端发现一个新的漏洞,该漏洞CVE编号为CVE-2019-6145。下面介绍该漏洞的具体情况以及攻击者如何利用该漏洞来进行权限提升、驻留,甚至用该技术来植入任意未签名的可执行文件来绕过检测,未签名的可执行文件是通过以NT AUTHORITY\SYSTEM权限运行的签名的服务来执行的。

注:为了利用该漏洞,攻击者需要拥有Administrator权限。

Forcepoint VPN Windows客户端

Forcepoint VPN Windows客户端,之前叫做Stonesoft VPN客户端,该软件部分以NT AUTHORITY\SYSTEM权限的Windows服务来运行,能提供足够的权限和功能。

漏洞分析

漏洞发现

Forcepoint VPN客户端服务(sgvpn.exe)是以NT AUTHORITY\SYSTEM权限运行的,而NT AUTHORITY\SYSTEM是权限最高的用户账户。该类服务很容易被用来进行权限提升,对攻击者来说是非常有用的。

该服务的可执行文件是由Forcepoint签名的,如果黑客可以找到一种执行它的方法,就可以用来进行白名单绕过。计算机启动后,该服务也会自动启动,也就是说这是攻击者用来驻留的潜在目标。

研究人员发现, Forcepoint VPN客户端服务启动后, sgvpn.exe签名进程会以NT AUTHORITY\SYSTEM权限运行。

研究人员发现服务进程执行后会有以下行为:

safebreach1-0002.png

从中可以看出,该服务在执行真实的可执行文件sgpm.exe前会寻找多个不存在的exe文件:

· C:\Program.exe

· C:\Program Files (x86)\Forcepoint\VPN.exe

PoC

为了测试该权限提升漏洞,研究人员编译了一个未签名的exe文件,该文件会将以下内容写入txt文件的文件名:

· 加载进程的进程名

· 执行时所用的用户名

safebreach2-0001.png

有合法继承执行的以NT AUTHORITY\SYSTEM权限执行的任意的未签名的exe文件是由Forcepoint签名的。

根源分析

sgvpn.exe执行后,会尝试执行sgpm.exe文件(从日志来看,这是软件的策略管理器)。

使用__snwprintf_s可以将要执行的命令行写入缓存中,步骤如下:

含有可执行文件的目录路径(C:\Program Files (x86)\Forcepoint\VPN Client)

“sgpm.exe”

“-A”参数(Automated VPN Mode)

调用如下所示:

__snwprintf_s(&cmdLineBuf, 0x104, 0xFFFFFFFF, “%s%s %s”, dirPath, sgpmExeName, arg_automatedVPNMode);

safebreach3-0002.png

然后,用CreateProcessW来执行装配命令行。

调用如下所示:

CreateProcessW(NULL, &cmdLineBuf, NULL, NULL, 0, 0, NULL, NULL, &startup_info, &process_information);

safebreach4-0001.png

以上发现中有两点是导致漏洞产生的根本原因:

CreateProcessW函数调用的第一个参数为NULL;

命令行缓存中不含有任何可以将可执行文件路径从参数中分割出来的加引号的字符串。

(形式如: “%s%s %s”),这会导致:

“C:\Program Files (x86)\Forcepoint\VPN Client\sgpm.exe -A”

根据MSDN的CreateProcessW函数文档,可以看到:

lpApplicationName参数可以为NULL。但这种情况下,模块名必须是lpCommandLine字符串中第一个空格限定的token。如果使用了含有空格的长文件名,可以用带引号的字符串来表明文件名结束的位置以及参数开始的位置,否则文件名就混淆了。

比如在字符串:c:\program files\sub dir\program name中,字符串可以有多种翻译的方式。系统可以以以下顺序翻译字符串:

c:\program.exe c:\program files\sub.exe c:\program files\sub dir\program.exe c:\program files\sub dir\program name.exe

未加引号的搜索路径漏洞产生的根本原因在于命令行中的可执行文件路径和参数之间存在加引号的字符串,所以CreateProcessW函数会在分析空格字符时将其分割开:

“C:\Program.exe”
“C:\Program Files (x86)\Forcepoint\VPN.exe”
“C:\Program Files (x86)\Forcepoint\VPN Client\sgpm.exe -A”

潜在漏洞利用和影响

下面介绍攻击者利用CVE-2019-6145漏洞的三种可能方式。

白名单绕过

攻击者利用该漏洞可以用签名的服务执行恶意软件。攻击者可以利用该漏洞来执行和绕过,比如引用白名单绕过。

驻留机制

攻击者利用该漏洞可以以驻留的方式在服务每次加载时执行恶意payload。也就是说,攻击者在前面提到的路径内释放恶意EXE文件后,服务每次重启时都会加载恶意代码。因为执行攻击者payload的服务进程是签名的,并且在本地执行,因此安全产品可能并不会检测到。因为可执行文件启动后就执行了,因此也不需要攻击者有任何可疑的动作。

权限提升

攻击者利用该漏洞可疑获取NT AUTHORITY\SYSTEM Administrator权限。

受影响的版本

所有早于6.6.1 版本的Forcepoint VPN Windows客户端都受到该漏洞的影响。

本文翻译自:https://safebreach.com/Post/Forcepoint-VPN-Client-for-Windows-Unquoted-Search-Path-and-Potential-Abuses-CVE-2019-6145如若转载,请注明原文地址: https://www.4hou.com/vulnerable/20515.html


文章来源: https://www.4hou.com/vulnerable/20515.html
如有侵权请联系:admin#unsafe.sh