
CVE-2026-59346 के लिए PoC - VMware के VMXNET3 TSO सेगमेंटेशन पथ में 32-बिट पूर्णांक ओवरफ़्लो, गेस्ट-से-होस्ट क्रैश।
vmware-vmx में VMXNET3 वर्चुअल NIC के TSO सेगमेंटेशन पथ में 32-बिट इंटीजर ओवरफ़्लो के लिए प्रूफ-ऑफ-कॉन्सेप्ट, जो गेस्ट VM से पहुँचा जा सकता है।
यह समस्या पैच हो चुकी है। यह PoC केवल शोध और रक्षात्मक उद्देश्यों के लिए प्रकाशित किया गया है। यह होस्ट-साइड क्रैश (SIGSEGV) को ट्रिगर करता है और कोड एक्ज़ीक्यूशन का प्रयास नहीं करता।
| CVE | CVE-2026-59346 |
| Writeup | cyberstan.co.uk/vmxnet3-tso-overflow |
| ZDI advisory | ZDI-26-647 |
| Vendor advisory | VMSA-2026-0007 |
| CVSSv3 | 9.3 (vendor) / 7.5 (ZDI) |
| Fixed in | Workstation / Fusion 26H1u1 |
| Reported via | Trend Micro Zero Day Initiative |
VMXNET3 TSO सेगमेंटेशन रूटीन अपने एलोकेशन आकार की गणना seg_count * per_seg_size के रूप में 32-बिट imul का उपयोग करके करता है। जब वास्तविक गुणनफल 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 पावर ऑफ हो जाती है।
विक्रेता ने इस समस्या को हाइपरवाइज़र संदर्भ में मनमाने कोड एक्ज़ीक्यूशन की अनुमति देने वाला बताया; प्रकाशित PoC केवल मेमोरी-सेफ़्टी उल्लंघन प्रदर्शित करता है और क्रैश पर ही रुक जाता है।
vmware-vmx VMXNET3 बैकएंड साझा करने वाले सभी VMware डेस्कटॉप हाइपरवाइज़र उत्पाद: Workstation, Fusion, और Player। VMXNET3 आधुनिक गेस्ट के लिए डिफ़ॉल्ट एडाप्टर है। आधिकारिक प्रभावित-संस्करण सूची के लिए VMSA-2026-0007 देखें।
यह PoC एक Linux कर्नेल मॉड्यूल है जो गेस्ट के अंदर चलता है। यह VMXNET3 TX रिंग डिस्क्रिप्टर सीधे लिखता है, इन-कर्नेल ड्राइवर के TSO लॉजिक को बायपास करता है, फिर डोरबेल MMIO रजिस्टर को रिंग करता है।
# 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" की पुष्टि करें। मॉड्यूल NIC से सीधे बात करता है, इसलिए इंटरफ़ेस अप होना चाहिए और vmxnet3 ड्राइवर से बाउंड होना चाहिए।
| Parameter | Default | Purpose |
|---|---|---|
ifname | eth0 | VMXNET3 एडाप्टर द्वारा समर्थित इंटरफ़ेस |
dryrun | 0 | 1 डिस्क्रिप्टर लिखता है लेकिन डोरबेल छोड़ देता है, इसलिए कुछ भी ट्रिगर नहीं होता |
wait_ms | 0 | डिस्क्रिप्टर सेटअप और डोरबेल राइट के बीच ms में विलंब |
txwarm | 0 | ओवरफ़्लो पैकेट से पहले रिंग से गुज़ारे जाने वाले TSO पैकेट |
warmup | 0 | ट्रिगर करने से पहले जारी किए जाने वाले होस्ट-साइड एलोकेशन |
freechunk | 0 | ट्रिगर करने से पहले बनाए और आंशिक रूप से रिलीज़ किए जाने वाले समान-आकार के एलोकेशन |
warmup और freechunk ओवरफ़्लो के लैंड होने से पहले होस्ट हीप को आकार देते हैं। क्रैश को पुनरुत्पादित करने के लिए इनकी आवश्यकता नहीं है; जब तक आप एलोकेशन लेआउट की जाँच नहीं कर रहे हों, इन्हें शून्य पर छोड़ दें।
एक ड्राई रन से शुरू करें ताकि पुष्टि हो सके कि मॉड्यूल रिंग ढूँढता है और पैरामीटर की गणना करता है, बिना होस्ट को छुए:
insmod vmxnet3_tso_trigger.ko dryrun=1
dmesg | tail -20
rmmod vmxnet3_tso_trigger
अपेक्षित आउटपुट में परिकलित ज्यामिति और स्थित TX रिंग शामिल होती है:
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() में सर्च ह्यूरिस्टिक को समायोजित करने की आवश्यकता है।
फिर वास्तव में ट्रिगर करें, यदि आवश्यक हो तो गैर-डिफ़ॉल्ट इंटरफ़ेस पर:
insmod vmxnet3_tso_trigger.ko ifname=eth1
गेस्ट होस्ट प्रोसेस के साथ समाप्त हो जाता है, इसलिए अंतिम संदेश डिस्क तक नहीं पहुँच सकते। उन्हें कैप्चर करने के लिए, जर्नल पर निर्भर रहने के बजाय कंसोल देखें:
dmesg -w
VM के vmware.log में होस्ट साइड से क्रैश की पुष्टि करें, जो vcpu-0 थ्रेड पर एलोकेटर के माध्यम से बैकट्रेस के साथ PANIC: Unexpected signal: 11 दिखाएगा।
ifname को VMXNET3 डिवाइस का नाम देना चाहिए, ब्रिज या सेकेंडरी e1000 एडाप्टर का नहीं।need N entries but ring has M slots के साथ बंद हो जाता है।| Host | Ubuntu 24.04 LTS, kernel 6.17.0, glibc 2.39 |
| Hypervisor | VMware Workstation Pro 25.0.1 (build 25219725) |
| Guest | Alpine Linux, kernel 6.12, VMXNET3 NIC |
विश्लेषण में संदर्भित सिंबल ऑफ़सेट build 25219725 के लिए विशिष्ट हैं। कमज़ोर पैटर्न सभी बिल्ड्स में समान है, लेकिन ऑफ़सेट भिन्न होंगे।
vmxnet3_tso_trigger.c trigger module
Makefile out-of-tree kernel module build
गुणा 64 बिट में किया जाना चाहिए, और परिणाम एलोकेटर तक पहुँचने से पहले सीमित होना चाहिए। व्यक्तिगत डिस्क्रिप्टर फ़ील्ड्स को सीमित करना पर्याप्त नहीं है, क्योंकि ओवरफ़्लो गुणनफल का गुण है, न कि किसी भी ऑपरेंड का।
| Date | Event |
|---|---|
| 2026 | Trend Micro ZDI को रिपोर्ट किया गया |
| Sept 2026 | Broadcom द्वारा 26H1u1 में पैच किया गया (VMSA-2026-0007) |
| Sept 2026 | ZDI-26-647 प्रकाशित |
समन्वित डिस्क्लोज़र के तहत प्रकाशित, फिक्स जारी होने के बाद। इसे केवल उन सिस्टम्स के विरुद्ध चलाएँ जिनके आप स्वामी हैं या जिनका परीक्षण करने के लिए आप अधिकृत हैं। यह होस्ट हाइपरवाइज़र प्रोसेस को क्रैश कर देगा, इसलिए इसे किसी भी ऐसी चीज़ पर निशाना न बनाएँ जिसकी आपको परवाह है।
Stan S - cyberstan.co.uk · @0xCyberstan