Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-59346-POC — CVE-2026-59346 的 PoC - VMware VMXNET3 TSO 分段路径中的 32 位整数溢出,导致客户机到主机崩溃。 | Kitploit
工具/GitHubGitHub/0xcyberstan/cve-2026-59346-poc
漏洞分析漏洞利用安全虚拟化硬件与物联网安全论文与研究二进制利用
GitHub0xcyberstan/cve-2026-59346-poc

CVE-2026-59346-POC

CVE-2026-59346 的 PoC - VMware VMXNET3 TSO 分段路径中的 32 位整数溢出,导致客户机到主机崩溃。

查看仓库
22小时3分前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-59346 — VMXNET3 TSO 整数溢出(VMware Workstation / Fusion)

针对 vmware-vmx 中 VMXNET3 虚拟网卡 TSO 分段路径的 32 位整数溢出的概念验证,可从客户机 VM 触发。

此问题已修补。 该 PoC 仅出于研究和防御目的发布。它会触发主机端崩溃(SIGSEGV),并不尝试执行代码。

CVECVE-2026-59346
分析文章cyberstan.co.uk/vmxnet3-tso-overflow
ZDI 公告ZDI-26-647
厂商公告VMSA-2026-0007
CVSSv39.3(厂商)/ 7.5(ZDI)
修复版本Workstation / Fusion 26H1u1
报告途径Trend Micro Zero Day Initiative

概述

VMXNET3 TSO 分段例程使用 32 位 imul 将其分配大小计算为 seg_count * per_seg_size。当真实乘积超过 2^32 时结果会回绕,分配器收到的是被截断的值。随后的分段循环由 seg_count 驱动,而非由分配大小驱动,因此它会按每个分段 per_seg_size 字节写入一个按回绕后乘积确定大小的缓冲区。

针对此代码路径的早期修复(CVE-2025-41236)添加了边界检查,拒绝 MSS、per_seg_size 或二者之和超过 9216 的数据包。这些检查约束了各个描述符字段,但从未约束乘积,而乘积才是实际发生回绕的值。远低于 9216 限制的参数仍可触发溢出。

完整的根因分析、带注释的反汇编和堆布局:cyberstan.co.uk/vmxnet3-tso-overflow。

影响

具有足够权限写入原始 TX 描述符的客户机用户,可以在主机 vmware-vmx 进程中造成大规模越界写入,写入内容来自客户机提供的数据包。在此 PoC 中,写入会一直持续到触及未映射内存,主机进程因 SIGSEGV 而终止,从而关闭 VM。

厂商将该问题评为可在 hypervisor 上下文中执行任意代码;已发布的 PoC 仅演示了内存安全违规,并在崩溃处停止。

受影响产品

所有共享 vmware-vmx VMXNET3 后端的 VMware 桌面 hypervisor 产品:Workstation、Fusion 和 Player。VMXNET3 是现代客户机的默认适配器。权威的受影响版本列表请参见 VMSA-2026-0007。

构建与运行

该 PoC 是一个 Linux 内核模块,运行于客户机内部。它直接写入 VMXNET3 TX 环描述符,绕过内核内驱动的 TSO 逻辑,然后敲响 doorbell MMIO 寄存器。

root@kitploit:~
# Inside the guest VM, as root:

# Kernel headers
apk add linux-virt-dev                        # Alpine
# apt install linux-headers-$(uname -r)       # Debian / Ubuntu

make
insmod vmxnet3_tso_trigger.ko

主机 vmware-vmx 进程将崩溃,客户机将关机。预计会丢失 VM 中所有未保存的状态;如需重新运行,请先创建快照。

开始之前

客户机需要一块 VMXNET3 适配器。使用 lspci | grep -i vmxnet 检查,或确认 .vmx 文件中的 ethernet0.virtualDev = "vmxnet3"。该模块直接与网卡通信,因此接口必须处于启用状态并绑定到 vmxnet3 驱动。

模块参数

warmup 和 freechunk 会在溢出发生前塑造主机堆。复现崩溃并不需要它们;除非你在研究分配布局,否则请保持为零。

建议步骤

先进行试运行,以确认模块找到环并计算出参数,而不触及主机:

root@kitploit:~
insmod vmxnet3_tso_trigger.ko dryrun=1
dmesg | tail -20
rmmod vmxnet3_tso_trigger

预期输出包含计算出的几何参数和定位到的 TX 环:

root@kitploit:~
tso_v8: per_seg=6240 (0x1860), HDR_TOTAL=6222, MSS=1
tso_v8: PARAMS: alloc=... overflow=... seg_count=... paylen=...
tso_v8: ring at priv+N: base=... sz=... n2f=... gen=...
tso_v8: DRYRUN -- descriptors written but NOT triggered

如果未找到环,模块会记录 TX ring not found 并中止。这通常意味着驱动布局存在差异;需要针对该内核调整 find_tx_ring() 中的搜索启发式。

然后真正触发,如有需要可指定非默认接口:

root@kitploit:~
insmod vmxnet3_tso_trigger.ko ifname=eth1

客户机会随主机进程一起终止,因此最后的消息可能无法写入磁盘。要捕获它们,请查看控制台而非依赖日志:

root@kitploit:~
dmesg -w

在主机侧通过 VM 的 vmware.log 确认崩溃,其中会显示 PANIC: Unexpected signal: 11,并带有在 vcpu-0 线程上经过分配器的回溯。

如果没有任何反应

  • 已修补的主机。 26H1u1 或更高版本会拒绝该数据包。模块将正常记录日志,VM 将继续运行。
  • 接口错误。 ifname 必须指定 VMXNET3 设备,而不是网桥或辅助 e1000 适配器。
  • 环太小。 如果 TX 环无法容纳描述符链,模块会以 need N entries but ring has M slots 中止。

测试环境

主机Ubuntu 24.04 LTS,内核 6.17.0,glibc 2.39
HypervisorVMware Workstation Pro 25.0.1(build 25219725)
客户机Alpine Linux,内核 6.12,VMXNET3 网卡

分析中引用的符号偏移特定于 build 25219725。易受攻击的模式在各构建版本中相同,但偏移会有所不同。

内容

root@kitploit:~
vmxnet3_tso_trigger.c   trigger module
Makefile                   out-of-tree kernel module build

修复

乘法需要在 64 位下执行,并在结果到达分配器之前对其加以限制。仅限制各个描述符字段是不够的,因为溢出是乘积的属性,而非任一操作数的属性。

披露时间线

日期事件
2026报告给 Trend Micro ZDI
2026 年 9 月由 Broadcom 在 26H1u1 中修补(VMSA-2026-0007)
2026 年 9 月发布 ZDI-26-647

使用

在修复发布后,依据协同披露原则发布。仅在你拥有或获授权测试的系统上运行。它会导致主机 hypervisor 进程崩溃,因此不要将其指向任何你在意的目标。

作者

Stan S - cyberstan.co.uk · @0xCyberstan

下载工具
参数默认值用途
ifnameeth0由 VMXNET3 适配器支持的接口
dryrun01 表示写入描述符但跳过 doorbell,因此不会触发任何操作
wait_ms0描述符设置与 doorbell 写入之间的延迟(毫秒)
txwarm0在溢出数据包之前推入环中的 TSO 数据包数量
warmup0触发前发起的主机端分配次数
freechunk0触发前进行并部分释放的相同大小分配次数