Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
vbox-ovf-href-dest-escape — VirtualBox 7.2.20 - 高危 - 本地 - 文件写入 - OVF href 目标逃逸 | Kitploit
工具/GitHubGitHub/abraxas/vbox-ovf-href-dest-escape
权限提升漏洞分析代码分析漏洞利用安全虚拟化论文与研究实验室与实践
GitHubabraxas/vbox-ovf-href-dest-escape

vbox-ovf-href-dest-escape

VirtualBox 7.2.20 - 高危 - 本地 - 文件写入 - OVF href 目标逃逸

查看仓库
22天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - vbox-ovf-href-dest-escape

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  vbox-ovf-href-dest-escape

vbox-ovf-href-dest-escape

类别: 文件写入 触达范围: 本地(主机)UI:R

Oracle VM VirtualBox OSS 7.2.20 (f2792cf44) - Oracle

导入恶意 OVF/OVA 的主机用户会将磁盘镜像字节写入新 VM 文件夹之外。ovf:href 即目标文件名。RTPathAbsExCxx 未采用 RTPATHABS_F_STOP_AT_BASE。唯一路径辅助函数在后缀前插入 _%i,且不剥离基名。

ID暂无 CVE
类别文件写入(OVF/OVA 目标路径)
触达范围本地(主机) UI:R(受害者导入恶意设备)
CWECWE-22
CVSS高危:7.8 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N
产品Oracle VM VirtualBox OSS
受影响版本7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
认证VirtualBox 上无需认证。主机用户打开 文件/导入 或执行 VBoxManage import。
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1。源码测试框架。VirtualBox 未启动。

攻击者可执行的操作

投递一个 OVF 目录或 OVA。在 ovf:href 中放入 ../somewhere/disk.vmdk 或绝对路径 /path/disk.iso。导入该设备的操作者会以导入者 UID 通过 CREATE_REPLACE 写入这些磁盘镜像字节,包括原本不存在的父目录。需要后缀(vmdk / iso / 其他 MediumFormat 扩展名)。这不是无后缀投放 authorized_keys。

权限方法 + 汇聚点授予的能力来源
完整性IAppliance::read 复制 File/href 时不剥离基名(ovfreader.cpp)。Appliance::interpret() 设置 dest = di.strHref(ApplianceImplImport.cpp 802-851)。目标文件名由攻击者选择,包括 ../ 和绝对路径。实验验证(相对和绝对 href)
完整性i_ensureUniqueImageFilePath(ApplianceImpl.cpp 1126-1160)调用 RTPathAbsExCxx(strAbsName, aMachineFolder, aName) 时未使用 RTPATHABS_F_STOP_AT_BASE。冲突时在 aName 的后缀前插入 _%i,而非基名。唯一目标仍会走出机器文件夹。../oracle/WITNESS.vmdk 变为 ../oracle/WITNESS_1.vmdk。实验验证(unique-keeps-dotdot=yes)
完整性导入时 i_importOneDiskImage 再次调用 AbsEx(ApplianceImplImport.cpp 4169-4171)。i_importCreateAndWriteDestinationFile(1043-1053)先 mkdir 父目录,再 RTFILE_O_CREATE_REPLACE。磁盘镜像字节落在 VM 文件夹之外。绝对 href 忽略机器文件夹。对照 disk.vmdk 留在文件夹内。实验验证(relative-escape=yes absolute-href=yes control-in-folder=yes)
侦察导入向导 / VBoxManage import --dry-run 显示目标路径。路径可见。本身不构成秘密泄露。推断
可用性相对目标落在另一 VM 的磁盘上。以导入者 UID 覆盖该文件。推断(相同的 CREATE_REPLACE 写入)
已关闭无 MediumFormat 后缀的目标导入抛出 has no extension。不是无后缀写入 authorized_keys / crontab。已关闭
已关闭NVRAM 目标强制为机器文件夹下的 {vmname}.nvram。已关闭
已关闭VM 名称 ..sanitiseMachineFilename 会对其进行处理。已关闭
已关闭共享文件夹 / ExtraData / 串口 RawFile在 vbox:Machine 路径上已净化。已关闭
已关闭主机内核、客户机到主机不是此遗留问题。无需启动 VM。与导入者相同 UID。已关闭

OVA 是干净的路径:tar 成员提供字节,href 提供转义后的目标路径。没有 3D,没有 Guest Additions,没有 VRDP,也不是 PUEL。

我是如何发现的

在 2026 年 9 月的 CPU 之后,我停留在标签 v7.2.20(f2792cf44)上,并阅读了 OVF 导入相关代码。ExtraData、共享文件夹、NVRAM 目标路径和串口 RawFile 都已被剥离。但磁盘目标路径没有。interpret() 将 di.strHref 直接复制到 HardDiskImage 的 VBox 值中:

Utf8Str strFilename = di.strHref;
/* ... */
i_ensureUniqueImageFilePath(strMachineFolder, devType, strFilename);
pNewDesc->i_addEntry(VirtualSystemDescriptionType_HardDiskImage,
                     hd.strDiskId,
                     di.strHref,
                     strFilename,
                     di.ulSuggestedSizeMB,
                     strExtraConfig);

ApplianceImpl.cpp 1126-1160 在没有 RTPATHABS_F_STOP_AT_BASE 的情况下,将该名称与机器文件夹进行拼接补全,然后就地修改 aName:

int vrc = RTPathAbsExCxx(strAbsName, aMachineFolder, aName);
/* ... */
const char *pszSuffix = RTPathSuffix(aName.c_str());
offDashNum = pszSuffix ? (size_t)(pszSuffix - aName.c_str()) : aName.length();
aName.replace(offDashNum, cchDashNum, szTmp, cchTmp);

Import 会在仍为相对路径的 dest 上重复执行 AbsEx(ApplianceImplImport.cpp 4169-4171)并进行 CREATE_REPLACE 写入。IPRT 测试记录了相同的拼接行为:绝对路径的第二个参数优先;/VirtualBox/Machines 加上 ../VirtualBox.xml 得到 /VirtualBox/VirtualBox.xml。

已记录的弯路:将无后缀的 authorized_keys 写入视为遗留问题(import 会抛出异常);NVRAM dest(强制在文件夹内);VM 名称 ..(经净化器处理);共享文件夹 / ExtraData / 串口 RawFile(已净化)。干扰项:宿主内核、guest 到 host。判定依据是机器文件夹之外的一条见证行,以及一个保持原位的对照 disk.vmdk。

实验环境

python3 vbox-ovf-href-dest-escape-Abraxas-Labs.py

或

cd lab
./run.sh

解释 dest-join、unique-path 的源 harness,以及 import CREATE_REPLACE 写入。Docker compose、loopback,无 VirtualBox 二进制文件。机器文件夹 /work/Machines/ImportedVM。Oracle /work/oracle。

SUCCESS vbox-ovf-href-dest-escape relative-escape=yes unique-keeps-dotdot=yes absolute-href=yes control-in-folder=yes VBOX-OVF-HREF-DEST-ESCAPE-WITNESS

修复方案

在 ovf:href 成为目标路径之前剥离其基名,或传入 RTPATHABS_F_STOP_AT_BASE(并拒绝绝对名称)。拒绝 RTPATH_PROP_DOTDOT_REFS。唯一路径应修改基名,而非相对字符串。

参考资料

  • github.com/VirtualBox/virtualbox 标签 v7.2.20(f2792cf44f663989818507e36d3db5f978523c5e)
  • ApplianceImplImport.cpp 802-851、1043-1053、4169-4171
  • ApplianceImpl.cpp 1126-1160
  • CWE-22

许可证

GNU Affero GPL v3.0。参见 LICENSE。仅限回环实验环境。不提供任何担保。

下载工具