版本:Lenovo 更新程序版本 <= 5.08.01.0009
测试操作系统:Windows 10 22H2 (x64)
漏洞:Lenovo System Updater 通过任意文件写入进行本地权限提升
漏洞概述
Lenovo System Update 应用程序旨在允许非管理员检查更新并将其应用到其工作站。在检查更新的过程中,特权 Lenovo Update 应用程序会尝试利用文件系统上不存在的C:SSClientCommonHelloLevel_9_58_00.xml 。由于任何低权限用户都可以在C:驱动器的根目录中创建目录,因此可以向特权 Lenovo System Update 应用程序提供特制的HelloLevel_9_58_00.xml文件,该文件位于C:SSClientCommon。此自定义 XML 文件包含源文件路径和目标文件路径,Lenovo System Update 应用程序在用户检查更新时解析该路径。解析后,特权 Lenovo System Update 应用程序会将源文件移动到目标位置,并允许任意文件写入原语,从而导致特权提升到NT AUTHORITYSYSTEM。
漏洞演练
当用户通过 Lenovo System Update 应用程序检查 Lenovo 更新时,Tvsukernel.exe将以用户Lenovo_tmp_<randomCharacters>在特权、高完整性上下文中启动。执行后,Tvsukernel.exe会检查C:SSClientCommon中的HelloLevel_9_58_00.xml,如下图 01 所示。
图 01 – 缺少目录和 XML 文件
默认情况下,所有版本的 Windows 都允许低权限用户在C:驱动器的根目录中创建目录。攻击者可以手动创建目录C:SSClientCommon,然后将HelloLevel_9_58_00.xml放入其中,如下图 02 所示。
图 02 — C: 驱动器根目录中的目录和 XML 创建
创建C:SSClientCommon后,攻击者可以创建所需的子目录C:SSClientCommonUTS,其中将包含攻击者的恶意二进制文件。攻击的目录结构类似于下面的图 03:
图 03:最终文件夹和文件结构
由于HelloLevel_9_58_00.xml驻留在攻击者可以控制的位置,因此可以制作一个自定义 XML 文件,允许攻击者将文件从一个位置移动到另一个位置。这是可能的,因为自定义 XML 定义了“执行”操作,提供了“源”和“目标”路径。“SourcePath”元素定义位于C:SSClientCommonUTS中的可移植可执行 (PE) 文件- 在本例中为C:SSClientCommonUTSpoc2.exe。
“DestinationPath”节点定义了源文件要复制到的位置,如下图 04 所示:
图 04 – 自定义 XML 源和目标路径
Lenovo System Update 应用程序启动并检查更新后,特权进程(即Tvsukernel.exe)将检查C:SSClientCommonHelloLevel_9_58_00.xml是否存在。由于已创建路径并植入自定义 XML 文件,Tvsukernel.exe会将自定义HelloLevel_9_58_00.xml文件移动到C:ProgramDataLenovoSystemUpdatesessionSEsystemSSClientCommonHelloLevel_9_58_00.xml,如图 05 所示:
图 05:将自定义 XML 写入 ProgramData
移动 XML 文件后,Tvsukernel.exe会调用Client.dll中的 ParseUDF() 函数,以解析位于C:ProgramDataLenovoSystemUpdatesessionSEsystemSSClientCommonHelloLevel_9_58_00.xml中的 XML 文件。当Tvsukernel.exe解析 XML 时,它会在 XML 中包含的 DestinationPath 前面添加C:ProgramDataLenovoSystemUpdatesessionSE,如图 06 所示:
图 06:ParseUDF() 中的 XML 解析
在攻击者控制的自定义 XML 文件中,可以使用目录遍历来突破替换的C:ProgramDataLenovoSystemUpdatesessionSE DestinationPath 值。攻击者可以利用它来选择操作系统上的任何位置,从而导致任意文件写入原语。在本例中,使用目录遍历将 DestinationPath 值设置为C:Program Files (x86)LenovoSystem UpdateSUService.exe,如图 07 所示。这是因为 Lenovo Updater 尝试每次启动 Lenovo System Updater 时,以NT AUTHORITYSYSTEM 身份启动此应用程序。
图 07:自定义 XML 中的目录遍历
创建自定义 XML 并将其放置在C:SSClientCommonHelloLevel_9_58_00.xml中,并将恶意二进制文件放置在C:SSClientCommonUTSpoc2.exe中,攻击者只需打开 Lenovo System Update 应用程序并检查更新即可。执行后,Tvsukernel.exe会将恶意C:SSClientCommonHelloLevel_9_58_00.xml移动到C:ProgramDataLenovoSystemUpdatesessionSEsystemSSClientCommonHelloLevel_9_58_00.xml,解析它,然后移动C:SSClientCommonUTS poc2.exe到C:Program Files (x86)LenovoSystem UpdateSUService.exe;覆盖SUService.exe二进制文件,如下图 08 所示:
图 08:覆盖 Lenovo SUService.exe 服务二进制文件
通过使用自定义应用程序覆盖 Lenovo 的SUService.exe二进制文件,攻击者可以关闭并重新打开 Lenovo System Update 应用程序,这将导致攻击者的应用程序以NT AUTHORITYSYSTEM 身份执行。在本例中,poc2.exe获取当前执行用户的用户名并将其写入C:WindowsPOCOutput.txt,如图 09 所示:
图 09:以 NT AUTHORITYSYSTEM 身份执行代码
该漏洞已在最新版本的 Lenovo System Updater 应用程序中修复。
感谢您抽出
.
.
来阅读本文
点它,分享点赞在看都在这里
原文始发于微信公众号(Ots安全):CVE-2023-4632:LENOVO SYSTEM UPDATER 中的本地权限提升