7.16 版本之前的 Oracle VirtualBox 容易受到通过符号链接的影响,导致任意文件删除和任意文件移动。当我们可以进行任意文件删除和任意文件移动时,我们就可以利用windows的机制使用该漏洞进行提权。本篇为CVE-2024-21111 本地提权漏洞的漏洞分析。
前言
本篇为CVE-2024-21111 windows本地提权漏洞的漏洞分析。文中涉及到的技术细节如有不理解的地方请移步上篇:windows符号链接技术详解。
相关信息
环境搭建
虚拟机:宿主机VMvare
安装软件:VitualBox-7.0.14
VirtualBox下载地址:
https://www.virtualbox.org/wiki/Download_Old_Builds_7_0
扩展包:
功能增强:
https://download.virtualbox.org/virtualbox/7.0.14/
漏洞分析
任意文件删除
逻辑分析
7.0.16 版本之前的 Oracle VirtualBox 容易受到通过符号链接的影响,导致任意文件删除和任意文件移动。当我们可以进行任意文件删除和任意文件移动时,我们就可以利用windows的机制使用该漏洞进行提权:
VirtualBox在服务开启时会将日志文件以高权限NT AUTHORITY\SYSTEM生成至C:\ProgramData\VirtualBox目录中,但是多次重启服务最多也只会生成10个日志文件来对当前程序开启状态进行备份。除此之外,VirtualBox 在启动时还会尝试删除第11个日志,在删除时使用的是NT AUTHORITY\SYSTEM权限进行的删除,从而导致了本地提权。
接着我们测试一下poc(记得给VMware打快照,因为在测试后会破坏原有的符号链接权限):https://github.com/mansk1es/CVE-2024-21111
编译后有两个可执行文件,想直接使用的师傅可以去我的仓库下载releases:
https://github.com/10cks/CVE-2024-21111
在我们安装完virtualbox后,宿主机会开启VboxSDS服务(CTRL+R输入Services.msc):
C:\Users\root>sc qc VboxSDS
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: VboxSDS
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 3 DEMAND_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : “D:\Program Files\Oracle\VirtualBox\VBoxSDS.exe”
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : VirtualBox system service
DEPENDENCIES : RPCSS
SERVICE_START_NAME : LocalSystem
这个服务是用来记录操作日志的,日志路径为:C:\ProgramData\VirtualBox\:
对该目录进行分析,查看其ACL(使用 cacls.exe)
(base) PS C:\ProgramData> cacls.exe C:\ProgramData\VirtualBox
C:\ProgramData\VirtualBox NT AUTHORITY\SYSTEM:(OI)(CI)(ID)F
BUILTIN\Administrators:(OI)(CI)(ID)F
CREATOR OWNER:(OI)(CI)(IO)(ID)F
BUILTIN\Users:(OI)(CI)(ID)R
BUILTIN\Users:(CI)(ID)(special access:)
FILE_WRITE_DATA
FILE_APPEND_DATA
FILE_WRITE_EA
FILE_WRITE_ATTRIBUTES
让我们逐项解析这些权限:
NT AUTHORITY\SYSTEM:(OI)(CI)(ID)F
NT AUTHORITY\SYSTEM:这是系统账户,通常具有对系统上几乎所有资源的完全访问权限。
(OI)(CI)(ID)F:
F 表示完全控制权限。
OI(对象继承)表示赋予的权限会应用到此目录中的所有文件。
CI(容器继承)表示赋予的权限会应用到此目录中的所有子目录。
ID 表示这些权限是从父对象继承而来。
BUILTIN\Administrators:(OI)(CI)(ID)F
BUILTIN\Administrators:这是管理员组,通常也拥有对系统资源的完全控制权限。
(OI)(CI)(ID)F 同上,表示完全控制,且继承性与系统账户相同。
CREATOR OWNER:(OI)(CI)(IO)(ID)F
CREATOR OWNER:指创建文件或目录的用户。
(OI)(CI)(IO)(ID)F:
IO(继承仅)表示这些权限仅应用于由该用户创建的对象。
其他标志与前述相同,表示完全控制。
BUILTIN\Users:(OI)(CI)(ID)R
BUILTIN\Users:这是普通用户组。
(OI)(CI)(ID)R:
R 表示只读权限。
OI 和 CI 表示这些只读权限同样应用于目录中的所有文件和子目录。
BUILTIN\Users:(CI)(ID)(special access:)
(CI)(ID)(special access:)
FILE_WRITE_DATA(写入文件数据)
FILE_APPEND_DATA(添加数据)
FILE_WRITE_EA(写入扩展属性)
FILE_WRITE_ATTRIBUTES(写入属性)
这表示虽然普通用户的基本权限是只读的,但他们还被特别允许进行特定的写操作,如修改文件数据和属性。
可以看到这个目录继承了来自 C:\ProgramData 的权限,允许用户创建新的文件和文件夹。
漏洞就在于VBoxSDS驱动的"开启"这个操作对创建新的文件和文件夹的影响:
我们使用Process Monitor 监控一下驱动开启时系统发生了什么
新建ProcessName过滤:
关闭当前VboxSDS驱动:
重新启动VboxSDS驱动驱动并查看Process Monitor: