
Verificador CVE-2026-41089: detecção não autenticada e não destrutiva para o estouro de buffer de pilha CLDAP do Netlogon (CVSS 9.8). Relata se o domínio de um controlador de domínio é longo o suficiente para travar, sem enviar o estouro. A análise verificada por binário que os PoCs públicos erraram.
LongLogon é um verificador de pré-condição não autenticado e não destrutivo para CVE-2026-41089, um estouro de buffer de pilha pré-autenticação no serviço Netlogon do Windows. Sem credenciais e sem enviar o estouro, ele informa se o nome de domínio DNS de um controlador de domínio é longo o suficiente para que o bug o trave.

Em um controlador de domínio com nome normal, não. Os PoCs de exploit públicos para este CVE
(o mais estrelado e as cópias que o seguiram) afirmam travar um controlador de domínio
enviando um nome de usuário longo. Eles não travam um DC sem patch em um
domínio comum, por dois motivos confirmados ao comparar o netlogon.dll anterior e posterior ao patch
e reproduzir a falha em laboratório:
0x16), o que roteia para
a função BuildSamLogonResponseEx com limites seguros. A vulnerável BuildSamLogonResponse
legada só é alcançada com esse bit limpo. LongLogon usa 0x02.User controlado pelo atacante
é limitado a 130 caracteres largos pelo binário, muito aquém do buffer de 528 bytes. Os
bytes que levam a gravação até o cookie de pilha são os próprios nomes DNS longos do servidor,
que nenhuma alteração no payload modifica.Portanto, o exploit popular falha em um domínio comum, e um timeout de recv (que um único
pacote UDP perdido causa em um DC saudável) é interpretado erroneamente como uma falha. LongLogon não é
um desses exploits: é a análise corrigida e verificada por binário, fornecida como
um verificador não destrutivo que nunca envia o estouro. O limite de falha confirmado em laboratório
e o mecanismo completo estão abaixo.
Um estouro de buffer baseado em pilha (CWE-121, CVSS 9.8) no caminho de localização de DC do Netlogon
NlGetLocalPingResponse → BuildSamLogonResponse → NetpLogonPutUnicodeString.
Ao responder a um ping CLDAP ou MAILSLOT, o DC serializa seus próprios nomes de floresta, domínio e
host, além de uma pequena string controlada pelo atacante, em um buffer de pilha fixo de 528 bytes
(ushort local_258[264]), com o cookie de pilha imediatamente após. Quando
os próprios nomes DNS do servidor são longos o suficiente, a gravação cumulativa atinge o
final do buffer, o terminador L'\0' final ultrapassa o cookie, __report_gsfailure
é acionado e lsass.exe morre com STATUS_STACK_BUFFER_OVERRUN (0xc0000409). O
controlador de domínio reinicia. Não autenticado, um pacote UDP.
Enquanto Zerologon (CVE-2020-1472) abusava de um desafio todo zero, LongLogon abusa de um nome de domínio patologicamente longo.
longlogon.py é não destrutivo. Ele envia pings CLDAP benignos com um campo User
mínimo, mede a resposta do construtor legado e informa se a
pré-condição de estouro é válida: se o domínio deste DC é longo o suficiente para que um
DC sem patch trave.
Ele não:
Saber quais de seus DCs estão realmente corrigidos requer uma verificação de versão com credenciais (admin) em toda a frota. Esse é o tipo de coisa que o ADscan automatiza em um engajamento (veja abaixo).
Os únicos bytes controlados pelo atacante que chegam ao buffer vêm do filtro User do CLDAP,
limitado a 130 caracteres largos, muito aquém do buffer de 528 bytes por si só.
Os bytes que levam o cursor até o cookie são os próprios nomes do servidor, que
o atacante não controla. Um DC com nome padrão (corp.local) não pode ser travado. É por isso
que a Microsoft o classifica como "Exploração Menos Provável." Em laboratório, o comprimento mínimo
de domínio DNS para travar o Windows Server 2016 (com um nome de host de 7 caracteres) foi de
98 caracteres.
Com uv, sem configuração. As dependências são declaradas inline
(PEP 723), então isto instala automaticamente rich em um ambiente efêmero:
uv run longlogon.py <dc-ip> <dc-dns-domain>
Ou com pip:
pip install rich
python3 longlogon.py <dc-ip> <dc-dns-domain>
O domínio DNS deve corresponder ao que o DC serve. Não é secreto: rootDSE, DNS reverso e o próprio CLDAP o revelam. A saída é um veredito de pré-condição mais a matemática de preenchimento do buffer por campo.
O roteamento NtVer é importante. A vulnerável BuildSamLogonResponse legada só é
alcançada quando (NtVer & 0xc) == 0 e (NtVer & 0x2) != 0. Tentativas de exploit público
que enviam NtVer=0x16 ou 0x06 definem o bit 2 (0x4) e atingem a função
BuildSamLogonResponseEx com limites seguros, portanto nunca acionam o bug. LongLogon usa 0x02.
Controladores de domínio Windows Server sem patch, de 2012 R2 a 2025. Primeiras compilações corrigidas:
Apenas para pesquisa de segurança autorizada e validação defensiva. Este repositório fornece o verificador de pré-condição não destrutivo, não um travador armado, para um CVE ativamente explorado e com capacidade de propagação. Corrija seus controladores de domínio.
Pesquisa por Yeray Martín Domínguez · ADscan · CVE-2026-41089 · Netlogon · Active Directory · controlador de domínio · estouro de buffer de pilha · CLDAP · não autenticado · pré-autenticação · prova de conceito
| Windows Server | Primeira compilação corrigida |
|---|
| 2016 | 10.0.14393.9140 |
| 2019 | 10.0.17763.8755 |
| 2022 | 10.0.20348.5074 |
| 2022 23H2 | 10.0.25398.2330 |
| 2025 | 10.0.26100.32772 |