Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2022-45451 — PoC for Acronis Arbitrary File Read - CVE-2022-45451 | Kitploit
Инструменты/GitHubGitHub/alfarom256/cve-2022-45451
Privilege EscalationVulnerability AnalysisCode AnalysisExploitationBinary Analysis
GitHubalfarom256/cve-2022-45451

CVE-2022-45451

PoC for Acronis Arbitrary File Read - CVE-2022-45451

Репозиторий
1863 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Введение

Характеристики системы:
  • Windows 10 1809 x64 EN
Цель:
  • Acronis Home Cyber Protect
  • Acronis Cyber Protect

Описание уязвимости

Драйвер антивирусного сканера "ngscan" от Acronis страдает от неправильного / ненадлежащего контроля доступа, установленного на порту фильтрации связи. Минифильтр-драйвер поддерживает следующие функции, которые могут быть использованы:

  • Произвольное чтение файлов
  • Изменение чувствительных ключей реестра (не использовано, условия срабатывания неизвестны), что может привести к локальному выполнению кода

Произвольное чтение файлов

Анализ драйвера ngscan.sys начался с декомпиляции драйвера с помощью Ida Pro. Исследователь отметил, что, хотя объект устройства был создан, не было создано символических ссылок для взаимодействия с драйвером через DeviceIoControl. В связи с этим анализ продолжился наблюдением за возможностями порта фильтрации связи. Во время инициализации драйвер создаёт пять (5) портов связи для поддержки взаимодействия с другими процессами.

Рис. 1: Подпрограмма, поддерживающая создание до пяти (5) портов фильтрации связи (FCP)

Было замечено, что эта функция вызывается, инициализируя каждый из 5 FCP с DACL по умолчанию, причём последний FCP создаётся с NULL DACL.

Рис. 2: Создание FCP с DACL по умолчанию/NULL

Анализ продолжился наблюдением за функциями CreateNotifyCallback и MessageNotifyCallback, заданными драйвером фильтра. Эти функции обратного вызова вызываются всякий раз, когда процесс открывает соединение и отправляет сообщение на порт связи.

Первоначальная проверка MessageNotifyCallback показала, что буфер входящего сообщения должен удовлетворять следующим требованиям:

  • первое DWORD должно совпадать с ожидаемым значением заголовка "TrMs" (строка 37)
  • второе DWORD должно содержать длину содержимого сообщения (примечание: это отличается и не совпадает с InputBufferLength)
  • длина содержимого сообщения должна быть меньше или равна полному размеру входного буфера минус размер заголовка сообщения
    • Заголовок сообщения состоит из самого заголовка, размера и ещё одного неизвестного значения, всего 0xC (12) байт

После прохождения проверок из InputBuffer извлекается номер функции, который используется в последующих операторах switch для выбора функции, выполняемой с предоставленными данными.

Рис. 3: Подмножество функций, поддерживаемых MessageNotifyCallback

Проверка каждой из поддерживаемых функций показала две функции, представляющие интерес для потенциального злоупотребления, ведущего к произвольному чтению файлов.

Рис. 4: Функции, поддерживающие создание контекста сканирования и возврат файлового дескриптора контекста сканирования (строки 206, 233)

Хотя точная функциональность "контекста сканирования" полностью не известна, анализ показал, что контекст сканирования файла может быть создан для любого файла, указанного пользователем в InputBuffer. После создания контекста сканирования его идентификатор возвращается пользователю в выходном буфере.

Рис. 5: Подпрограмма создания контекста сканирования, возвращающая данные контекста сканирования пользователю

Рис. 6: Данные, отправленные минифильтр-драйверу с запросом доступа к защищённому файлу реестра SAM (\??\C:\Windows\System32\config\SAM)

Рис. 7: Ответ от минифильтр-драйвера, содержащий идентификатор контекста сканирования (0x3aaf)

После создания контекста сканирования и получения его идентификатора дескриптор файла, для которого был создан контекст, может быть открыт в запрашивающем приложении путём повторной отправки сообщения на порт связи.

Рис. 8: Получение дескриптора файла созданного контекста сканирования

Функция, обозначенная как CreateFileReturnHandle0, вызывалась только в том случае, если предыдущая функция SearchScanContextsByID возвращала действительный контекст сканирования. Например, только если запрашивающий процесс предоставил действительный идентификатор контекста, который ранее был создан вызовом упомянутой функции создания контекста. Запрашивающая программа успешно открыла дескриптор привилегированного файла, предоставив идентификатор контекста сканирования функции, указанной на рисунке 8 (рисунок 4, строка 233).

Рис. 9: Успешное получение дескриптора файла для файла SAM

С помощью processhacker доступ к дескриптору файла был подтверждён просмотром дескрипторов запрашивающего процесса:

Рис. 10: Процесс, содержащий дескриптор файла SAM

Рис. 11: Доступ на чтение, предоставленный полученному дескриптору

Потенциальное внедрение кода

Дальнейшее исследование поддерживаемых функций показало контроль над тремя ключами реестра, которые могут быть использованы для получения выполнения кода.

Рис. 12: Функции, поддерживающие открытие дескрипторов ключей реестра

Рис. 13: Открытие ключей реестра, указывающих DLL монитора хуков для внедрения в процесс

Рис. 14: Функция OpenKey, демонстрирующая возможность изменения ключа реестра данными, контролируемыми пользователем

Обстоятельства внедрения DLL для перехвата (хукинга) в составе пакета Acronis не были определены, хотя, если мониторинг хуков включён, предполагается, что DLL, указанная ключами реестра x64HookLib и x86HookLib, будет внедрена в назначенный процесс.

Рис. 15: x64HookLibKey, указывающий DLL для хукинга C:\ProgramData\Acronis\NGMP\shared\acr_protect.x64.dll

Состояние гонки, допускающее ограниченное произвольное чтение файлов

Процесс открытия контекста сканирования был пропущен в анализе для произвольного чтения файлов. Вместо создания контекста сканирования процесс может перебирать идентификаторы контекстов сканирования методом грубой силы, многократно отправляя запросы к функции GetScanContextByID, циклически перебирая значения ContextID, пока не будет найден один или несколько действительных контекстов сканирования.

Скачать инструмент