
POC tool for ResetNightmare (CVE-2026-27912)
Инструмент Proof-of-concept (POC) для ResetNightmare (CVE-2026-27912).
ResetNightmare — это ошибка валидации в протоколе смены пароля Kerberos, которая позволяет сбросить пароль любой целевой учётной записи пользователя/компьютера, не зная текущего.
Для атаки требуются непропатченный контроллер домена и возможность записать userPrincipalName (UPN) на любую
учётную запись, которой вы управляете.
Кроме того, уязвимостью может воспользоваться атакующий, имеющий возможность создавать новых пользователей/компьютеры в любом OU, поскольку создание пользователя/компьютера позволяет получить разрешения GenericWrite на эту учётную запись.
Этот скрипт автоматизирует весь ход атаки и выполняет очистку после себя. Ход атаки выглядит следующим образом:
-CreateNewPath.sAMAccountName цели, например "Administrator".NT-ENTERPRISE. Этот TGT будет запрошен для SPN kadmin/changepw.Атака может быть нацелена как на пользовательские учётные записи, так и на учётные записи компьютеров.

-RubeusPath.-CreateNewPath).-DC.Выполните dot-source скрипта, чтобы загрузить функцию, а затем вызовите её:
. .\ResetNightmare.ps1
Invoke-ResetNightmare `
-TargetAccount "victim" `
-TargetNewPassword "NewP@ssw0rd!" `
-UPNUser "controlledUser" `
-UPNUserPassword "ControlledP@ss!"
Используйте sAMAccountName (заканчивающийся на $) для -TargetAccount:
Invoke-ResetNightmare `
-TargetAccount 'server$' `
-TargetNewPassword "NewP@ssw0rd!" `
-UPNUser "controlledUser" `
-UPNUserPassword "ControlledP@ss!"
Если у вас есть разрешение на создание объектов в OU/контейнере, вы можете указать DN этого OU/контейнера с помощью -CreateNewPath. Когда он указан, параметры -UPNUser и -UPNUserPassword рассматриваются как учётные данные создаваемой учётной записи, а не существующей учётной записи в домене:
Invoke-ResetNightmare `
-TargetAccount "victim" `
-TargetNewPassword "NewP@ssw0rd!" `
-UPNUser "attackerAcct" `
-UPNUserPassword "AttackerP@ss!" `
-CreateNewPath "OU=Temp,DC=demo,DC=lab"
Добавьте -Computer, чтобы создать/использовать учётную запись компьютера вместо учётной записи пользователя.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ
Этот контент предоставлен исключительно в образовательных и информационных целях. Он предназначен для повышения осведомлённости и ответственного устранения уязвимостей безопасности, которые могут существовать в системах, которыми вы владеете или которые вам разрешено тестировать. Несанкционированное использование этой информации во вредоносных целях, эксплуатация или незаконный доступ строго запрещены. Авторы не поддерживают и не одобряют любую незаконную деятельность и снимают с себя ответственность за любой ущерб, возникший в результате неправомерного использования материалов. Кроме того, авторы не гарантируют точность или полноту контента и не несут ответственности за любой ущерб, возникший в результате его использования.
| Parameter | Required | Description |
|---|
-TargetAccount | Да | sAMAccountName целевой учётной записи, для которой выполняется сброс пароля. При нацеливании на учётную запись компьютера обязательно укажите завершающий $. |
-TargetNewPassword | Да | Новый пароль, который будет установлен для целевой учётной записи. |
-UPNUser | Да | Учётная запись, на которую вы можете записать UPN, или учётная запись, которую нужно создать, если указан -CreateNewPath. |
-UPNUserPassword | Да | Пароль в открытом виде для -UPNUser. |
-Computer | Нет | Рассматривать -UPNUser как учётную запись компьютера (и создавать учётную запись компьютера при совместном использовании с -CreateNewPath). |
-RubeusPath | Нет | Путь к исполняемому файлу Rubeus. По умолчанию используется .\Rubeus.exe. |
-SupportedEncryption | Нет | Поддерживаемый тип шифрования для TGT. По умолчанию используется AES256, что должно работать в большинстве случаев. Если необходимо изменить это значение, поддерживаются следующие значения: DES|RC4|AES128|AES256 |
-CreateNewPath | Нет | DistinguishedName OU/контейнера, в котором у вас есть разрешения на создание объектов. Если указан, параметры -UPNUser и -UPNUserPassword будут учётными данными создаваемого пользователя, а не существующего. |
-DC | Нет | Имя DC, с которым будет работать скрипт. Если не указано, оно определяется автоматически. |