Корпорация Microsoft устранила критическую уязвимость типа «использование после освобождения» (use-after-free) в драйвере Brokering File System (BFS). Эта ошибка, получившая идентификатор CVE-2025-29970, потенциально позволяет злоумышленникам повысить уровень привилегий в операционных системах Windows. Проблема затрагивает компонент "bfs.sys" и была обнаружена экспертами по безопасности из HT3Labs.
Детали уязвимости
Brokering File System - это мини-фильтр драйвер, представленный Microsoft примерно два года назад в рамках функции изоляции приложений Win32 App Isolation. Его основная задача - управление операциями ввода-вывода для изолированных, или «запесоченных» (sandboxed), приложений. BFS выступает критически важной границей безопасности, контролируя доступ к файлам из подобных сред. Таким образом, уязвимости в этом компоненте напрямую угрожают целостности механизмов изоляции.
С технической точки зрения, ошибка кроется в функции "BfsCloseStorage". Проблема связана с некорректным освобождением памяти при очистке связного списка "DirectoryBlockList". В ходе этого процесса голова списка освобождается уже в первой итерации цикла. Однако функция продолжает работу и в последующих итерациях пытается получить доступ к этой уже освобожденной памяти при обработке оставшихся записей. Это создает классическое условие «использования после освобождения», которое может привести к сбою системы или, что более опасно, к повышению привилегий.
Конкретно уязвимость активируется при удалении политик через вызов IOCTL "BfsProcessDeletePolicyRequest". Система начинает освобождать связанные объекты "PolicyEntry" и их члены. На этапе очистки "StorageObject" цикл деаллокации в "BfsCloseStorage" некорректно обрабатывает структуру "DirectoryBlockList". Функция извлекает первую запись, выполняет проверки целостности, отвязывает узел, освобождает связанный "DirectoryBlockBuffer" и сам узел, а затем - и голову списка, всё в рамках одной итерации. Если в списке несколько записей, голова освобождается преждевременно, что заставляет последующие операции обращаться к недействительной области памяти.
Эксплуатация CVE-2025-29970 является сложной, но теоретически возможной. Во-первых, злоумышленнику требуется локальный доступ к системе и соответствующий токен, позволяющий выполнять BFS IOCTL-вызовы. По данным PixieSecurity, такой токен можно получить, имперсонировав подходящий процесс, обладающий токеном AppSilo. Во-вторых, в таблице политик "PolicyTable" на момент запроса на удаление должны существовать объекты "PolicyEntry", причем с присоединенным "StorageObject", чей "DirectoryBlockList" содержит несколько элементов. Узкое временное окно между освобождением памяти и её повторным использованием, а также ограниченное применение указателей в коде усложняют атаку, но не делают её невозможной.
Обнаружение этой уязвимости подчеркивает сохраняющиеся проблемы безопасности в механизмах песочниц Windows. По мере того как Microsoft расширяет функции изоляции приложений с помощью технологий AppContainer и AppSilo, драйверы уровня ядра, подобные BFS, становятся всё более привлекательными целями для атак на повышение привилегий. Любой сбой на этой границе может позволить вредоносному коду вырваться из ограниченной среды и получить более высокий уровень контроля над системой.
Microsoft уже выпустила исправление в рамках своего ежемесячного цикла обновлений безопасности. Специалисты настоятельно рекомендуют организациям и частным пользователям как можно скорее установить последние патчи для Windows. Своевременное обновление остается наиболее эффективной мерой защиты не только от CVE-2025-29970, но и от других потенциальных уязвимостей в подсистемах безопасности операционной системы. Данный случай также служит напоминанием о важности постоянного аудита сложных драйверов, обеспечивающих критически важные функции изоляции.
Ссылки
- https://www.cve.org/CVERecord?id=CVE-2025-29970
- https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-29970
- https://www.pixiepointsecurity.com/blog/nday-cve-2025-29970/
