Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-47981 — # PowerShell アセスメントスクリプト CVE-2025-47981(SPNEGO NEGOEX ヒープオーバーフロー)について、カーネルバージョン、PKU2U レジストリキー、公開された SPNEGO ポートを検証することで Windows システムをチェックする PowerShell アセスメントスクリプトです。修復手順と検出ガイダンスを提供します。 | Kitploit
ツール/GitHubGitHub/hkenzokimura/cve-2025-47981
脆弱性スキャナー構成監査ネットワークセキュリティ学習と教育インシデントレスポンス
GitHubhkenzokimura/cve-2025-47981

CVE-2025-47981

# PowerShell アセスメントスクリプト CVE-2025-47981(SPNEGO NEGOEX ヒープオーバーフロー)について、カーネルバージョン、PKU2U レジストリキー、公開された SPNEGO ポートを検証することで Windows システムをチェックする PowerShell アセスメントスクリプトです。修復手順と検出ガイダンスを提供します。

リポジトリを見る
261ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

🔵 CVE-2025-47981 — Windows SPNEGO NEGOEX 脆弱性評価スクリプト

種別: 脆弱性評価 — 検出 / コンプライアンスチェック CVE: CVE-2025-47981 CVSS: 9.8 Critical (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) CWE: CWE-122 — ヒープベースのバッファオーバーフロー 別名: "SPNEGO Nightmare" / "Windows Authentication Wormable RCE" パッチ: KB5062560 | 2025年7月 Patch Tuesday

WindowsシステムがCVE-2025-47981 — SPNEGO Extended Negotiation (NEGOEX) メカニズムにおけるヒープベースのバッファオーバーフローで、認証なしのRCEを許す脆弱性 — に対して脆弱かどうかを検証するPowerShell評価スクリプト。エクスプロイトは実行せず — 露出とパッチ状態のみを評価します。

Developed by: HKK


$ cat ./vulnerability_summary.txt

CVE-2025-47981は、WindowsのSPNEGO認証メカニズムの内部拡張レイヤーであるNEGOEXプロトコルにおけるヒープベースのバッファオーバーフローです。この脆弱性により、認証されていない攻撃者が任意のリモートコードを実行し、システムの完全な制御を取得する可能性があります。

アナリストはすでにこのCVEを「重大な問題になるという不幸な特徴を持つ」と評しており、ワーム化可能 — ユーザーの操作なしに脆弱なシステム間で自動的に拡散する可能性 — とされています。

この脆弱性は、Windows 10 (バージョン1607以降) およびWindows Server 2008 R2からServer 2025まで(Server Core バリアントを含む)に影響し、x64、x86、ARM64アーキテクチャで33以上の異なるWindowsおよびServer構成が脆弱であると確認されています。


$ cat ./technical_background.txt

SPNEGOとは何か、なぜカーネルにあるのか?

SPNEGO (Simple and Protected GSSAPI Negotiation Mechanism) は、認証された各セッションの前にWindowsが使用する認証ハンドシェイクレイヤーです。アプリケーションは、プロトコルを固定せずに認証を必要とすることがよくあります — Windowsはある環境ではKerberos、別の環境ではNTLM、または異なる信頼モデルでは拡張認証メカニズムを使用できます。SPNEGOは、使用する認証プロトコルを決定するネゴシエーションメカニズムです。

Cliente                          Servidor
  │                                │
  │──── SPNEGO Negotiation ────────►│
  │     MechTypeList:               │
  │     [Kerberos, NTLM, NEGOEX]    │
  │                                │
  │◄─── Selected Mechanism ─────────│
  │                                │
  │──── Auth Exchange ─────────────►│  ← overflow aqui no NEGOEX

NEGOEX はSPNEGO内の拡張メカニズムです — PKU2U (ピアツーピア) 認証やその他のカスタムメカニズムのネゴシエーションを可能にします。 この脆弱性は、複数のフラグメントで送信された過大な SPNEGO_TOKEN 構造を処理する ntoskrnl!SpnegoHandleExtended 関数にあり、カーネルヒープのオーバーフローを引き起こします。

PKU2Uがリスクを増幅する理由は?

グループポリシー「ネットワーク セキュリティ: このコンピューターへのPKU2U認証要求をオンラインIDを使用して許可する」が有効になっているシステムでは、リスクが高まります。多くのWindowsデプロイメントでデフォルトで有効になっているこの設定は、ピアツーピア認証を許可することでNEGOEXの攻撃対象領域を拡大し、そうでなければ公開されないエンドポイントでNEGOEXの脆弱なコードパスをアクティブにします。


$ cat ./architecture.txt

┌─────────────────────────────────────────────────────────────────────────┐
│            CVE-2025-47981 ASSESSMENT SCRIPT — FLOW                      │
│                                                                         │
│  ┌──────────────────────────────────────────────────────────────────┐  │
│  │  CHECK 1: Windows Version                                        │  │
│  │  Get-CimInstance Win32_OperatingSystem → .Version               │  │
│  │  Contexto: identifica o build exato para correlação com patch   │  │
│  └──────────────────────────────────────────────────────────────────┘  │
│                              │                                          │
│  ┌──────────────────────────────────────────────────────────────────┐  │
│  │  CHECK 2: ntoskrnl.exe Version                                   │  │
│  │  Get-Item C:\Windows\System32\ntoskrnl.exe                      │  │
│  │  Compare: installed < 10.0.14393.8246 → VULNERÁVEL              │  │
│  │  Compare: installed ≥ 10.0.14393.8246 → KB5062560 aplicado      │  │
│  └──────────────────────────────────────────────────────────────────┘  │
│                              │                                          │
│  ┌──────────────────────────────────────────────────────────────────┐  │
│  │  CHECK 3: PKU2U Registry Key                                     │  │
│  │  HKLM:\SYSTEM\...\Lsa\pku2u\AllowOnlineID                      │  │
│  │  1 → PKU2U habilitado → superfície de ataque ampliada          │  │
│  │  0 → PKU2U desabilitado → vetor PKU2U mitigado                 │  │
│  │  Não existe → configuração padrão (avaliar via GPO)            │  │
│  └──────────────────────────────────────────────────────────────────┘  │
│                              │                                          │
│  ┌──────────────────────────────────────────────────────────────────┐  │
│  │  CHECK 4: Portas SPNEGO Expostas                                 │  │
│  │  Get-NetTCPConnection → 135, 445, 5985, 3389, 80, 443, 25      │  │
│  │  Cada porta aberta = um vetor de entrega do exploit             │  │
│  └──────────────────────────────────────────────────────────────────┘  │
│                              │                                          │
│                    Format-Table -AutoSize                               │
│                    (output legível para relatório de pentest)           │
└─────────────────────────────────────────────────────────────────────────┘

$ cat ./design_decisions.md

1. ntoskrnl.exe によるバージョン確認

$kernelPath = [System.IO.Path]::Combine($env:SystemRoot, "System32\ntoskrnl.exe")
$requiredVersion = "10.0.14393.8246"

$installedVersion = (Get-Item $kernelPath).VersionInfo.FileVersion

if ([version]$installedVersion -lt [version]$requiredVersion) {
    "Vulnerável - Patch ausente ($missingKB)"
}

なぜ ntoskrnl.exe で、Get-HotFix ではないのか?

Get-HotFix はインストール済みKBを一覧表示しますが、既知の制限があります:

  • DISM またはサイレントモードのWindows Updateで適用されたKBを検出しない
  • 一部のシナリオで、アンインストールされたKBが存在するように表示されることがある
  • 実行中の実際のバイナリの状態を反映しない

ntoskrnl.exe のバージョンを直接確認する方が信頼性が高い — このファイルは、KBが実際に適用され、システムが再起動された場合にのみパッチ済みバージョンを受け取ります。再起動が保留中のKBがあるシステムでは、メモリ内に古いバージョンのカーネルが残っています。

[version] キャスト: PowerShellはデフォルトで文字列を辞書順に比較します — "10.0.14393.8246" -lt "10.0.14393.800" は $false (誤り) になります。[version] へのキャストにより、オクテット単位の正しい数値比較が保証されます。

[System.IO.Path]::Combine($env:SystemRoot, ...): ハードコードされた C:\Windows の代わりに SystemRoot を使用 — Windowsが別のドライブにインストールされているシステムに移植可能です。


2. 参照バージョン 10.0.14393.8246

10.0.14393.xxxx  →  Windows 10 version 1607 / Windows Server 2016
         │
         └─ 8246 = build com KB5062560 aplicado

なぜこの特定のビルドなのか?

Windows Server 2016 (ベースビルド 14393) は、パッチ適用に最も重要な環境の1つです — DC、ファイルサーバー、社内コーポレートサービスで広く使用されています。バージョン 8246 は、KB5062560 (2025年7月) 適用後のカーネルビルドに対応します。

他のオペレーティングシステムでは、必要な最小ビルド番号が異なります — スクリプトはOSごとのバージョンテーブルで拡張できます。


3. PKU2U レジストリ — AllowOnlineID

$regPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\pku2u"
$regName = "AllowOnlineID"

このキーは何を制御するのか?

この脆弱性は、主にグループポリシー「オンラインIDを使用したこのコンピューターへのPKU2U認証要求を許可する」がデフォルトで有効になっているシステムに影響します。これはWindows 10バージョン1607以降の場合です。

AllowOnlineID キーは、このグループポリシーのレジストリ表現です。有効 (= 1) の場合、システムはPKU2U認証を受け入れ — オーバーフローを含むNEGOEXコードパスをアクティブにします。

値状態リスク
1PKU2U 有効高 — NEGOEXベクターがアクティブ
0PKU2U 無効低 — ベクターは緩和 (パッチは依然として必要)
存在しないシステムデフォルトGPOに依存 — gpresult /r で確認

-ErrorAction SilentlyContinue: このキーはすべてのシステムに存在するとは限りません — スクリプトはエラーを生成せずに不在を適切に処理します。


4. SPNEGO ポート — 攻撃対象領域

$ports = @(135, 445, 5985, 3389, 80, 443, 25)

攻撃者は、SPNEGO認証を使用するSMB (ポート445/TCP)、RDP (ポート3389/TCP)、HTTP/S (ポート80、443/TCP)、SMTP (ポート25/TCP) などの脆弱なサービスに悪意のあるパケットを送信することで、認証なしでリモートからこの欠陥を悪用できます。

ポートプロトコルSPNEGOの使用目的
135RPC Endpoint MapperRPC認証ネゴシエーション
445SMBファイル共有、名前付きパイプの認証
5985WinRM (HTTP)PowerShell リモーティング、管理
3389RDPリモートデスクトップ認証
80HTTPIIS Windows 認証 (Negotiate)
443HTTPSTLS経由のIIS Windows認証
25SMTPExchange Extended Protection

Get-NetTCPConnection -LocalPort $port は、ローカルシステムでポートが LISTEN 状態にあるかどうかを確認します — 開いている各ポートは、エクスプロイトの独立した配信ベクターを表します。


$ cat ./mitre_mapping.yml

# Perspectiva do ATACANTE (o que o script detecta/previne)
ツールをダウンロード