Разбор Zero-day уязвимости Microsoft Support Diagnostic Tool

CVE-2022–30190, она же Follina. По данным VirusTotal, первый раз уязвимость эксплуатировали 25 мая, а первый сабмит сделан японской командой исследователей nao_sec 27 мая.

Microsoft Support Diagnostic Tool — сервис в Windows 11/10/8.1/7, который собирает информацию для отправки в службу технической поддержки Microsoft. При обращении к службе поддержки Microsoft специалист поддержки выдаёт ключ, который вводится в MSDT. После запуска MSDT (в поиске Windows ввести MSDT) и ввода ключа, полученного от специалиста, сервис будет активирован и начнёт сбор и анализ информации, чтобы найти решение проблемы пользователя.

Пример обращения к MSDTПример обращения к MSDT

Кратко об уязвимости

Новый Zero-day баг позволяет удалённо выполнить код через Microsoft Office. Злоумышленник создает Maldoc, содержащий ссылку на внешний вредоносный OLE-объект, связанный с находящимся на удалённом сервере HTML-файлом.

Действие эксплойта:

  • Открытие полученного .doc или .rtf документа.

  • Документ ссылается на непримечательный URL с протоколом https, скачивающий HTML файл, содержащий код JavaScript.

  • JavaScript ссылается на URL с необычным идентификатором — ms-msdt вместо https.

  • В Windows «ms-msdt» является проприетарная ссылкой, вызывающей пакет устранения неполадок.

  • Командная строка, загруженная в MSDT через URL, запускает недоверенный код, располагающийся на удаленном сервере.

Подготовленный документ при открытии запускает Microsoft Support Diagnostic Tool (MSDT), через который передается любая команда для выполнения в системе, от безвредного запуска программ до повышения привилегий, сбора и передачи паролей. Microsoft были предупреждены о возможности эксплуатации, но без своевременного реагирования появилась возможность использования уязвимости. При эксплуатации окно ввода ключа появляется, но при этом параллельно происходит исполнение скрипта, не требуя ввода ключа.

Известны 2 формата документов, подверженных атакам: .doc (.docx) и .rtf. Подверженные уязвимости версии Office: 2013, 2016, 2019, 2021, Office ProPlus и Office 365. Для эксплуатации необязательно открывать документ, скрипт сработает при предварительном просмотре, также атака работает при отключенных макросах.

География попыток использования эксплойта по данным Securelist:

906a1f87129edc1e993bc2d30c89a6f9.pngПример обращения к ms-msdtПример обращения к ms-msdt

Зареверсил и сделал готовую версию эксплойта Джон Хаммонд. Его решение на GitHub. В терминале Kali Linux с помощью команды [python3 follina.py] создаётся файл «follina.doc», с загруженный html пейлоадом на порт :8000. Полученный документ уже подходит для отправки пользователям. По заготовленной команде после просмотра документа открывается калькулятор. Также заложены предустановки: [-c «notepad» ] откроет блокнот, а [-r 9001] запустит reverse shell на порт 9001, но при этом скачивается netcat binary на ПК жертвы с расположением C:\Windows\Tasks, без очистки binary, из-за чего сработает антивирус.

Пример запуска готового эксплойтаПример запуска готового эксплойта

Распространение Follina

Поскольку CVE эксплуатируется через документ, применимы методы социальной инженерии:

  • Рассылка писем сотрудникам компании под видом рабочих документов.

  • Рассылка уведомлений, промоакций.

  • Размещение документа для скачивания на сайтах.

  • Загрузка файла на физический носитель (метод «дорожного яблока»).

Основная проблема заключается в самом формате файла. Из-за расширения .doc (.docx) пользователи не чувствуют опасности и спокойно скачивают файл, а дальше — дело техники.

Защита от Follina

Спустя почти месяц после первого сабмита Microsoft выпустили обновление безопасности, закрывающее уязвимость. Патч входит в июньский пак обновлений Windows. До этого было предложение частичное решение, закрывающее CVE-2022–30190. Оно заключалось в отключении протокола MSDT:

  • Запустить командную строку с правами администратора.

  • Для резервного копирования изменяемых ключей реестра выполнить команду reg export HKEY_CLASSES_ROOT\ms-msdt filename.

  • Запустить команду отключения поддержки URL MSDT: reg delete HKEY_CLASSES_ROOT\ms-msdt /f.

Почему же Follina? Название для CVE-2022–30190 придумал Кевин Бомонт, он расшифровал образец кода, полученного с VirusTotal, в который входил RAR-архив с именем 05–2022–0438.rar, а 0438 — это телефонный код итальянского города Follina.

«Официальное» лого уязвимости«Официальное» лого уязвимости

К паранойи осведомленности сотрудников теперь добавилось знание о вредоносных .doc файлах. Несмотря на закрытие уязвимости, неизвестно, как злоумышленники ещё смогут эксплуатировать ms-msdt URL, в очередной раз можно порекомендовать не скачивать непонятные письма, полученные с частных электронных почтовых адресов.

Сигнатурное правило для обнаружения Follina

Специалисты компании «Перспективный мониторинг» разработали сигнатурное правило для обнаружения CVE-2022–30190.

alert tcp any $HTTP_PORTS → $HOME_NET any (msg: «AM EXPLOIT Microsoft Diagnostic Tool RCE via PCWDiagnostic aka Follina (CVE-2022–30190)»; flow: established, from_server; file_data; content: «location.href»; distance:0; content:»|22|ms-msdt|3A|»; distance:0; content:»/id»; content: «PCWDiagnostic»; content:»/skip»; content: «force»; content:»/param»; content: «IT_RebrowseForFile=?»; content: «IT_LaunchMethod=ContextMenu»; content: «IT_BrowseForFile=»; content:»$(»; distance:0; content:».exe»; distance:0; reference: url, huntress.com/blog/microsoft-office-remote-code-execution-follina-msdt-bug; reference: url, github.com/JMousqueton/PoC-CVE-2022–30190; reference: cve,2022–30190; classtype: client-side-exploit; sid:3202452; rev:2.

Follina состоит из 2 уязвимостей:

  • Переадресация на внешний ресурс при просмотре документа.

  • Удаленное исполнение команд через MSDT.

Сигнатура реагирует на выполнение кода в HTML-скрипте, содержащегося на адресуемой странице. В теле скрипта используется location.href для обращения к msdt:

content: «location.href»; distance:0; content:»|22|ms-msdt|3A|».

Далее перечисляются параметры обращения:

content:»/id»; content: «PCWDiagnostic»; content:»/skip»; content: «force»; content:»/param»; content: «IT_RebrowseForFile=?»; content: «IT_LaunchMethod=ContextMenu»; content: «IT_BrowseForFile=».

После IT_BrowseForFile= вводятся минимум 2 /…/, иначе скрипт не сработает. После чего идет $ (передаваемая программа), но без использования пробелов, поскольку они сломают процесс. Также передаваемая команда обязательно должна оканчиваться на .exe.

Существуют вариации с передачей дополнительных параметров в base64, но экспертами с Huntress было установлено, что они избыточны.

© Habrahabr.ru