
CVE-2026-41089 Netlogon CLDAPの事前認証PoC。UDP/389を介したスタックオーバーフローにより、LSASSのクラッシュ/DCの再起動を引き起こします。エクスプロイトスクリプト、根本原因分析、検出、緩和策のガイダンスを含みます。
██████╗██╗ ██╗███████╗ ██╗ ██╗ ██╗ ██████╗ ██████╗
██╔════╝██║ ██║██╔════╝ ██║ ██║███║██╔═████╗██╔═████╗
██║ ██║ ██║█████╗ ███████║╚██║██║██╔██║██║██╔██║
██║ ╚██╗ ██╔╝██╔══╝ ██╔══██║ ██║████╔╝██║████╔╝██║
╚██████╗ ╚████╔╝ ███████╗ ██║ ██║ ██║╚██████╔╝╚██████╔╝
╚═════╝ ╚═══╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝
CLDAP スタックバッファオーバーフローによる Windows Netlogon リモートコード実行
パッチ未適用の Windows ドメインコントローラ上の LSASS 内にある 528 バイトのスタックバッファは、ポート 389 に送信された 1 つの細工された UDP パケットでオーバーフローします。LSASS がクラッシュし、DC は約 60 秒後に再起動します。資格情報は不要です。
| 攻撃ベクトル | UDP 389 (CLDAP)、事前認証、資格情報ゼロ |
| 影響 | LSASS クラッシュ、DC 再起動、RCE の可能性 |
| CWE | CWE-121 (スタックベースのバッファオーバーフロー) |
| CVSS ベクトル | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 公開日 | 2026 年 5 月 12 日、Microsoft による |
python3 poc.py 10.0.50.21 corp.local
PoC は通常の ping を送信し、次に 130 文字のユーザー名を含むオーバーフロー用 ping を送信し、最後に DC が生存しているか確認します。合計約 10 秒です。
ドメインコントローラとして動作する Windows Server のバージョン:
| サーバーバージョン | 修正バージョン |
|---|---|
| 2012 / 2012 R2 | ESU 限定パッチ |
| 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 |
NlGetLocalPingResponse は 528 バイトのスタックバッファを割り当て、それを BuildSamLogonResponse に渡します。この関数は NetpLogonPutUnicodeString を呼び出し、サーバー名、ドメイン名、GUID、および攻撃者が制御するユーザー名をバッファに書き込みます。
バグの内容: NetpLogonPutUnicodeString は最大長をバイト単位で受け取りますが、それを WCHAR 数として読み取ります。この経路を通じて書き込まれるすべての文字列は、想定の約 2 倍の領域を占有します。CLDAP フィルタ内の "User" フィールド (最大 130 wchar、ワイヤ上では 260 バイト) により、合計書き込み量が 528 バイトの境界を超えます。
I_NetLogonLdapLookupEx
-> NlGetLocalPingResponse // 528-byte stack buffer
-> LogonRequestHandler
-> BuildSamLogonResponse
-> NetpLogonPutUnicodeString // byte/WCHAR size confusion
python3 poc.py <target_ip> <domain_name> [options]
| フラグ | 説明 | デフォルト |
|---|---|---|
-l | ユーザー名の長さ (文字数) | 130 |
-t | UDP recv タイムアウト (秒) | 5 |
-d | オーバーフローと生存確認の間の遅延 (秒) | 3 |
# Connectivity test (short username, no overflow)
python3 poc.py 10.0.50.21 corp.local
# Default overflow attempt
python3 poc.py 10.0.50.21 corp.local -l 130
# Larger payload, longer timeout for slow networks
python3 poc.py 10.0.50.21 corp.local -l 200 -t 10
Python 3.8 以降。サードパーティ製パッケージは不要です。
このオーバーフローは DoS (LSASS クラッシュ、DC 再起動) を引き起こします。スタック破壊により RCE が可能になる可能性がありますが、この PoC は DoS の範囲に留めています。
ネットワーク。 "User" フィルタ属性が 20〜30 文字を超える CLDAP 検索要求を探します。通常の DC ロケータ ping は短いサービスアカウント名を使用します。
ホスト。 netlogon.dll に関連する LSASS クラッシュ (イベント ID 1000) に注意してください。Netlogon のデバッグログを有効にします:
nltest /dbflag:0x2080ffff
mov edx, 0x40 により最大ユーザー名長が半分になります)法的免責事項。 このコードは、許可されたセキュリティ研究と教育のために存在します。所有しているシステム、または書面によるテスト許可を得たシステムに対してのみテストしてください。コンピュータシステムへの不正アクセスは、CFAA およびほとんどの法域における同等の法律に違反します。