Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-59346-POC — PoC for CVE-2026-59346 - 32-bit integer overflow in VMware's VMXNET3 TSO segmentation path, guest-to-host crash. | Kitploit
Tools/GitHubGitHub/0xcyberstan/cve-2026-59346-poc
Vulnerability AnalysisExploitationSecurity VirtualizationHardware & IoT SecurityPapers & ResearchBinary Exploitation
GitHub0xcyberstan/cve-2026-59346-poc

CVE-2026-59346-POC

PoC for CVE-2026-59346 - 32-bit integer overflow in VMware's VMXNET3 TSO segmentation path, guest-to-host crash.

View Repository
22h 56m agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

CVE-2026-59346 — VMXNET3 TSO Integer Overflow (VMware Workstation / Fusion)

Proof-of-concept for a 32-bit integer overflow in the VMXNET3 virtual NIC's TSO segmentation path in vmware-vmx, reachable from a guest VM.

This issue is patched. The PoC is published for research and defensive purposes only. It triggers a host-side crash (SIGSEGV) and does not attempt code execution.

CVECVE-2026-59346
Writeupcyberstan.co.uk/vmxnet3-tso-overflow
ZDI advisoryZDI-26-647
Vendor advisoryVMSA-2026-0007
CVSSv39.3 (vendor) / 7.5 (ZDI)
Fixed inWorkstation / Fusion 26H1u1
Reported viaTrend Micro Zero Day Initiative

Summary

The VMXNET3 TSO segmentation routine computes its allocation size as seg_count * per_seg_size using a 32-bit imul. When the true product exceeds 2^32 the result wraps, and the allocator receives the truncated value. The segmentation loop that follows is driven by seg_count, not by the allocation size, so it writes per_seg_size bytes per segment into a buffer sized from the wrapped product.

An earlier fix for this code path (CVE-2025-41236) added bounds checks rejecting packets where MSS, per_seg_size, or their sum exceed 9216. Those checks constrain the individual descriptor fields but never the product, which is the value that actually wraps. Parameters well under the 9216 limit still reach the overflow.

Full root-cause analysis, annotated disassembly and heap geometry: cyberstan.co.uk/vmxnet3-tso-overflow.

Impact

A guest user with sufficient privilege to write raw TX descriptors can cause a large out-of-bounds write in the host vmware-vmx process with content drawn from the guest-supplied packet. In this PoC the write runs until it reaches unmapped memory and the host process dies with SIGSEGV, powering off the VM.

The vendor rated the issue as permitting arbitrary code execution in the hypervisor context; the published PoC demonstrates the memory-safety violation only and stops at the crash.

Affected products

All VMware desktop hypervisor products sharing the vmware-vmx VMXNET3 backend: Workstation, Fusion, and Player. VMXNET3 is the default adapter for modern guests. See VMSA-2026-0007 for the authoritative affected-version list.

Building and running

The PoC is a Linux kernel module that runs inside the guest. It writes VMXNET3 TX ring descriptors directly, bypassing the in-kernel driver's TSO logic, then rings the doorbell MMIO register.

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

The host vmware-vmx process will crash and the guest will power off. Expect to lose any unsaved state in the VM, and take a snapshot first if you want to re-run it.

Before you start

The guest needs a VMXNET3 adapter. Check with lspci | grep -i vmxnet or confirm ethernet0.virtualDev = "vmxnet3" in the .vmx file. The module talks to the NIC directly, so the interface must be up and bound to the vmxnet3 driver.

Module parameters

ParameterDefaultPurpose
ifnameeth0Interface backed by the VMXNET3 adapter
dryrun01 writes the descriptors but skips the doorbell, so nothing is triggered
wait_ms0Delay in ms between descriptor setup and the doorbell write
txwarm0TSO packets to push through the ring before the overflow packet
warmup0Host-side allocations to issue before triggering
freechunk0Same-size allocations to make and partially release before triggering

warmup and freechunk shape the host heap before the overflow lands. They are not needed to reproduce the crash; leave them at zero unless you are investigating allocation layout.

Suggested sequence

Start with a dry run to confirm the module finds the ring and computes parameters, without touching the host:

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

Expected output includes the computed geometry and the located TX ring:

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

If the ring is not found the module logs TX ring not found and aborts. That usually means a driver layout difference; the search heuristic in find_tx_ring() needs adjusting for that kernel.

Then trigger for real, on a non-default interface if needed:

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

The guest dies with the host process, so the last messages may not reach disk. To capture them, watch the console rather than relying on the journal:

root@kitploit:~
dmesg -w

Confirm the crash from the host side in the VM's vmware.log, which will show a PANIC: Unexpected signal: 11 with a backtrace through the allocator on the vcpu-0 thread.

If nothing happens

  • Patched host. Anything at 26H1u1 or later rejects the packet. The module will log normally and the VM will keep running.
  • Wrong interface. ifname must name the VMXNET3 device, not a bridge or a secondary e1000 adapter.
  • Ring too small. The module aborts with need N entries but ring has M slots if the TX ring cannot hold the descriptor chain.

Tested environment

HostUbuntu 24.04 LTS, kernel 6.17.0, glibc 2.39
HypervisorVMware Workstation Pro 25.0.1 (build 25219725)
GuestAlpine Linux, kernel 6.12, VMXNET3 NIC

Symbol offsets referenced in the analysis are specific to build 25219725. The vulnerable pattern is the same across builds, but offsets will differ.

Contents

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

Fix

The multiply needs to be performed in 64 bits, with the result bounded before it reaches the allocator. Capping the individual descriptor fields is not sufficient, since the overflow is a property of the product rather than of either operand.

Disclosure timeline

DateEvent
2026Reported to Trend Micro ZDI
Sept 2026Patched by Broadcom in 26H1u1 (VMSA-2026-0007)
Sept 2026ZDI-26-647 published

Use

Published under coordinated disclosure, after a fix shipped. Run it only against systems you own or are authorised to test. It will crash the host hypervisor process, so do not point it at anything you care about.

Author

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

Download Tool