
CVE-2017-0144

« Un exploit. Des dizaines de familles de malwares. Des milliards de dégâts. »
CVE-2017-0144 est une vulnérabilité critique d'exécution de code à distance dans l'implémentation du serveur SMBv1 de Microsoft Windows. L'exploit connu sous le nom d'EternalBlue a abusé de cette faille et a été utilisé dans des attaques à fort impact (notamment WannaCry).
| # | Malware | Type | Première apparition | Acteur | Dégâts | Notes |
|---|---|---|---|---|---|---|
| 1 | WannaCry | Rançongiciel | 12 mai 2017 | Lazarus Group (RPDC) | 4–8 milliards $ | Killswitch : iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com |
| 2 | NotPetya | Wiper (déguisé en rançongiciel) | 27 juin 2017 | Sandworm (Russie) | 10 milliards $+ | A utilisé Mimikatz + EternalBlue + PSEXEC |
| 3 | Bad Rabbit | Rançongiciel | 24 oct. 2017 | Indrik Spider | Régional | Drive-by via fausse mise à jour Flash |
| 4 | Uiwix | Rançongiciel | mai 2017 | Inconnu | Faible | Pas de killswitch, plus discret que WannaCry |
| 5 | EternalRocks | Ver | mai 2017 | Inconnu | Moyen | 7 outils NSA (dont DoublePulsar) |
| 6 | Adylkuzz | Cryptomineur | mai 2017 | Inconnu | Élevé (silencieux) | Miné du Monero avant WannaCry |
| 7 | Retefe | Cheval de Troie bancaire | 2017–2018 | Inconnu | Banques UE | A utilisé EternalBlue pour le mouvement latéral |
| 8 | TrickBot | Malware modulaire | 2017–2021 | Wizard Spider | Mondial | A déposé Ryuk via EternalBlue |
| 9 | Emotet | Chargeur | 2017–2021 | TA542 | Mondial | Utilisé comme point d'entrée pour Cobalt Strike |
| 10 | Clop / Dridex | Rançongiciel | 2019–2025 | TA505 | Santé, Gouvernement | Encore actif en 2025 |
| Outil | Date de sortie | Fonctionnalités |
|---|---|---|
| EternalBlue (Original) | Avr. 2017 (Shadow Brokers) | RCE SMBv1 |
| DoublePulsar | Avr. 2017 | Implant backdoor (ring0) |
| EternalRomance | Avr. 2017 | Variante SMBv3 |
| EternalChampion | Avr. 2017 | Chemin SMB alternatif |
| Module Metasploit | Mai 2017 | exploit/windows/smb/ms17_010_eternalblue |
| FuzzBunch | Avr. 2017 | Framework d'exploitation NSA |
| Impacket + PSEXEC | 2017–2025 | Exploitation SMB en Python |
« Un paquet malformé. Un accès SYSTEM complet. Aucune connexion. Aucun clic. »
[Attaquant]
│
├──▶ Envoie une requête **Trans2** SMBv1 fabriquée
│ → Déclenche un **dépassement de tas** dans `srv!SrvOS2FeaListSizeToNt`
│
├──▶ Écrase les pointeurs de fonction → **shellcode noyau**
│
└──▶ Exécute la backdoor **DoublePulsar** → **Payload Ring-0**
(ex. WannaCry `mssecsvc.exe`)
| Exigence | Détails |
|---|---|
| Cible | Windows avec SMBv1 activé (par défaut avant Windows 10) |
| Port ouvert | 445/TCP (ou 139/TCP via NetBIOS) |
| Pas d'authentification | Non authentifié — aucun nom d'utilisateur/mot de passe requis |
| Architecture | x86 ou x64 (les deux supportées) |
| État du correctif | Non corrigé (avant MS17-010) |
SMB_COM_NEGOTIATE → Le client envoie la liste des dialectes
Le serveur répond : SMBv1 supporté → Continuer
Pourquoi ? Confirme que SMBv1 est actif.
\\CIBLE\IPC$ → Partage anonyme pour les pipes SMB
Objectif : Établir une session pour envoyer des requêtes de transaction.
SESSION_SETUPFEALIST {
SizeOfListInBytes = 0xFFFF (ou grande valeur)
...
}
Déclenchement du bug :
SrvOS2FeaListSizeToNt()fait confiance à cette taille sans vérification des limites.
FEA {
AttributeNameLength = 0x00
AttributeName = "A" * 0x1000 → Tampon en dépassement
}
Heap Spray : Alloue de gros blocs pour contrôler la disposition mémoire.
srv!SrvOS2FeaListSizeToNt(
PFEALIST FeaList, // contrôlé par l'attaquant
PULONG pNtFeaListSize // pointeur de sortie
)
{
// Aucune validation de FeaList->SizeOfListInBytes
memcpy(dest, src, FeaList->SizeOfListInBytes); // BOOM
}
Free)KeUserModeCallback)mssecsvc.exe)
0x00120034)Ping : 0x0002C001Exec : 0x0002C002 + payloadExemple WannaCry :
EternalBlue → DoublePulsar → mssecsvc.exe → tasksche.exe → Chiffre les fichiers
En-tête SMB
└── Commande : 0x32 (TRANSACTION2)
└── Setup : 0x000E (SESSION_SETUP)
└── Paramètre : TotalDataCount = 0x1000
└── Données :
[FEALIST]
SizeOfListInBytes = 0x1100
[FEA #1] NameLen=0, Name="A"*0x1000
[FEA #2] ...
[GROOM x100] → Spray du tas
[OVERFLOW] → Écrase le pool
[SHELLCODE] → x64 ring0