【漏洞通告】 Microsoft Windows PsExec 0day漏洞

发布时间 2021-01-08

0x00 漏洞概述

CVE  ID


时  间

2021-01-08

类   型

LPE

等  级

高危

远程利用

影响范围

PsExec v1.72-v2.2

 

0x01 漏洞详情

image.png

PsExec是SysInternals套件的一部分,它是系统管理员的一种工具,可在计算机客户端远程执行应用程序。

2020年12月09日,PsExec被披露存在一个本地权限提升0day漏洞,该漏洞被命名为管道劫持(或命名管道占用)漏洞,该漏洞允许攻击者诱使PsExec重新打开恶意创建的命名管道并授予其本地系统权限。成功利用此漏洞后,攻击者将能够以本地系统的身份执行任意进程,从而控制整个计算机。

相关研究人员表示,该漏洞影响PsExec版本从1.72到最新版本2.2,这意味着该漏洞已经存在大约14年了。

 

漏洞细节

PsExec包含一个名为“PSEXESVC”的嵌入式资源,它是一个可执行的服务级别组件,每当PsExec客户机以远程机器为目标执行PsExec时,该组件就会作为SYSTEM被提取、复制到远程机器上并执行。PsExec客户端和远程PSEXESVC服务之间的通信通过命名管道进行。具体来说,名为“\PSEXESVC”的管道负责解析和执行PsExec客户端的命令,比如“要执行哪个应用程序”、“相关命令行数据”等。

当然,出于安全原因,PSEXESVC服务的“\PSEXESVC”管道受到保护,仅允许管理员进行读/写访问。

image.png

 

但是,通过管道抢注(即首先创建管道的方法),低权限应用程序可以访问该管道。也就是说,如果本地低权限应用程序在执行PSEXESVC之前创建了“\PSEXESVC”命名管道,则PSEXESVC将获取现有实例的句柄,而不是创建命名管道,这将产生一些意料之外的后果,稍后将看到。下面展示了PSEXESVC如何创建“\PSEXESVC”管道的反汇编:

image.png

 

在这里,从nMaxInstances参数可以看到,它允许存在无限的“\PSEXESVC”管道实例。此外,它并不能确保它是第一个创建“\PSEXESVC”管道的应用程序,并且通常使用FILE_FLAG_FIRST_PIPE_INSTANCE标志来完成。在这种情况下,它将尝试创建命名管道,如果命名管道已经存在,则只需在调用后获取现有“\PSEXESVC”管道的句柄即可,这将继承现有管道的ACL。

 

以下,通过制作了一个简单的“ PipeHijack.exe”程序,该程序创建了“\PSEXESVC”管道,该管道具有对“ David Wells”用户的读/写访问权限。

image.png

 

运行后,如果将来在本机上本地或远程执行PsExec,PSEXESVC实例将获得管道的句柄,并可以读取/写入该句柄,从而允许低权限应用程序与此PSEXESVC系统服务通信。

image.png

 

PoC链接:

https://github.com/tenable/poc/blob/master/Microsoft/Sysinternals/PsExecEscalate.cpp

 

0x02 处置建议

目前,Microsoft暂未发布此漏洞的安全更新,但 0patch团队已经发布了此漏洞的微补丁。

下载链接:

https://blog.0patch.com/2021/01/local-privilege-escalation-0day-in.html

 

0x03 参考链接

https://www.bleepingcomputer.com/news/security/windows-psexec-zero-day-vulnerability-gets-a-free-micropatch/

https://medium.com/tenable-techblog/psexec-local-privilege-escalation-2e8069adc9c8

 

0x04 时间线

2020-12-09  David Wells披露漏洞

2021-01-07  0patch团队发布微补丁

2021-01-08  VSRC发布安全通告

 

0x05 附录

 

CVSS评分标准官网:http://www.first.org/cvss/

image.png