打印机漏洞权限提升-CVE-2022-21999
## 工具
https://github.com/ly4k/SpoolFool
## 背景
早在 2020 年 5 月,微软就修复了一个编号为 CVE-2020–1048的 Windows Print Spooler 权限提升漏洞。在修补漏洞 CVE-2020–1048 后,Print Spooler 现在将在添加端口之前检查用户是否有权限创建或写入文件。补丁和博文发布一周后,Paolo Stagno(又名 VoidSec)私下向微软披露了CVE-2020–1048 的绕过方法(见链接👉https://voidsec.com/cve-2020-1337-printdemon-is-dead-long-live-printdemon/),该绕过在三个月后的 2020 年 8 月得到修补,此次绕过被确定为 CVE-2020-1337,该漏洞的绕过使用目录连接(符号链接)来规避安全检查。假设用户创建了目录`C:\MyFolder\`并配置了一个打印机端口以指向该文件`C:\MyFolder\Port`。该操作将被授予,因为确实允许用户创建`C:\MyFolder\Port`. 现在,如果用户随后变成`C:\MyFolder\`指向`C:\Windows\System32\`创建端口之后的目录连接会发生什么?那就是Spooler 会简单地写入文件`C:\Windows\System32\Port`。
这两个漏洞 CVE-2020-1048 和 CVE-2020-1337 分别于 2020 年 5 月和 2020 年 8 月修补。2020 年 9 月,Microsoft 修补了 Print Spooler 中的另一个漏洞。简而言之,该漏洞允许用户通过`SpoolDirectory`在打印机上配置属性来创建任意且可写的目录。在补丁之后,Print Spooler 现在会在设置打印机属性之前检查用户是否有权创建目录。
## 漏洞复现
1、创建一个临时目录用于我们的假脱机目录,这个时候打印程序会判断我们是否有权限,因为是临时目录,所以肯定有权限
我们创建了一个SpoolDirectory目录为C:\Users\Administrator\AppData\Local\Temp\666
2、创建一个新的本地打印机,这里我们是Microsoft XPS Document Writer v4这个本地打印机
控制面板---硬件和声音---设备和打印机---添加打印机---选择我所需的打印机未列出来---选择通过手动设置添加本地打印机或网络打印机---使用现有的端口---随便选择一个打印机,我这里选的是Microsoft XPS Document Writer v4---下一步下一步即可。
3、将新打印机的假脱机目录即修改打印机的SpoolDirectory为 C:\Windows\system32\spool\DRIVERS\x64\目录
按Windows-R,键入regedit并按Enter键加载Windows注册表编辑器。请注意,您可能会根据操作系统和安全策略获得UAC提示。
导航到密钥HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Print \ Printers,并将密钥DefaultSpoolDirectory的值从C: \ Windows \ system32 \ spool \ printers更改为您选择的另一个目录。
4、随后AppVTerminator.dll通过加载到spooler中强制spooler重新启动以创建目录
首先运行net user admin发现没有admin用户
随后运行dll文件强制spooler重启
6、这时候再次运行net user admin发现成功创建该用户
## 原理
1、普通用户有权限去添加打印机,当添加打印机的时候,SpoolDirectory可用来定义打印机的假脱机目录。
2、当我们创建一个SpoolDirectory目录的时候,打印程序会判断当前用户是否有权限。
3、随后我们修改打印机的SpoolDirectory目录为C:\Windows\system32\spool\DRIVERS\x64\,这是一个很有意思的目录,它也称为打印机驱动程序目录,因为如果我们`SetPrinterDataEx`使用`CopyFiles`注册表项调用,假脱机程序将自动加载`Module`值中分配的 DLL。
4、再当打印机重启的时候,就会新建一个任意用户都有权限的目录C:\Windows\system32\spool\DRIVERS\x64\4(驱动目录),此时我们可以将我们的恶意dll防止到打印机此驱动目录下,当打印机再次重启的时候,就会用高权限来执行我们的恶意dll,从而造成权限提升。
5、最后我们查看我们新建的打印机的SpoolDirectory值发现是工具默认的恶意值。
## 参考链接
https://research.ifcr.dk/spoolfool-windows-print-spooler-privilege-escalation-cve-2022-22718-bf7752b68d81?gif=true