描述
Presentation
RUXIM(可重复使用的 UX 集成管理器)是 Windows 10 上的 Windows 更新使用的组件。PLUGScheduler 是一个计划任务,是 RUXIM 的一部分,位于MicrosoftWindowsWindowsUpdateRUXIM并以 SYSTEM 身份运行。
问题)
该PLUGScheduler.exe二进制文件以 SYSTEM 身份在标准用户具有部分控制权的目录中执行删除和重命名等文件操作。这会导致以 SYSTEM 身份进行任意文件写入。
时间线
-
2024.01.22已向 MSRC 发送通告
-
2024.02.01MSRC 确认该漏洞
-
2024.05.14漏洞编号为 CVE-2024-26238,已在 KB5037768 中修复
-
2024.05.24公开发布
技术细节
描述
触发后,PLUGScheduler 计划任务会以 SYSTEM 身份运行可执行文件。如果文件夹不存在,则C:Program FilesRUXIMPLUGScheduler.exe后者会创建文件夹。之后,它会删除文件并继续重命名所有具有 格式的文件。更具体地说,首先将文件重命名为,然后重命名为,依此类推,直到重命名为。最后,它会在文件中启动事件跟踪会话。C:ProgramDataPLUGLogs
RUXIMLog.050.etl
RUXIMLog.XXX.etl
RUXIMLog.049.etl
RUXIMLog.050.etl
RUXIMLog.048.etl
RUXIMLog.049.etl
RUXIMLog.001.etl
RUXIMLog.002.etl
RUXIMLog.001.etl
该C:ProgramDataPLUGLogs文件夹为标准用户配置了宽松的 ACL。具体来说,内置用户可以:
-
在里面创建文件Logs。
-
在里面创建文件夹Logs。
-
写入Logs文件夹的属性。
写入文件夹属性的能力Logs允许标准用户添加连接点,以便Logs重定向到RPC Control对象目录。之后,可以创建两个对象管理器符号链接:
-
RPC ControlRUXIMLog.049.etl
->C:pathtoattackercontrolledfile
-
RPC ControlRUXIMLog.050.etl
->C:eop.txt
下次PLUGScheduler.exe执行时,RUXIMLog.049.etl文件会被重命名为RUXIMLog.050.etl,由于之前设置的链接,攻击者控制的文件会被移动到C:eop.txt,从而实现以SYSTEM权限写入任意文件。
但是,要将连接点添加到Logs目录,后者必须为空。问题是Logs标准用户无法删除其中的文件(只有 SYSTEM 和管理员才有必要的权限)。在重命名文件之前,PLUGScheduler.exe使用GetFileAttributesW函数检查路径是否对应于文件。如果不是,则不执行任何操作并继续处理下一个文件。因此,如果RUXIMLog.001.etl是目录,则不会将其重命名为RUXIMLog.002.etl。让我们考虑目录的以下内容Logs:
Logs
|__ RUXIMLog.001.etl (directory)
|__ RUXIMLog.002.etl (file)
|__ RUXIMLog.003.etl (file)
Logs
|__ RUXIMLog.001.etl (directory)
|__ RUXIMLog.003.etl (file)
|__ RUXIMLog.004.etl (file)
执行 47 次任务后,目录将如下所示:
Logs
|__ RUXIMLog.001.etl (directory)
|__ RUXIMLog.049.etl (file)
|__ RUXIMLog.050.etl (file)
在下次执行任务时,RUXIMLog.050.etl将删除该文件并将该RUXIMLog.049.etl文件重命名为RUXIMLog.050.etl。因此,通过此行为,可以运行该任务足够多次,以便C:ProgramDataPLUGLogs删除目录中包含的所有文件。
最后剩下的问题是创建RUXIMLog.001.etl目录,因为RUXIMLog.001.etl标准用户无法删除该文件。从文件RUXIMLog.001.etl被删除到将其重新创建为事件跟踪文件之间有一个很短的时间窗口。因此可以在这两个操作之间创建目录。通过以当前用户身份创建一个计划任务,每次登录时都会触发该任务,只需几次尝试即可轻松赢得竞争条件。计划任务将尝试RUXIMLog.001.etl无限循环创建目录,直到成功。我们发现,为了可靠地赢得竞争,程序需要编译为图形 Windows 应用程序而不是控制台应用程序(可能是因为cmd控制台应用程序会显示一个窗口)。
PLUGScheduler 计划任务在每次登录时触发,并且每天在固定时间触发一次。因此,标准用户可以通过注销并再次登录来触发它。因此,利用策略如下:
-
以当前用户身份设置计划任务,每次登录时触发。此任务将尝试RUXIMLog.001.etl在 中创建目录C:ProgramDataPLUGLogs。注销并登录,直到赢得竞争条件并创建目录(通常需要几次尝试)。
-
当目录创建完成后,注销并重新登录,直到目录中只有一个条目
C:ProgramDataPLUGLogs
:RUXIMLog.001.etl
。 -
删除RUXIMLog.001.etl目录。
-
设置
C:ProgramDataPLUGLogs
->RPC Control
连接点。 -
设置对象管理器符号链接
RPC ControlRUXIMLog.049.etl
->C:pathtoattackercontrolledfile
。 -
设置对象管理器符号链接
RPC ControlRUXIMLog.050.etl
->C:eop.txt
。 -
注销并登录:攻击者控制的文件被移至C:eop.txt
影响
C:WindowsSystem32SprintCSP.dll该漏洞为任意文件写入漏洞,通过写入DLL文件触发服务SvcRebootToFlashingMode方法,即可以SYSTEM权限执行代码StorSvc(详情见https://github.com/blackarrowsec/redteam-research/tree/master/LPE%20via%20StorSvc)。注意,这只是利用文件写入漏洞实现提权的一个例子,还有很多其他方法可以实现。
推荐
为目录及其子对象定义更严格的 ACL C:ProgramDataPLUG。只有特权用户才有权写入。
WINDOWS 10 PLUGSCHEDULER 权限提升
https://www.synacktiv.com/advisories/windows-10-plugscheduler-elevation-of-privilege
原文始发于微信公众号(Ots安全):WINDOWS 10 PLUGSCHEDULER 权限提升
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论