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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
vbox-lsilogic-sas-config — VirtualBox 7.2.20 - 严重 - 本地 - 类型混淆 / 任意读写 - SAS1068 CONFIG SCSI-SPI 覆盖 | Kitploit
工具/GitHubGitHub/abraxas/vbox-lsilogic-sas-config
内存取证漏洞分析漏洞利用逆向工程安全虚拟化论文与研究二进制利用
GitHubabraxas/vbox-lsilogic-sas-config

vbox-lsilogic-sas-config

VirtualBox 7.2.20 - 严重 - 本地 - 类型混淆 / 任意读写 - SAS1068 CONFIG SCSI-SPI 覆盖

查看仓库
113天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - vbox-lsilogic-sas-config

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  vbox-lsilogic-sas-config

vbox-lsilogic-sas-config

类别: 类型混淆 / 任意读写 可达性: 本地(客户机)

Oracle VM VirtualBox OSS 7.2.20(f2792cf44f663989818507e36d3db5f978523c5e)

SAS1068 MPT CONFIG 将 SCSI-SPI Port 0 视为一个 12 字节的页。在 SAS 上,该页是一个联合体的另一半:pManufacturingPage7 加上 cbManufacturingPage7。客户机 CONFIG READ 通过 DMA 泄漏堆指针。CONFIG WRITE 植入指针和大小。随后 manufacturing page 7 通过植入的指针进行复制。

在已挂载的 SAS1068(PDM LsiLogicSas,PCI 1000:0054)上的客户机 ring3 可在 VM 进程中实现任意读/写。 这是 VirtualBoxVM / VBoxHeadless 堆,而非宿主内核逃逸。

ID暂无 CVE
类别类型混淆 / 任意读写
可达性本地(客户机)
CWECWE-843、CWE-822
CVSS严重:8.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
产品VirtualBox OSS
受影响版本7.2.20(f2792cf44)
前提条件已挂载的 SAS1068(PDM LsiLogicSas,PCI 1000:0054)
许可证GNU Affero GPL v3.0
实验环境回环源码测试框架

攻击者能做什么

方法:客户机 ring3 使用 MPT_MESSAGE_HDR_FUNCTION_CONFIG(0x04)、页类型 SCSI-SPI Port 0(0x03)来编程 SAS1068 MMIO doorbell 或请求 FIFO。分发逻辑始终调用 SPI getter。只有 EXTENDED 受 SAS 门控。页属性 getter 被注释掉了,因此 Readonly Port 0 页仍然可写。SPI Port 0 按 12 字节打包,并覆盖 SasPages.pManufacturingPage7(8 字节)加上 cbManufacturingPage7(4 字节)。

权限类型状态授予的能力
CONFIG SCSI-SPI Port 0 READ侦察实验验证将 VM 进程堆指针 pManufacturingPage7 及其大小通过 DMA 写入客户机 RAM。为 ASLR 提供输入。
CONFIG SCSI-SPI Port 0 WRITE完整性实验验证用客户机选择的指针 + 大小覆盖那些 SAS 字段
manufacturing page 7 CONFIG READ完整性实验验证从植入的地址将宿主字节复制到客户机 GPA(VBOX-LSILOGIC-SAS-CONFIG-WITNESS)
manufacturing page 7 CONFIG WRITE完整性由同一 getter 推断将客户机字节复制到植入的地址(VirtualBoxVM 中的任意写)
Port 1 / Device 0 SPI 页侦察 / 完整性推断的覆盖Port 1 泄漏/植入 pSASIOUnitPage0;Device 0 page 0 命中 paPHYs;Device 0 page 1 命中 pSASDeviceHead
任意植入指针可用性推断在下一次 SAS 页访问或 lsilogicR3ConfigurationPagesFree 时使 VM 进程崩溃

已排除的相邻范围:

  • 宿主内核
  • 其他 VM
  • VBoxSVC
  • 默认 Windows 客户机 LSI53C1030 SPI(SpiPages 是真实布局;此类型混淆需要 SAS1068)
  • SPI 控制器上的 SAS EXTENDED 页(VERR_NOT_FOUND)
  • Windows 加固令牌 / AppContainer(这是 VM 进程堆,而非沙箱绕过)

这是 VM 进程任意读写,而非宿主内核逃逸。完整的宿主用户权限仍需一个加固遗留问题。我没有将其与剩余的 3D 写配对:VMSVGA DX11 UAF(d691aa68)在此版本上已修复。

无需 Guest Additions。无需 3D。无需 VRDP。非 PUEL。恶意客户机 ring3 已足够;不需要内置的 mpt/mptsas 驱动。

我是如何发现的

我在 2026 年 9 月的 CPU 之后停留在 OSS 7.2.20 上,并走查了 LsiLogic MPT CONFIG。2026 年那个静默的 reply-stack 泄漏已经被修复:122c6880 在 SCSI I/O 错误时对 MptReplyUnion 执行 RT_ZERO。我当时在寻找这一类问题的残留,而不是那个 sink。

残留是一个 union,而不是栈上的 reply:

union {
    MptConfigurationPagesSpi SpiPages;
    MptConfigurationPagesSas SasPages;
} u;  /* DevLsiLogicSCSI.h:3323 */

SAS alloc 会填充 SasPages 主机指针,并且从不运行 SPI 页初始化。位于 DevLsiLogicSCSI.cpp:2795 的 SPI Port getter 没有 enmCtrlType 检查。CONFIG 分派中的 SPI 分支没有门控。页属性 getter 在 cpp:3159 处被注释掉。位于 cpp:2701 的制造页 7 受 SAS 门控,这是预期路径,并且在没有 NULL 检查的情况下解引用 pManufacturingPage7。这就是 SPI 类型的 Port 0 READ/WRITE 如何变成 SAS 指针泄漏和植入。已记录的误入歧途:重新提交 122c6880;将默认的 LSI53C1030 当作此 bug;将野指针崩溃夸大为宿主内核逃逸;在打包覆盖层已足够时使用实时 VM。作秀:反向 shell。判定标准是 CONTROL 虚拟页数据,然后对 VBOX-LSILOGIC-SAS-CONFIG-WITNESS 进行泄漏/植入/任意读取。

实验环境

cd lab
./run.sh

或运行 python3 vbox-lsilogic-sas-config-Abraxas-Labs.py。pin 结构体的源 harness。VirtualBox 未启动。Compose 项目 vbox-lsilogic-sas-config,network_mode: none。不绑定任何内容。

CONTROL:SPI 类型的 Port 0 overlay-read 是 dummy 页数据,而非 manufacturing-page-7 堆指针。

SAS 混淆:Port 0 READ 泄漏的 pManufacturingPage7 与 calloc 匹配。Port 0 WRITE 植入第二个 witness 缓冲区指针+大小。Manufacturing page 7 getter 加上 CONFIG READ 将 witness 复制到 guest GPA 数组中。

SUCCESS vbox-lsilogic-sas-config leak=yes plant=yes arb-read=yes VBOX-LSILOGIC-SAS-CONFIG-WITNESS

修复方案

基于 enmCtrlType == LSILOGICCTRLTYPE_SCSI_SPI 对 SCSI-SPI 页类型进行门控。恢复页属性检查,使只读端口 0 保持只读。在解引用之前对 pManufacturingPage7(以及其他 SAS 指针)进行 NULL 检查。停止在一个联合体中叠加 SpiPages 和 SasPages。

参考资料

  • github.com/VirtualBox/virtualbox 标签 v7.2.20(f2792cf44f663989818507e36d3db5f978523c5e)
  • DevLsiLogicSCSI.h 第 3323 行的联合体;第 2251 行的 SPI 端口 0 大小 12
  • DevLsiLogicSCSI.cpp 第 619 行的 SAS 分配;第 2701 行的 manufacturing getter;第 2795 行的 SPI 端口 getter;第 3159 行被注释掉的页属性;第 3293 行的 CONFIG READ/WRITE
  • 已关闭的同类问题,并非此 sink:122c6880(MptReplyUnion SCSI I/O 错误栈)
下载工具