Удалённое выполнение кода через Use-After-Free в Windows OLE
Удалённое выполнение кода через Use-After-Free в Windows OLE
Категория: Программы Теги: Уязвимости Опубликовано: 9 апреля 2025

Уязвимость BDU:2025-00539: Удалённое выполнение кода через Use-After-Free в Windows OLE

Уязвимость BDU:2025-00539 (CVE-2025-21298), обнаруженная в компоненте Windows OLE, связана с ошибкой Use-After-Free в функции ole32.dll!UtOlePresStmToContentsStm. Она позволяет удалённому злоумышленнику выполнить произвольный код через специально сформированный RTF-файл. Уязвимость затрагивает все версии Windows, включая Server 2008–2025 и клиентские ОС.

Функция UtOlePresStmToContentsStm обрабатывает OLE-объекты, конвертируя данные из потока OlePres в поток CONTENTS. Ошибка возникает из-за двойного освобождения (double-free) указателя pstmContents, управляющего потоком CONTENTS.


Технический разбор уязвимости

Анализ кода до патча

  1. Создание и освобождение потока:

    IStream *pstmContents = nullptr;
    pstg->CreateStream(L"CONTENTS", ..., &pstmContents); // Создание потока
    pstmContents->Release(); // Освобождение, но pstmContents НЕ обнуляется
  2. Повторное использование указателя:
    Если последующие операции (например, UtReadOlePresStmHeader) завершаются с ошибкой, код переходит к очистке:

    if (pstmContents) pstmContents->Release(); // Double-free!

    Указатель pstmContents сохраняет адрес освобождённой памяти, что приводит к крашу или RCE.

Исправление в патче (январь 2025):

Microsoft обнуляет pstmContents после освобождения:

pstmContents->Release();
pstmContents = nullptr; // Патч: предотвращает повторный Release

Эксплуатация через RTF-файлы

Структура PoC:

Пример вредоносного RTF-файла (cve-2025-21298-poc.rtf):

{\rtf1{\object\objhtml...}} 

Этапы атаки:

  1. Внедрение OLE-объекта: RTF содержит встроенный объект, манипулирующий потоками OlePres и CONTENTS.

  2. Триггер double-free: При открытии файла в Outlook/WinWord функция UtOlePresStmToContentsStm обрабатывает объект, вызывая сбой.

  3. Выполнение кода: Управление памятью через heap spraying позволяет подменить освобождённый указатель на шелл-код.


Способы защиты

1. Установка обновлений

Установите патчи Microsoft от 14.01.2025. Проверьте версию ole32.dll:

Get-Item "C:\Windows\System32\ole32.dll" | Select-Object VersionInfo

Ожидаемая версия после патча: 10.0.26100.2894 (Windows 11 24H2).

2. Ограничение обработки RTF

  • Outlook: Отключите предпросмотр RTF и используйте режим Plain Text.

  • Групповые политики: Заблокируйте открытие RTF из ненадёжных источников через AppLocker или SRP:

    <FilePathRule Id="..." Description="Block RTF" Action="Deny">
      <FileConditions>
        <FileCondition Path="*.rtf" />
      </FileConditions>
    </FilePathRule>
    

3. Мониторинг и анализ

  • Сигнатуры сетевого трафика: Блокируйте вложения с MIME-типом application/rtf на почтовых шлюзах.

  • Анализ файлов: Используйте oletools для проверки RTF на подозрительные OLE-объекты:

    rtfobj suspicious.rtf

4. EMET-технологии

Включите Control Flow Guard (CFG) и Arbitrary Code Guard (ACG) для предотвращения эксплуатации:

Set-ProcessMitigation -Policy CFG,ACG -Enable

Рекомендации для разработчиков

  • Аудит кода: Проверяйте функции, работающие с COM-объектами, на корректное управление ссылками (AddRef/Release).

  • Инструменты: Используйте AddressSanitizer (ASan) для детекции use-after-free в тестах.

Алексей Черемных Алексей Черемных
67