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文件。
默认情况下,所有Windows版本都允许低权限用户在C盘根目录创建目录。攻击者可以手动创建C:\SSClientCommon\目录,并在其中放置HelloLevel_9_58_00.xml文件。
创建C:\SSClientCommon后,攻击者可以创建所需的子目录C:\SSClientCommon\UTS,该目录将包含攻击者的恶意二进制文件。
由于HelloLevel_9_58_00.xml位于攻击者可以控制的位置,因此可以制作自定义XML文件,允许攻击者将文件从一个位置移动到另一个位置。这是可能的,因为自定义XML定义了"execute"操作,提供"Source"和"Destination"路径。“SourcePath"元素定义位于C:\SSClientCommon\UTS中的可移植可执行(PE)文件,在本例中为C:\SSClientCommon\UTS\poc2.exe。
“DestinationPath"节点定义了源文件要复制到的目标位置。
联想系统更新应用程序启动并检查更新后,特权进程(即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。
移动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\。
在攻击者控制的自定义XML文件中,可以使用目录遍历来突破替换的C:\ProgramData\Lenovo\SystemUpdate\sessionSE\ DestinationPath值。攻击者可以利用此功能选择操作系统上的任何位置,从而导致任意文件写入原语。在本例中,使用目录遍历将DestinationPath值设置为C:\Program Files (x86)\Lenovo\System Update\SUService.exe。这是因为每次启动联想更新程序时,它都会尝试以NT AUTHORITY\SYSTEM身份启动此应用程序。
创建自定义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二进制文件。
当联想的SUService.exe二进制文件被自定义应用程序覆盖后,攻击者可以关闭并重新打开联想系统更新应用程序,这将导致攻击者的应用程序以NT AUTHORITY\SYSTEM身份执行。在本例中,poc2.exe获取当前执行用户的用户名并将其写入C:\Windows\POCOutput.txt。
此漏洞已在最新版本的联想系统更新程序应用程序中修复。
联想的安全公告可以在此处找到:https://support.lenovo.com/us/en/product_security/LEN-135367