CVE-2023-4632:联想系统更新程序本地权限提升漏洞深度解析

本文详细分析了联想系统更新程序(版本<=5.08.01.0009)中的本地权限提升漏洞(CVE-2023-4632),攻击者可通过任意文件写入实现NT AUTHORITY\SYSTEM权限获取,涵盖漏洞原理、利用步骤及修复方案。

CVE-2023-4632:联想系统更新程序本地权限提升漏洞

版本: 联想更新程序版本 <= 5.08.01.0009
测试操作系统: Windows 10 22H2 (x64)
漏洞类型: 通过任意文件写入实现联想系统更新程序本地权限提升
安全公告: https://support.lenovo.com/us/en/product_security/LEN-135367

漏洞概述

联想系统更新应用程序设计允许非管理员用户检查并应用工作站更新。在检查更新过程中,高权限的联想更新应用程序尝试使用C:\SSClientCommon\HelloLevel_9_58_00.xml,但该文件在文件系统中不存在。由于任何低权限用户均可在C盘根目录创建目录,攻击者可向高权限的联想系统更新程序提供特制的HelloLevel_9_58_00.xml文件(位于C:\SSClientCommon)。该自定义XML文件包含源和目标文件路径,联想系统更新程序在用户检查更新时解析此文件。解析后,高权限的联想系统更新程序将源文件移动到目标位置,从而实现任意文件写入原语,最终导致权限提升至NT AUTHORITY\SYSTEM。

漏洞利用过程

当用户通过联想系统更新应用程序检查更新时,Tvsukernel.exe以用户Lenovo_tmp_<随机字符>在高完整性上下文中启动。执行后,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:\SSClientCommon\UTS,该目录将包含攻击者的恶意二进制文件。攻击的目录结构类似图03:

图03: 最终文件夹和文件结构

由于HelloLevel_9_58_00.xml位于攻击者可控制的位置,攻击者可制作自定义XML文件,允许将文件从一个位置移动到另一个位置。这是因为自定义XML定义了“execute”操作,提供“Source”和“Destination”路径。“SourcePath”元素定义了位于C:\SSClientCommon\UTS中的可移植可执行(PE)文件(本例中为C:\SSClientCommon\UTS\poc2.exe)。“DestinationPath”节点定义了源文件要复制到的目标位置,如图04所示:

图04 – 自定义XML源和目标路径

联想系统更新应用程序启动并检查更新后,高权限进程(即Tvsukernel.exe)检查C:\SSClientCommon\HelloLevel_9_58_00.xml是否存在。由于路径已创建且自定义XML文件已放置,Tvsukernel.exe将自定义HelloLevel_9_58_00.xml文件移动到C:\ProgramData\Lenovo\SystemUpdate\sessionSE\system\SSClientCommon\HelloLevel_9_58_00.xml,如图05所示:

图05: 将自定义XML写入ProgramData

移动XML文件后,Tvsukernel.exe调用Client.dll中的ParseUDF()函数来解析位于C:\ProgramData\Lenovo\SystemUpdate\sessionSE\system\SSClientCommon\HelloLevel_9_58_00.xml的XML文件。当Tvsukernel.exe解析XML时,它会将XML中包含的DestinationPath前添加C:\ProgramData\Lenovo\SystemUpdate\sessionSE\,如图06所示:

图06: ParseUDF()中的XML解析

在攻击者控制的自定义XML文件中,可利用目录遍历突破替换后的C:\ProgramData\Lenovo\SystemUpdate\sessionSE\ DestinationPath值。攻击者可利用此功能选择操作系统上的任何位置,从而实现任意文件写入原语。本例中,使用目录遍历将DestinationPath值设置为C:\Program Files (x86)\Lenovo\System Update\SUService.exe,如图07所示。这是因为联想更新程序每次启动时都会尝试以NT AUTHORITY\SYSTEM身份启动此应用程序。

图07: 自定义XML中的目录遍历

创建自定义XML并放置在C:\SSClientCommon\HelloLevel_9_58_00.xml,且将恶意二进制文件放置在C:\SSClientCommon\UTS\poc2.exe后,攻击者只需打开联想系统更新应用程序并检查更新。执行后,Tvsukernel.exe将恶意的C:\SSClientCommon\HelloLevel_9_58_00.xml移动到C:\ProgramData\Lenovo\SystemUpdate\sessionSE\system\SSClientCommon\HelloLevel_9_58_00.xml,解析它,然后将C:\SSClientCommon\UTS\poc2.exe移动到C:\Program Files (x86)\Lenovo\System Update\SUService.exe;覆盖SUService.exe二进制文件,如图08所示:

图08: 覆盖联想SUService.exe服务二进制文件

联想的SUService.exe二进制文件被自定义应用程序覆盖后,攻击者可关闭并重新打开联想系统更新应用程序,这将导致攻击者的应用程序以NT AUTHORITY\SYSTEM身份执行。本例中,poc2.exe获取当前执行用户的用户名并将其写入C:\Windows\POCOutput.txt,如图09所示:

图09: 以NT AUTHORITY\SYSTEM身份执行代码

此漏洞已在最新版本的联想系统更新程序中修复。
联想的安全公告可在此处找到:https://support.lenovo.com/us/en/product_security/LEN-135367

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计