
Уязвимость BDU:2021-05532 (CVE-2021-42278) Active Directory Windows
Уязвимость BDU:2021-05532 (CVE-2021-42278), также известная как Active Directory Elevation of Privilege, связана с некорректной обработкой имен машинных учетных записей в службе Kerberos. Злоумышленник может создать временную машинную учетную запись без символа $
, получить для нее TGT (Ticket Granting Ticket), затем переименовать аккаунт и запросить TGS (Ticket Granting Service) для доменного контроллера. Это позволяет эскалировать привилегии до уровня администратора домена.
Анализ уязвимости
Уровень опасности: 7.5 HIGH (CVSS v3.1).
Вектор атаки: CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
-
AV:N (Вектор атаки) – Сетевой: эксплуатация возможна удаленно через сеть.
-
AC:H (Сложность эксплуатации) – Высокая: требуется точная последовательность действий.
-
PR:L (Уровень привилегий) – Низкий: нужна базовая аутентификация в домене.
-
UI:N (Вовлечение пользователя) – Не требуется: атака выполняется без взаимодействия с пользователем.
-
S:U (Область воздействия) – Не оказывает влияния на другие компоненты.
-
C:H/I:H/A:H (Последствия) – Полный компромисс конфиденциальности, целостности и доступности.
Условия эксплуатации
-
Доступ к доменной сети: атакующий должен находиться внутри сети с доступом к доменному контроллеру.
-
Учетные данные: требуется учетная запись с правами добавления новых компьютеров в домен (по умолчанию это разрешено аутентифицированным пользователям).
-
Уязвимые версии: Windows Server 2008–2022 (включая Server Core), если не установлены патчи ноября 2021 года.
Анализ эксплоита
Общедоступный эксплоит на Python использует библиотеку Impacket для взаимодействия с протоколами Kerberos, SMB и LDAP. Рассмотрим ключевые этапы кода эксплоита для понимания работы вектора атаки с использованием уязвимости BDU:2021-05532 (CVE-2021-42278).
1. Создание машинной учетной записи
Эксплоит добавляет новую машинную учетную запись через SAMR или LDAPS. Имя аккаунта совпадает с именем доменного контроллера, но без символа $
(например, DC
вместо DC$
):
# Генерация имени компьютера def generateComputerName(self): return "DESKTOP-" + random.choice(string.ascii_uppercase + string.digits) * 8 + "$" # Добавление через SAMR samr.hSamrCreateUser2InDomain(dce, domainHandle, self.computerName, ...)
2. Получение TGT
Используется метод getKerberosTGT
из Impacket для запроса билета TGT:
tgt, cipher, oldSessionKey, sessionKey = getKerberosTGT( userName, ma.computerPassword, ma.domain, "", "", kdcHost=ma.kdcHost )
3. Переименование учетной записи
Аккаунт переименовывается, чтобы освободить исходное имя (например, в DESKTOP-XXXXXXX$
):
def rename(self): self.action = "rename" self.run() # Вызов SAMR/LDAPS для изменения sAMAccountName
4. Запрос TGS через S4U2Self
Эксплоит использует расширение S4U2Self для получения TGS от имени администратора:
tgs, cipher, oldSessionKey, sessionKey = S4U2Self( tgt, ma.computerName, ma.domain, options.spn, options.impersonate, cipher, sessionKey, options.dc_ip )
При этом KDC, не найдя аккаунт DC
, автоматически добавляет $
и выдает тикет для доменного контроллера DC$
.
Защита от уязвимости
-
Установка патчей: Microsoft выпустила исправления в ноябре 2021 года.
-
Ограничение прав:
-
Удалить право Authenticated Users на добавление компьютеров в домен.
-
Использовать GPO для запрета создания машинных аккаунтов без символа
$
.
-
-
Мониторинг событий:
-
События
4741
(создание компьютера) и4781
(переименование аккаунта) в журналах Active Directory.
-
-
LAPS: Локальное хранение паролей администратора с помощью Local Administrator Password Solution.
-
Сегментация сети: Ограничение доступа к доменному контроллеру с помощью брандмауэров.
