Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2025-47981 — Script d'évaluation PowerShell qui vérifie les systèmes Windows pour CVE-2025-47981 (débordement de tas SPNEGO NEGOEX) en vérifiant la version du noyau, la clé de registre PKU2U et les ports SPNEGO exposés. Fournit des étapes de remédiation et des conseils de détection. | Kitploit
Outils/GitHubGitHub/hkenzokimura/cve-2025-47981
Scanners de VulnérabilitésAudit de ConfigurationSécurité RéseauApprentissage et ÉducationRéponse aux Incidents
GitHubhkenzokimura/cve-2025-47981

CVE-2025-47981

Script d'évaluation PowerShell qui vérifie les systèmes Windows pour CVE-2025-47981 (débordement de tas SPNEGO NEGOEX) en vérifiant la version du noyau, la clé de registre PKU2U et les ports SPNEGO exposés. Fournit des étapes de remédiation et des conseils de détection.

Voir le dépôt
il y a 15h 16mPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

🔵 CVE-2025-47981 — Script d'évaluation de vulnérabilité Windows SPNEGO NEGOEX

Type : Évaluation de vulnérabilité — Détection / Vérification de conformité CVE : CVE-2025-47981 CVSS : 9.8 Critique (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) CWE : CWE-122 — Dépassement de tampon basé sur le tas Alias : « SPNEGO Nightmare » / « Windows Authentication Wormable RCE » Correctif : KB5062560 | Patch Tuesday de juillet 2025

Script PowerShell d'évaluation qui vérifie si un système Windows est vulnérable au CVE-2025-47981 — dépassement de tampon basé sur le tas dans le mécanisme SPNEGO Extended Negotiation (NEGOEX) permettant une exécution de code à distance sans authentification. N'exécute pas d'exploit — évalue uniquement l'exposition et l'état du correctif.

Développé par : HKK


$ cat ./vulnerability_summary.txt

CVE-2025-47981 est un dépassement de tampon basé sur le tas dans le protocole NEGOEX — la couche d'extension interne du mécanisme d'authentification SPNEGO de Windows. La vulnérabilité permet à des attaquants non authentifiés d'exécuter du code arbitraire à distance, obtenant potentiellement un contrôle total du système.

Les analystes ont déjà décrit ce CVE comme ayant « les caractéristiques malheureuses de devenir un problème significatif », avec un potentiel wormable — capable de se propager automatiquement entre les systèmes vulnérables sans interaction de l'utilisateur.

La vulnérabilité affecte Windows 10 (version 1607 et ultérieures) et tous les Windows Server de 2008 R2 jusqu'à Server 2025, y compris les variantes Server Core — plus de 33 configurations distinctes de Windows et Server confirmées vulnérables sur les architectures x64, x86 et ARM64.


$ cat ./technical_background.txt

Qu'est-ce que SPNEGO et pourquoi est-il dans le noyau ?

SPNEGO (Simple and Protected GSSAPI Negotiation Mechanism) est la couche de négociation d'authentification que Windows utilise avant chaque session authentifiée. Les applications ont souvent besoin d'authentification sans fixer un protocole — Windows peut utiliser Kerberos dans un environnement, NTLM dans un autre, ou un mécanisme d'authentification étendu dans un modèle de confiance différent. SPNEGO est le mécanisme de négociation qui décide quel protocole d'authentification utiliser.

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

NEGOEX est le mécanisme d'extension au sein de SPNEGO — il permet de négocier les authentifications PKU2U (pair-à-pair) et d'autres mécanismes personnalisés. La vulnérabilité se trouve dans la fonction ntoskrnl!SpnegoHandleExtended, qui traite des structures SPNEGO_TOKEN surdimensionnées envoyées en plusieurs fragments, provoquant un dépassement de tampon dans le tas du noyau.

Pourquoi PKU2U amplifie-t-il le risque ?

Le risque est élevé sur les systèmes où la stratégie de groupe « Network security: Allow PKU2U authentication requests to this computer to use online identities » est activée. Cette configuration, activée par défaut dans de nombreux déploiements Windows, amplifie la surface d'attaque de NEGOEX en permettant l'authentification pair-à-pair qui active le chemin de code vulnérable de NEGOEX sur des points de terminaison qui ne l'exposeraient pas autrement.


$ 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. Vérification de version via 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)"
}

Pourquoi ntoskrnl.exe et non Get-HotFix ?

Get-HotFix liste les KB installés, mais présente des limitations connues :

  • Ne détecte pas les KB appliqués via DISM ou Windows Update en mode silencieux
  • Peut afficher des KB désinstallés comme présents dans certains scénarios
  • Ne reflète pas l'état réel du binaire en cours d'exécution

Vérifier la version de ntoskrnl.exe directement est plus fiable — le fichier ne reçoit la version corrigée que lorsque le KB a été effectivement appliqué et le système redémarré. Un système avec un KB en attente de redémarrage aura toujours l'ancienne version du noyau en mémoire.

Cast [version] : PowerShell compare les chaînes lexicographiquement par défaut — "10.0.14393.8246" -lt "10.0.14393.800" serait $false (incorrect). Le cast vers [version] garantit une comparaison numérique correcte par octet.

[System.IO.Path]::Combine($env:SystemRoot, ...) : utilise SystemRoot au lieu de C:\Windows codé en dur — portable pour les systèmes avec Windows installé sur des lecteurs différents.


2. Version de référence 10.0.14393.8246

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

Pourquoi cette build spécifique ?

Windows Server 2016 (build de base 14393) est l'un des environnements les plus critiques pour les correctifs — largement utilisé sur les contrôleurs de domaine, les serveurs de fichiers et les services internes d'entreprise. La version 8246 correspond à la build du noyau après l'application du KB5062560 (juillet 2025).

Pour les autres systèmes d'exploitation, le numéro de build minimal requis est différent — le script peut être étendu avec un tableau de versions par OS.


3. Registre PKU2U — AllowOnlineID

root@kitploit:~
$regPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\pku2u"
$regName = "AllowOnlineID"

Que contrôle cette clé ?

La vulnérabilité affecte principalement les systèmes où la stratégie de groupe « Allow PKU2U authentication requests to this computer to use online identities » est activée par défaut, ce qui est le cas pour Windows 10 version 1607 et ultérieures.

La clé AllowOnlineID est la représentation dans le registre de cette stratégie de groupe. Lorsqu'elle est activée (= 1), le système accepte les authentifications PKU2U — activant le chemin de code de NEGOEX qui contient le dépassement de tampon.

ValeurÉtatRisque
1PKU2U activéÉLEVÉ — vecteur NEGOEX activé
0PKU2U désactivéFAIBLE — vecteur atténué (correctif toujours nécessaire)
N'existe pasDéfaut du systèmeDépend de la GPO — vérifier via gpresult /r

-ErrorAction SilentlyContinue : la clé peut ne pas exister sur tous les systèmes — le script gère gracieusement l'absence sans générer d'erreur.


4. Ports SPNEGO — Surface d'attaque

root@kitploit:~
$ports = @(135, 445, 5985, 3389, 80, 443, 25)

Les attaquants peuvent exploiter la faille à distance sans authentification en envoyant des paquets malveillants à des services vulnérables tels que SMB (port 445/TCP), RDP (port 3389/TCP), HTTP/S (ports 80, 443/TCP) et SMTP (port 25/TCP) qui utilisent l'authentification SPNEGO.

PortProtocoleSPNEGO utilisé pour
135RPC Endpoint MapperNégociation d'authentification RPC
445SMBAuthentification des partages de fichiers, named pipes
5985WinRM (HTTP)PowerShell remoting, gestion
3389RDPAuthentification Remote Desktop
80HTTPAuthentification Windows IIS (Negotiate)
443HTTPSAuthentification Windows IIS via TLS
25SMTPExchange Extended Protection

Get-NetTCPConnection -LocalPort $port vérifie si le port est en LISTEN sur le système local — chaque port ouvert représente un vecteur de livraison indépendant pour l'exploit.


$ 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

Détection de tentative d'exploit

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

Détection au niveau réseau

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

Télécharger l’outil