Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

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

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 アセスメントスクリプトです。修復手順と検出ガイダンスを提供します。

リポジトリを見る
15時間16分前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

🔵 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は、使用する認証プロトコルを決定するネゴシエーションメカニズムです。

root@kitploit:~
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

root@kitploit:~
┌─────────────────────────────────────────────────────────────────────────┐
│            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 によるバージョン確認

root@kitploit:~
$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

root@kitploit:~
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

root@kitploit:~
$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 ポート — 攻撃対象領域

root@kitploit:~
$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

root@kitploit:~
# Perspectiva do ATACANTE (o que o script detecta/previne)

tactic: Initial Access
  - T1190   # Exploit Public-Facing Application
            # RCE via SPNEGO heap overflow sem autenticação
            # Vetor: qualquer porta com Negotiate auth (445, 5985, 3389...)

tactic: Execution
  - T1203   # Exploitation for Client Execution
            # Heap overflow em ntoskrnl!SpnegoHandleExtended
            # Controle de RIP/EIP via kernel heap corruption

tactic: Lateral Movement
  - T1210   # Exploitation of Remote Services
            # Wormable: explora outros hosts via SMB/RPC sem credenciais

  - T1550.002 # Pass-the-Hash
              # Pós-RCE: acesso SYSTEM permite extração de hashes LSASS

tactic: Privilege Escalation
  - T1068   # Exploitation for Privilege Escalation
            # Buffer overflow em contexto do kernel → ring 0 imediato

# Perspectiva do DEFENSOR (o que o script assessment executa)

tactic: Discovery (Blue Team)
  - T1082   # System Information Discovery
            # Coleta versão do OS e ntoskrnl.exe para avaliação de patch

  - T1012   # Query Registry
            # Verifica HKLM:\...\pku2u\AllowOnlineID

  - T1049   # System Network Connections Discovery
            # Get-NetTCPConnection para mapear portas SPNEGO expostas

$ cat ./detection_opportunities.md

エクスプロイト試行の検出

root@kitploit:~
# Anomalia de autenticação NEGOEX — pacotes SPNEGO oversized
# Fonte: Windows Security Event Log / ETW

EventID: 4625 (Logon Failure) com SubStatus 0xC000006D
  + Origem: hosts externos
  + Frequência: alta (scan/exploit tentatives)
  + TargetUserName: ANONYMOUS LOGON OU vazio

# Alternativa: Sysmon Event 3 (Network Connection)
EventID: 3
Condição:
  DestinationPort: 445 OU 5985 OU 135
  Initiated: false (conexão inbound)
  Image: System OU lsass.exe
root@kitploit:~
# Crash do kernel pós-exploit malsucedido
# Fonte: Windows Event Log → System

EventID: 1001 (BugCheck)
  BugCheckCode: 0x00000050 (PAGE_FAULT_IN_NONPAGED_AREA)
  OU
  BugCheckCode: 0x0000007E (SYSTEM_THREAD_EXCEPTION_NOT_HANDLED)
  Context: Crash em ntoskrnl.exe → possível exploit attempt

ネットワークレベル検出

root@kitploit:~
# Snort/Suricata — SPNEGO token oversized (conceitual)
alert tcp any any -> $HOME_NET [445,5985,3389] (
  msg:"CVE-2025-47981 SPNEGO NEGOEX oversized token";
  content:"|60|";           # SPNEGO OID marker
  content:"|a0|";           # MechTypeList marker
  dsize:>4096;              # tokens legítimos raramente excedem 4KB
  threshold:type both, track by_src, count 3, seconds 10;
  sid:2025479810;
)

$ cat ./remediation.md

root@kitploit:~
PRIORIDADE: CRÍTICA — Patch imediato (CVSS 9.8, wormable)

1. PATCH (ação principal):
   Windows Update → KB5062560 (Julho 2025 Patch Tuesday)
   WSUS: aprovar KB5062560 para todos os sistemas Windows 10 1607+
   REINICIAR após o patch — ntoskrnl.exe só é substituído após reboot

2. VERIFICAÇÃO PÓS-PATCH:
   Executar este script novamente
   Resultado esperado:
     ntoskrnl.exe Installed Version: 10.0.14393.8246 (ou maior)
     Vulnerability Result: Seguro - Patch aplicado

3. MITIGAÇÃO TEMPORÁRIA (se patch imediato for inviável):
   Desabilitar PKU2U via Group Policy:
     Computer Configuration → Windows Settings → Security Settings →
     Local Policies → Security Options →
     "Network security: Allow PKU2U authentication requests..." → DISABLED
   
   OU via registry:
     Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\pku2u"
       -Name AllowOnlineID -Value 0

4. BLOQUEIO DE REDE (defense-in-depth):
   Firewall: restringir inbound 135, 445, 5985 a hosts autorizados
   Segmentar DCs e servidores críticos em VLANs com ACLs rígidas

5. PRIORIDADE ESPECIAL — Domain Controllers:
   DCs expõem todas as portas listadas (RPC, SMB, LDAP)
   Wormable + DC comprometido = comprometimento completo do domínio AD
   Patch DCs na primeira janela disponível

$ cat ./usage.sh

root@kitploit:~
# Executar o script de assessment (não requer privilégios de admin para leitura básica,
# mas alguns checks de registry podem precisar de elevação)
powershell.exe -ExecutionPolicy Bypass -File cve_2025_47981_check.ps1
root@kitploit:~
# Output esperado em sistema VULNERÁVEL:
Name                              Value
----                              -----
ntoskrnl.exe Installed Version    10.0.14393.7906
ntoskrnl.exe Required Version     10.0.14393.8246
PKU2U AllowOnlineID               1
Portas SPNEGO abertas             {135, 445, 5985, 3389}
Vulnerability Result              Vulnerável - Patch ausente (KB5062560)
Windows Version                   10.0.14393.7906

# Output esperado em sistema PATCHADO:
Vulnerability Result              Seguro - Patch aplicado
PKU2U AllowOnlineID               0

$ cat ./affected_versions.txt

root@kitploit:~
AFETADOS (33+ configurações):
  Windows 10:      1607, 1809, 21H2, 22H2
  Windows 11:      22H2, 23H2, 24H2
  Windows Server:  2008 R2, 2012, 2012 R2, 2016, 2019, 2022, 2025
  Arquiteturas:    x64, x86, ARM64
  Server Core:     Sim (todas as versões acima)

FATOR DE RISCO ELEVADO:
  PKU2U GPO habilitada (padrão em Win10 1607+)
  Portas 135/445/5985 acessíveis de redes externas ou não confiáveis

PATCH:
  KB5062560  →  July 2025 Patch Tuesday
  ntoskrnl.exe mínimo → 10.0.14393.8246 (Windows Server 2016)
  Verificar builds específicos por versão em: msrc.microsoft.com

$ cat ./lessons_learned.txt

root@kitploit:~
[+] Comparar [version] em vez de string evita falsos negativos em comparações de build
[+] ntoskrnl.exe é fonte primária de verdade para estado de patch — mais confiável que Get-HotFix
[+] PKU2U AllowOnlineID é o amplificador do risco — sistemas sem ele têm superfície reduzida
[+] Get-NetTCPConnection mapeia rapidamente a superfície de ataque exposta localmente
[+] Format-Table -AutoSize gera output pronto para copiar em relatório de pentest
[-] Script verifica apenas Windows Server 2016 (14393) — estender para outros builds é necessário
[-] Não verifica estado da GPO via gpresult — registry pode divergir da política efetiva
[-] Não testa conectividade remota — apenas verifica se as portas estão abertas localmente
[-] Sem output em JSON/CSV — difícil integrar em pipelines de compliance automatizados
[→] Melhorias: tabela de versões por OS, output em JSON, verificação remota via Invoke-Command,
    integração com Qualys/Tenable para correlação de vulnerabilidade

CVE Assessment · CVSS 9.8 · Wormable · July 2025 Patch Tuesday · Detection only · No exploit

ツールをダウンロード