
CVE-2026-41089チェッカー:Netlogon CLDAPスタックバッファオーバーフロー(CVSS 9.8)に対する認証不要で非破壊的な検出。オーバーフローを送信せずに、ドメインコントローラのドメインがクラッシュするのに十分な長さかどうかを報告します。公開されているPoCが間違っていたバイナリ検証済みの分析。
LongLogon は、CVE-2026-41089 の認証不要・非破壊的な事前条件チェッカーです。 CVE-2026-41089 は Windows Netlogon サービスにおける認証前のスタックバッファオーバーフローです。 資格情報なしで、かつオーバーフローを送信せずに、ドメインコントローラーの DNS ドメイン名が 十分に長く、このバグがクラッシュを引き起こすかどうかを報告します。

通常の名前のドメインコントローラーでは、いいえ。この CVE の公開 エクスプロイト PoC(最もスターが多いものと、それに続くコピー)は、長いユーザー名を送信することでドメインコントローラーをクラッシュさせると主張しています。しかし、パッチ前後の netlogon.dll を差分比較し、ラボでクラッシュを再現したことにより確認された2つの理由から、通常のドメイン上の未パッチの DC をクラッシュさせることはできません。
0x16)状態で ping を送信し、境界チェック済みの BuildSamLogonResponseEx にルーティングされます。脆弱なレガシー BuildSamLogonResponse は、そのビットがクリアされている場合にのみ到達します。LongLogon は 0x02 を使用します。User フィールドはバイナリによって130ワイド文字に制限されており、528バイトのバッファには遠く及びません。スタッククッキー上に書き込みをもたらすバイトは、サーバー自身の長い DNS 名であり、ペイロードの長さを変更しても変わりません。したがって、一般的なエクスプロイトは通常のドメインでは失敗し、recv のタイムアウト(正常な DC では単一の UDP パケット損失で発生する)が誤ってクラッシュと解釈されます。LongLogon はそれらのエクスプロイトの1つではありません。修正され、バイナリで検証された分析であり、非破壊的なチェッカーとして提供され、オーバーフローを送信することはありません。ラボで確認されたクラッシュ閾値と完全なメカニズムは以下に示します。
Netlogon DC ロケータパス NlGetLocalPingResponse → BuildSamLogonResponse → NetpLogonPutUnicodeString におけるスタックベースのバッファオーバーフロー(CWE-121、CVSS 9.8)です。CLDAP または MAILSLOT ping に応答する際、DC は自身のフォレスト、ドメイン、ホスト名に加えて、攻撃者が制御する小さな文字列を固定の 528バイトのスタックバッファ(ushort local_258[264])にシリアライズし、スタッククッキーがその直後に配置されます。サーバー自身の DNS 名が十分に長い場合、累積的な書き込みがバッファの末尾に達し、末尾の L'\0' ターミネータがクッキーをオーバーランし、__report_gsfailure が発生し、lsass.exe が STATUS_STACK_BUFFER_OVERRUN(0xc0000409)で終了します。ドメインコントローラーが再起動します。認証不要、UDP パケット1つです。
Zerologon(CVE-2020-1472)がすべてゼロのチャレンジを悪用したのに対し、LongLogon は病的に長いドメイン名を悪用します。
longlogon.py は非破壊的です。最小限の User フィールドで無害な CLDAP ping を送信し、レガシービルダーの応答を測定し、オーバーフローの事前条件が成立するかどうか(つまり、この DC のドメインが十分に長いため、未パッチの DC がクラッシュするかどうか)を報告します。
以下のことは行いません。
どの DC が実際にパッチ済みかを知るには、フリート全体でクレデンシャル(管理者)を使用したバージョンチェックが必要です。これは、エンゲージメントにおいて ADscan が自動化する類のものです(以下参照)。
攻撃者が制御できるバイトのうち、バッファに到達するのは CLDAP User フィルタからのものだけであり、130ワイド文字に制限されているため、単独では 528 バイトのバッファには遠く及びません。カーソルをクッキー上に運ぶバイトはサーバー自身の名前であり、攻撃者は制御できません。デフォルトの名前の DC(corp.local)はクラッシュしません。そのため、Microsoft はこれを 「悪用される可能性は低い」 と評価しています。ラボでは、Windows Server 2016(ホスト名7文字)をクラッシュさせるために必要な DNS ドメイン長の最小値は 98文字 でした。
uv を使用すると、ゼロセットアップです。依存関係はインラインで宣言されているため(PEP 723)、一時的な環境に rich が自動インストールされます。
uv run longlogon.py <dc-ip> <dc-dns-domain>
または pip を使用:
pip install rich
python3 longlogon.py <dc-ip> <dc-dns-domain>
DNS ドメインは DC が提供するものと一致する必要があります。これは秘密ではありません。rootDSE、逆引き DNS、CLDAP 自体がすべてそれを明らかにします。出力は事前条件の判定結果と、フィールドごとのバッファ充填計算です。
NtVer のルーティングが重要です。 脆弱なレガシー BuildSamLogonResponse に到達するのは、(NtVer & 0xc) == 0 かつ (NtVer & 0x2) != 0 の場合のみです。NtVer=0x16 や 0x06 を送信する公開エクスプロイトの試みはビット2(0x4)をセットし、境界チェック済みの BuildSamLogonResponseEx にヒットするため、バグをトリガーすることはありません。LongLogon は 0x02 を使用します。
未パッチの Windows Server ドメインコントローラー、2012 R2 から 2025 まで。最初のパッチ適用ビルド:
許可されたセキュリティ研究および防御的な検証のみを目的としています。このリポジトリは、非破壊的な事前条件チェッカーを提供しており、武器化されたクラッシャーではありません。これは現在活発に悪用され、ワーム化可能な CVE に対するものです。ドメインコントローラーにパッチを適用してください。
研究: Yeray Martín Domínguez · ADscan · CVE-2026-41089 · Netlogon · Active Directory · ドメインコントローラー · スタックバッファオーバーフロー · CLDAP · 認証不要 · 認証前 · 概念実証
| Windows Server | 最初のパッチ適用ビルド |
|---|
| 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 |