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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
vbox-ovf-nat-tftp-prefix — VirtualBox 7.2.20 - 高危 - 本地 - 文件读取 - OVF NAT TFTP 空前缀 | Kitploit
工具/GitHubGitHub/abraxas/vbox-ovf-nat-tftp-prefix
权限提升漏洞分析漏洞利用安全虚拟化论文与研究实验室与实践
GitHubabraxas/vbox-ovf-nat-tftp-prefix

vbox-ovf-nat-tftp-prefix

VirtualBox 7.2.20 - 高危 - 本地 - 文件读取 - OVF NAT TFTP 空前缀

查看仓库
12天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - vbox-ovf-nat-tftp-prefix

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  vbox-ovf-nat-tftp-prefix

vbox-ovf-nat-tftp-prefix

类别: 文件读取 触达: 在 UI:R 导入后为本地(客户机)

Oracle VM VirtualBox OSS 7.2.20 (f2792cf44) - Oracle

vbox:Machine OVF 导入会清理 ExtraData、共享文件夹、NVRAM 路径和串口 RawFile。它从不处理 NAT 的 enable-tftp 或 TFTP 的 @prefix。libslirp 仅在 tftp_prefix 为 NULL 时禁用 TFTP。DrvNAT 的 g_strdup("") 保持非 NULL。客户机以 / 或空前缀发起 RRQ etc/passwd 会变成 /etc/passwd。客户机名称中的 ../ 仍会被拒绝。

导入的 NAT TFTP 在空前缀或 / 前缀下,允许客户机以 VBox UID 身份 RRQ 主机文件。 不是写入。不是主机内核。不是已关闭的 ../ 检查的遗留。

ID暂无 CVE
类别文件读取(客户机 TFTP RRQ 主机路径)
触达在 UI:R 导入 vbox:Machine OVF 后为本地(客户机),随后启动 VM
CWECWE-22,CVE-2022-21394 前缀类问题的遗留
CVSS高:7.7 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N
产品Oracle VM VirtualBox OSS
受影响7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
认证客户机内无需认证;主机用户必须导入后启动
许可证GNU Affero GPL v3.0
实验环境源码测试框架;回环 compose;未启动 VirtualBox

攻击者能做什么

提供一个 vbox:Machine OVF/OVA,其 NAT blob 包含 enable-tftp 且 TFTP 前缀为 / 或空,外加一个会向 NAT 网关(10.0.2.2:69)发起 TFTP RRQ 的客户机磁盘。主机用户导入(File / Import 或 VBoxManage import)并启动 VM。导入会清除 ExtraData、共享文件夹、串口 RawFile 和 NVRAM 路径。TFTP 字段得以保留。启动时,ConsoleImplConfigCommon 插入 EnableTFTP。空前缀会从 CFGM 中省略;随后 DrvNAT 将 TFTPPrefix 默认为 "" 并对其执行 g_strdup。libslirp 将其视为已启用。

这就是完整的权限集合。此处不涉及主机写入、VM 进程堆原语或内核逃逸。

侦察(客户机 TFTP RRQ)

方法汇聚点权限
以导入的前缀 "" 对 oracle/VBOX-OVF-NAT-TFTP-PREFIX-WITNESS 发起 TFTP RRQlibslirp tftp_handle_rrq,随后对前缀 + / + 客户机名称执行 RTFileOpen实验证明。 空前缀保持非 NULL。构建的路径为 /oracle/VBOX-OVF-NAT-TFTP-PREFIX-WITNESS。只读打开返回了见证字节。
以导入的前缀 / 对同一名称发起 TFTP RRQ同上实验证明。 构建的路径为 //oracle/...,在 POSIX 下等同于 /oracle/...。返回了见证字节。
客户机以空前缀 RRQ etc/passwd 的纯路径类比"" + "/" + "etc/passwd"实验证明的路径构建。 结果为 /etc/passwd。实验环境不会打开主机 /etc。
对 VBox UID 可打开的任何相对名称发起 TFTP RRQ(主目录密钥、VirtualBox.xml、主机 /etc、Windows 当前驱动器根目录)同一 RTFileOpen推断。 相同的拼接方式。进程无法打开的文件保持关闭(File not found)。

完整性与可用性

方法权限
TFTP WRQ已关闭。 此 TFTP 服务器仅支持 RRQ。无写入处理程序。
主机文件覆盖 / 创建已关闭。 只读 RTFILE_O_READ。
VM 进程堆、VBoxSVC、其他 VM、主机内核已关闭。 此遗留问题是对构建路径的文件打开。
TFTP DoS超出范围。

此遗留问题不授予什么

  • 默认新建虚拟机:Main 将 fEnableTFTP 写为 false(Settings.cpp NATEngine 构造函数)。
  • NAT 网络:当 home 存在时,VBoxNetSlirpNAT 总是将 tftp_path 设置为 <VirtualBox home>/TFTP。RRQ 请求保持在该前缀之下。
  • 不含 vbox:Machine blob 的通用 OVF 不会复制这对 NAT TFTP 配置。
  • 客户机文件名 ../ 和末尾的 / 仍会触发“访问违规”。这是已关闭的 CVE-2022-21394 路径遍历。
  • 在非空前缀下的预期 PXE 仍被限制在范围内(实验环境中为 /work/tftp/boot.pxe)。
  • NULL 前缀会禁用 TFTP。不会开放。
  • 共享文件夹、ExtraData、串口 RawFile 和 NVRAM dest 在此导入路径上仍会被清理。
  • 无 3D、无 Guest Additions、无 VRDP、非 PUEL。

导入此设备并启动虚拟机的真实主机会让客户机读取 VBox UID 能够打开的任何路径。该实验环境是此路径遍历的源码测试框架。VirtualBox 并未启动。

我是如何发现的

我固定了 VirtualBox/virtualbox v7.2.20(f2792cf44)。NAT 加 OVF 排查。7.2 将 NAT 切换为捆绑的 libslirp 4.9.3。从 .ova 中遵循共享文件夹已被视为危险并予以剥离。TFTP 不在该列表中。

Settings.cpp 在导入 vbox:Machine 时仍会读取 NAT 的 enable-tftp 和 TFTP/@prefix:

elmMode.getAttributeValue("enable-tftp", nic.nat.fEnableTFTP);
// ...
pelmTFTP->getAttributeValue("prefix", nic.nat.strTFTPPrefix);

ApplianceImplImport.cpp:6147 对它们记得的所有内容进行了清理:

config.sanitizeImportedSerialPorts();
config.sanitizeSharedFolderSettings();
config.sanitizeImportedNvramSettings();
if (!m->optListImport.contains(ImportOptions_KeepExtraData))
    config.sanitizeImportedExtraData();

这四个代码块从未提及 strTFTPPrefix 或 fEnableTFTP。

启动时,ConsoleImplConfigCommon.cpp:2286-2292 仅在 TFTPPrefix 非空时插入它,并且始终插入 EnableTFTP。DrvNAT.cpp:1656-1665 对于省略该键的旧虚拟机将 EnableTFTP 默认为 true,然后:

rc = pDrvIns->pHlpR3->pfnCFGMQueryStringAllocDef(pCfg, "TFTPPrefix", &pszTmp, "");
slirpCfg.tftp_path = pszTmp;

slirp.c:698 是 g_strdup。空值保持非 NULL。tftp.c:353-357 仅在 NULL 时禁用。364-370 会前置前缀、/、客户机名称。398-407 拒绝 ../。然后对构建出的路径执行 RTFileOpen。

已记录的误区:将客户机 ../ 视为遗留问题(CVE-2022-21394,仍被拒绝);将默认新虚拟机视为受影响;将 NAT Network 的 home/TFTP 视为该遗留问题;声称存在 WRQ 写入;声称涉及宿主内核。表演性操作:打开宿主 /etc/passwd。判定依据是 /oracle 下的见证文件。

实验环境

python3 vbox-ovf-nat-tftp-prefix-Abraxas-Labs.py

或

cd lab
./run.sh

pin 消毒器的源 harness、DrvNAT 空字符串默认值、g_strdup 以及 libslirp 的 tftp_handle_rrq。Docker compose 项目 vbox-ovf-nat-tftp-prefix。仅回环。VirtualBox 未启动。见证文件 VBOX-OVF-NAT-TFTP-PREFIX-WITNESS 被放置在 /oracle/...。控制 PXE 文件为 /work/tftp/boot.pxe。最后一行:

SUCCESS vbox-ovf-nat-tftp-prefix sanitize-miss=yes null-disable=yes empty-prefix-read=yes slash-prefix-read=yes dotdot-reject=yes VBOX-OVF-NAT-TFTP-PREFIX-WITNESS

修复方案

在导入 vbox:Machine 时,像清除 ExtraData 和共享文件夹那样,对 nat.fEnableTFTP 和 nat.strTFTPPrefix 进行净化处理。除非前缀是一个受限目录,否则按失败关闭处理。将空字符串视为 NULL,以便 libslirp 禁用 TFTP。不要将 g_strdup("") 写入 tftp_prefix。

参考资料

  • github.com/VirtualBox/virtualbox 标签 v7.2.20(f2792cf44f663989818507e36d3db5f978523c5e)
  • Settings.cpp NAT TFTP 读取(4873、4888-4894)和导入净化器(9654-9682)
  • ApplianceImplImport.cpp i_importVBoxMachine(6147-6151)
  • ConsoleImplConfigCommon.cpp(2286-2292)
  • DrvNAT.cpp(1656-1665)
  • slirp.c g_strdup(698)
  • tftp.c(353-407)
  • CVE-2022-21394 修复了客户机 TFTP 名称中的 ../;此遗留问题即 OVF 植入的前缀

联系方式

Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]

下载工具