CVE-2024-26238 Windows PLUGScheduler 提权漏洞分析

描述

RUXIM(可重用UX集成管理器)是Windows 10上Windows Update使用的组件。PLUGScheduler是RUXIM的一部分,是一个计划任务,位于 MicrosoftWindowsWindowsUpdateRUXIM 目录中,并且以SYSTEM权限运行。

问题

PLUGScheduler.exe二进制文件执行文件操作,如删除和重命名,以SYSTEM权限,在标准用户具有部分控制权的目录中。这导致以SYSTEM权限进行任意文件写入。

时间线

  • 2024.01.22 发送咨询至MSRC
  • 2024.02.01 MSRC确认漏洞
  • 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)

执行一次PLUGScheduler后,目录将看起来像:

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计划任务在每次登录时触发,并且每天在固定时间触发一次。因此,标准用户可以通过重新登录来触发它。利用策略如下:

  1. 作为当前用户设置一个计划任务,在每次登录时触发。此任务将尝试在 C:ProgramDataPLUGLogs 中创建 RUXIMLog.001.etl 目录。重新登录,直到竞态条件成功并且目录被创建(通常需要几次尝试)。
  2. 创建目录后,重新登录,直到 C:ProgramDataPLUGLogs 中只剩下一个条目:RUXIMLog.001.etl 目录。
  3. 移除 RUXIMLog.001.etl 目录。
  4. 设置 C:ProgramDataPLUGLogs -> RPC Control 联接点。
  5. 设置对象管理器符号链接 RPC ControlRUXIMLog.049.etl -> C:pathtoattackercontrolledfile
  6. 设置对象管理器符号链接 RPC ControlRUXIMLog.050.etl -> C:eop.txt
  7. 重新登录:攻击者控制的文件被移动到 C:eop.txt

这个漏洞是任意文件写入。它可以用来通过在 C:WindowsSystem32SprintCSP.dll 写入DLL文件并触发 StorSvc 服务的 SvcRebootToFlashingMode 方法(如https://github.com/blackarrowsec/redteam-research/tree/master/LPE%20via…)来执行代码作为SYSTEM。请注意,这只是如何利用文件写入漏洞来实现权限提升的一个示例,还有许多其他方法可以做到这一点。

C:ProgramDataPLUG 目录及其子对象定义更严格的ACL。只有特权用户才能在其中写入。


原文始发于微信公众号(3072):CVE-2024-26238 Windows PLUGScheduler 提权漏洞分析

版权声明:admin 发表于 2024年6月3日 下午2:06。
转载请注明:CVE-2024-26238 Windows PLUGScheduler 提权漏洞分析 | CTF导航

相关文章