ESC10. Как слабое сопоставление шаблонов сертификатов открывает путь к захвату AD
ESC10 — это эскалация привилегий в AD CS, при которой злоумышленник запрашивает сертификат с произвольным UPN или DNS в поле SAN, не меняя ничего в AD, и использует его для входа от имени другой учетной записи. Атака основана на слабой конфигурации сопоставления сертификатов на контроллерах домена, когда DC доверяет содержимому SAN без жесткой проверки. Например, когда включена поддержка UPN‑маппинга (CertificateMappingMethods = 1) и отключена строгая привязка по SID.
Злоумышленник с доступом к уязвимому шаблону сертификата может сгенерировать запрос, в котором вручную укажет произвольный UPN или DNS в поле SAN. Если настройки сопоставления на контроллерах домена позволяют (например, включен CertificateMappingMethods = 0×1), то сертификат будет сопоставлен с целевой учетной записью, даже если его запросил другой пользователь.
Ключевое отличие ESC10 от ESC9
В ESC9 злоумышленник:
- Изменяет атрибут
userPrincipalNameилиdNSHostNameу подконтрольной учетной записи в AD (например, через права GenericWrite), чтобы он совпадал с целевым (например,Administrator). - Запрашивает сертификат от этой учетной записи с уязвимого шаблона, в котором отключено добавление SID (No Security Extension).
Из‑за слабой настройки проверки (StrongCertificateBindingEnforcement = 0/1) KDC сопоставляет сертификат по UPN и позволяет аутентификацию от имени цели.
В ESC10 злоумышленник также изменяет userPrincipalName (UPN) в Active Directory, но использует любой доступный шаблон, даже без ENROLLEE_SUPPLIES_SUBJECT, потому что атака основана на том, что в домене не применяется жесткая привязка сертификатов к SID (StrongCertificateBindingEnforcement = 0).
Кроме того, он может внедрить теневые учетные данные (shadow credentials) через msDS-KeyCredentialLink, что позволяет запрашивать сертификаты и аутентифицироваться без знания пароля. Это делает атаку более гибкой и незаметной.
Для проведения атаки ESC10 необходимо выполнение следующих условий, которые создают уязвимую среду.
Злоумышленник должен иметь возможность изменять атрибуты учетной записи жертвы, такие как UPN или DNS‑имя. Обычно это достигается через права GenericWrite, которые позволяют изменять атрибуты в Active Directory.

Учетная запись жертвы должна иметь право на регистрацию (Enroll) в уязвимом шаблоне сертификата. Это право определяет, может ли учетная запись запрашивать сертификаты на основе этого шаблона.

У шаблона должны быть следующие настройки:
- Автоматическое включение UPN или DNS‑имени из AD в поле SAN сертификата. Это достигается через флаги
CT_FLAG_SUBJECT_ALT_REQUIRE_UPN(0×02000000) для UPN илиCT_FLAG_SUBJECT_ALT_REQUIRE_DNS(0×08000000) для DNS.
- Не требует одобрения менеджера. Флаг
CT_FLAG_PEND_ALL_REQUESTSдолжен быть отключен. - Не требует авторизованных подписей.
Также шаблон должен быть опубликован на сервере корпоративного центра сертификации (CA), который доверен для NT‑аутентификации, и цепочка сертификатов CA должна быть доверена.
Доменный контроллер должен быть настроен следующим образом:
- Включен флаг UPN mapping. Это означает, что параметр
CertificateMappingMethodsв реестреHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNELсодержит бит0×04. Это разрешает сопоставление сертификатов по UPN.
- Параметр StrongCertificateBindingEnforcement не равен 2 (строгое сопоставление). Значение
0или1разрешает слабое сопоставление, что критично для атаки.
StrongCertificateBindingEnforcement
Этот параметр отвечает за режим строгой проверки сертификатов и находится в реестре по пути HKLM\SYSTEM\CurrentControlSet\Services\Kdc. Однако в некоторых системах, например Windows Server 2016, он может отсутствовать по умолчанию.
Если параметр StrongCertificateBindingEnforcement не задан явно, система использует значения по умолчанию: 0 (Disabled) или 1 (Compatibility Mode) в зависимости от версии ОС. В любом случае такие значения не предотвращают атаку ESC10.
Для эффективной защиты от этой атаки необходимо, чтобы параметр был равен 2 (Full Enforcement). Однако значение 2 стало применяться по умолчанию только с февраля 2025 года, если на сервере установлено обновление безопасности KB5014754.
Эти условия создают возможность для злоумышленника манипулировать атрибутами AD и получать сертификаты, которые позволяют аутентифицироваться под видом других пользователей.
Атака ESC10 существует в двух вариантах, различающихся по методу слабого сопоставления сертификатов:
- UPN.
- DNS‑имени.
Разберем примеры. В них роль злоумышленника выполняет учетная запись hacker. Цель атаки — компрометация учетной записи testeradm, обладающей административными правами. В качестве промежуточной жертвы, через которую будет осуществляться атака, выступает учетная запись user.
Такой вариант атаки — самый распространенный. Он состоит из следующих шагов.
Шаг 1. Получение контроля над учетной записью жертвы
Злоумышленник использует права GenericWrite для учетной записи жертвы, например user@domain.local, чтобы получить возможность изменять ее атрибуты.
Шаг 2. Изменение UPN жертвы
Атакующий временно меняет UPN учетной записи жертвы на UPN целевой учетной записи, например administrator@domain.local. Это делается с помощью таких инструментов, как Certipy:
Certipy.exe account update -u hacker@domain.local -p password -user user -upn administrator@domain.local
Пример команды:
.\Certipy.exe account update -u hacker@good.expert -p Ryryququn95 -user user -upn testeradm@fakedomain.local -dc-ip 10.3.132.172

UPN указывается с доменом @fakedomain.local намеренно — это позволяет избежать конфликта с реально существующими учетными записями в домене. Несмотря на то что в поле UPN указывается домен, при аутентификации система ориентируется в первую очередь на имя пользователя (логин), а не на домен из UPN.
Шаг 3. Запрос сертификата с поддельным UPN
После изменения UPN учетной записи жертвы на UPN целевой учетной записи злоумышленник запрашивает сертификат с использованием уязвимого шаблона (в этом случае — ESC10).
Поскольку шаблон позволяет включать UPN в поле SAN, в сертификате будет содержаться поддельный UPN, указанный ранее, например testeradm@fakedomain.local. Несмотря на несуществующий домен, система сопоставит сертификат с существующим пользователем testeradm, если включено слабое сопоставление (UPN mapping).
Пример команды запроса сертификата:
.\Certipy.exe req -u user@good.expert -p Ryryququn95 -template ESC10 -ca "GOOD-GOODEX-SERVER-CA-1" -dc-ip 10.3.132.172

В результате будет выдан сертификат, где:
Subject:EMPTY.Other Name:Principal Name=testeradm@fakedomain.local.
Это можно проверить с помощью команды:
certutil -dump testeradm.pfx

Шаг 4. Аутентификация с использованием сертификата
После получения сертификата злоумышленник может использовать его для аутентификации через протоколы, поддерживающие Schannel, например LDAPS, RDP, SMB. Если в системе включено слабое сопоставление сертификатов (CertificateMappingMethods = 4), а строгая проверка отключена (StrongCertificateBindingEnforcement = 0 или 1), сертификат будет принят как принадлежащий пользователю testeradm.
Пример команды для получения LDAP‑доступа с помощью Certipy:
.\Certipy.exe auth -pfx testeradm.pfx -dc-ip 10.3.132.172 -ldap-shell
Шаг 5. Восстановление UPN учетной записи жертвы
Чтобы скрыть следы атаки, злоумышленник возвращает UPN учетной записи жертвы user к исходному значению. Это снижает вероятность обнаружения и предотвращает возможные конфликты в системе.
Пример команды для отката изменений:
.\Certipy.exe account update -u hacker@good.expert -p Ryryququn95 -user user -upn user@good.expert -dc-ip 10.3.132.172
В этом случае для выполнения атаки злоумышленник использует DNS‑имя учетной записи, например компьютера или пользователя.
Атака ESC10 на основе слабого сопоставления DNS‑имени использует уязвимость в механизме сопоставления сертификатов. Злоумышленник изменяет dNSHostName жертвы на имя контроллера домена, запрашивает сертификат с этим значением в SAN: DNS Name и аутентифицируется как DC. Это возможно потому, что AD CS доверяет сертификатам с SAN: DNS Name, не проверяя их фактическую связь с учетной записью.
Обнаружить атаку ESC10 может быть сложно, но есть методы для выявления уязвимых конфигураций и мониторинга подозрительной активности.
Чтобы оценить уязвимость шаблона, проверьте параметр msPKI-Certificate-Name-Flag. Это десятичное число, в котором побитово закодированы флаги. Он управляет сопоставлением данных в поле SAN сертификата, таких как UPN, DNS‑имя или SPN. Эти настройки можно выставить графически, через настройки шаблона в центре сертификации или через ADSI Edit:

Атрибут msPKI-Certificate-Name-Flag можно найти тремя основными способами:
- через реестр Windows — в кеше шаблонов по пути
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\CertificateTemplateCache. Здесь отображается текущее состояние шаблонов, которые использует центр сертификации; - в событии 4898. Если включен аудит, то при загрузке шаблона CA пишет в журнал все его параметры, включая
msPKI-Certificate-Name-Flag; - через ADSI Edit. Особенно актуально, если вы хотите внести изменения, так как это именно тот уровень, где атрибут реально хранится и редактируется. Все изменения, сделанные в ADSI Edit, будут приняты CA после следующей синхронизации или перезапуска службы.
Подробнее обо всех этих источниках читайте в справочных материалах.
Как найти флаг msPKI-Certificate-Name-Flag через ADSI Edit
- Откройте ADSI Edit. Для этого нажмите Win + R, введите
adsiedit.mscи нажмите Enter. - Подключитесь к узлу конфигурации:
CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=ВАШ_ДОМЕН. - Найдите нужный шаблон сертификата, например ESC10, и откройте его свойства.
- В списке атрибутов найдите
msPKI-Certificate-Name-Flag. Значение будет указано в десятичном формате. CT_FLAG_SUBJECT_ALT_REQUIRE_SPN—0×800000=8388608.CT_FLAG_SUBJECT_ALT_REQUIRE_UPN—0×2000000=33554432.CT_FLAG_SUBJECT_ALT_REQUIRE_DNS—0×8000000=134217728.0x02000000(UPN),0x00800000(SPN),- их комбинацию —
0x02800000(41943040). CT_FLAG_SUBJECT_REQUIRE_COMMON_NAME(1073741824) — случайно взятый флаг для примера;SUBJECT_ALT_REQUIRE_UPN(33554432);SUBJECT_ALT_REQUIRE_SPN(8388608).- Обычные пользователи (например, Domain Users) имеют право Enroll на шаблон.
- Не настроено ограничение на выдачу сертификатов (нет ручного подтверждения через менеджера).
- Присутствует флаг Supply in the request, а также разрешено включение UPN, SPN или DNS в SAN. Эти параметры сами по себе не уязвимости — они легитимны в ряде сценариев, однако в совокупности с остальными признаками делают шаблон потенциально эксплуатируемым для ESC10 и других техник ESC.
- не все инфраструктуры включают аудит этого события;
- не все шаблоны могут быть загружены при старте CA, если к ним долго не обращались;
- начиная с обновления безопасности от февраля 2025 года, Microsoft закрыла уязвимость, эксплуатируемую в ESC9 и ESC10. Компания изменила поведение центра сертификации, добавив защиту на уровне реестра. Однако это справедливо только для систем с установленными обновлениями.
- параметр msPKI-Enrollment-Flag — наличие флага
CT_FLAG_NO_SECURITY_EXTENSION(0×80000), отключающего расширение с SID; - параметр msPKI-Certificate-Name-Flag — обязательность включения UPN, DNS или SPN в SAN;
- права доступа (DACL) — особенно наличие прав Enroll, WriteOwner, FullControl у непривилегированных пользователей;
- атрибут nTSecurityDescriptor — для оценки фактической безопасности шаблона;
- системный параметр CertificateMappingMethods на контроллерах домена — активен ли UPN‑маппинг.
- Следует исключать из мониторинга серверы с установленным обновлением безопасности KB5014754, так как атака ESC10 на них более не применима.
- На остальных серверах необходимо проверять значение параметра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\CertificateMappingMethods. - Если значение
CertificateMappingMethodsменьше8, это означает, что жесткая проверка привязки сертификатов (strong certificate mapping) неактивна и система потенциально уязвима.
Какие флаги делают шаблон уязвимым
Если хотя бы один из следующих флагов установлен, шаблон считается потенциально уязвимым:
Как проверить значение флага
Проверку можно выполнить вручную, сравнивая значение по побитовому И (AND), либо автоматизировать с помощью небольшого скрипта. Вот пример такой функции на Go:
func checkCertificateFlags(value int) {
spnFlag := 8388608 // SUBJECT_ALT_REQUIRE_SPN
upnFlag := 33554432 // SUBJECT_ALT_REQUIRE_UPN
dnsNameFlag := 134217728 // SUBJECT_ALT_REQUIRE_DNS
if value&dnsNameFlag == dnsNameFlag || value&spnFlag == spnFlag || value&upnFlag == upnFlag {
fmt.Println("Шаблон уязвим")
fmt.Println("Результат: 1")
} else {
fmt.Println("Шаблон не уязвим")
fmt.Println("Результат: 0")
}
}
Пример вызова:
checkCertificateFlags(1115684864)
Результат:
Шаблон уязвим Результат: 1
Чтобы подменить шаблон UPN или DNS Name, нужны привилегии на изменение атрибутов учетной записи жертвы. Атакующий hacker@good.expert должен иметь права GenericAll или GenericWrite на учетную запись user@good.expert.
Можно проверить, уязвима ли учетная запись, с помощью PowerView:
Get-DomainObjectAcl -Identity user | ?{$_.ActiveDirectoryRights -match "GenericAll|GenericWrite"}
Далее атакующему нужно убедиться, что у жертвы есть право запрашивать новый сертификат с помощью уязвимого шаблона (ESC10). Атака будет возможна, если у учетной записи user есть права Enroll на шаблонESC10.
Проверить, нет ли таких уязвимых настроек, можно командой через консоль:

Также проверьте параметр CertificateMappingMethods в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL. Там данные могут быть такими:
| Имя записи | DWORD | Включено по умолчанию |
|---|---|---|
| Тема или издатель |
0x000000001 |
Нет |
| Издатель |
0x000000002 |
Нет |
| UPN |
0x000000004 |
Нет |
| S4U2Self |
0x000000008 |
Да |
| S4U2Self явный |
0x000000010 |
Да |
Рекомендуется установить значение параметра CertificateMappingMethods равным 0×000000008 или 0×000000010.
Автоматизация подобных проверок позволит фиксировать все ошибки конфигурации в реальном времени.
Уязвимые комбинации флагов
Атака на основе UPN становится возможной, когда параметр msPKI-Certificate-Name-Flag содержит хотя бы один из флагов:
Атака на основе DNS‑имени возможна, когда параметр содержит флаг 0×08000000 (SUBJECT_ALT_REQUIRE_DOMAIN_DNS) — он необходим для включения DNS‑имени.
Сложение флагов
Если в шаблоне одновременно включены несколько флагов, они суммируются. Например, включены:
Итоговое значение: 1073741824 + 33554432 + 8388608 = 1115684864.
Такой шаблон будет уязвим для атаки, так как включает флаги для UPN и SPN:

Ключевое событие для корреляционного обнаружения в контексте ESC10 — событие 4898 (Certificate Services loaded a template). Именно оно позволяет получить точную информацию о загруженных шаблонах сертификатов и их параметрах, в том числе флагах, правах доступа и конфигурационных особенностях.
Однако при анализе ESC10 важно не просто наличие события, а понимание конфигурационного контекста, в котором шаблон используется. Наиболее критичны следующие условия:
Таким образом, ESC10 — это типичная атака категории misconfiguration chaining, где ни один параметр в отдельности не является фатальным, но вместе с другими создает путь к эксплуатации.
Для обнаружения можно ограничиться использованием только события 4898. Оно содержит всю необходимую информацию:

Подробнее о событии 4898 читайте в справочных материалах.
Тем не менее учитывайте, что:
Недостаточно надеяться только на событие 4898. Более надежный подход — это проактивная оценка конфигурации всех опубликованных шаблонов сертификатов. Для этого проверяйте:
Такой аудит позволяет выявить уязвимые конфигурации еще до начала атаки, а не постфактум по логам.
С помощью решений класса EDR, таких как BI.ZONE EDR, уязвимые шаблоны сертификатов в инфраструктуре уже находятся под постоянным мониторингом. Однако, кроме шаблонов, в настройках системной безопасности Windows есть критические параметры реестра, которые напрямую влияют на возможность реализации атак.
Один из таких параметров — CertificateMappingMethods в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL.
BI.ZONE EDR отслеживает этот параметр, и при любом изменении агент немедленно отправляет данные на анализ. Это позволяет своевременно выявлять потенциальные попытки обхода механизмов привязки сертификатов.
Еще один важный параметр — StrongCertificateBindingEnforcement в ветке реестра HKLM\SYSTEM\CurrentControlSet\Services\Kdc. Этот параметр влияет на принудительное применение жесткой привязки сертификата в Kerberos, в частности блокирует ESC10 при активной защите. Однако на практике даже на обновленных серверах и при наличии патча KB5014754 этот параметр может отсутствовать или не отображаться явно. Это затрудняет его надежное использование как индикатора.
Таким образом, вот корректная логика построения правил предикта:

CertificateMappingMethods в BI.ZONE EDR
Для эффективной защиты от атаки ESC10 принимайте комплексные меры на уровне шаблонов сертификатов, конфигурации доменов и системного мониторинга.
- Отключите флаги
SUBJECT_ALT_REQUIRE_UPN,SUBJECT_ALT_REQUIRE_DNS,SUBJECT_ALT_REQUIRE_SPN, если они не требуются по бизнес-процессам. Это делается через атрибутmsPKI-Certificate-Name-Flagв ADSI Edit или через консольcerttmpl.msc. Указанные флаги позволяют злоумышленнику подставлять свои значения в SAN — при наличии уязвимых прав это становится вектором атаки. - Включите флаг
CT_FLAG_PEND_ALL_REQUESTS(msPKI-Enrollment-Flag), чтобы все запросы на выпуск сертификата требовали ручного подтверждения. Это вводит дополнительный контрольный рубеж. - Ограничьте права Enroll. Разрешите регистрацию сертификатов (Enroll) только тем группам, которым это действительно необходимо. Обычным пользователям (например, Domain Users) нельзя давать права на шаблоны с Supply in the request.
- Активируйте строгую привязку сертификатов через параметр
StrongCertificateBindingEnforcement, установив значение2в реестре по путиHKLM\SYSTEM\CurrentControlSet\Services\Kdc. Начиная с февраля 2025 года это значение автоматически применяется во всех системах с установленным патчем KB5014754 и выше. - Проверьте значение параметра
CertificateMappingMethodsпо путиHKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL. Если оно меньше8, значит, строгая привязка сертификатов не активна. В этом случае либо исключите UPN‑сопоставление, либо обновите систему.
- Регулярно проводите аудит шаблонов сертификатов, особенно новых и дублирующихся. Для этого можно использовать PSPKIAudit, Certipy или BloodHound (в части шаблонов).
- Отслеживайте событие 4898. Оно фиксирует загрузку шаблонов CA, включая параметры, права и флаги. Это позволит выявлять потенциально опасные конфигурации до начала атаки.
- Используйте EDR‑решения, которые умеют отслеживать изменения в критичных ветках реестра (например,
CertificateTemplateCache,SCHANNEL) и вызывать алерты при попытке запроса сертификата по нестандартному шаблону.
Атака ESC10 показывает, насколько опасна слабая конфигурация AD CS. Если в шаблонах сертификатов разрешено включать UPN или DNS в SAN, а на контроллерах домена не активирована строгая привязка сертификатов, злоумышленник с минимальными правами может выдать себе легитимный сертификат от имени другого пользователя и пройти аутентификацию через Schannel.
Защита от ESC10 — это не только установка StrongCertificateBindingEnforcement = 2 и исключение уязвимых флагов. Важно регулярно проверять шаблоны сертификатов, права на них и параметры реестра, отслеживать события 4898 и изменения в Schannel. Только системный аудит и строгая политика выпуска сертификатов гарантируют, что инфраструктура AD CS не станет точкой входа в домен.