
CVE-2017-0144

"Un exploit. Decenas de familias de malware. Miles de millones en daños."
CVE-2017-0144 es una vulnerabilidad crítica de ejecución remota de código en la implementación del servidor SMBv1 en Microsoft Windows. El exploit conocido como EternalBlue aprovechó esta falla y se utilizó en ataques de alto impacto (especialmente WannaCry).
| # | Malware | Tipo | Primera detección | Actor | Daños | Notas |
|---|---|---|---|---|---|---|
| 1 | WannaCry | Ransomware | 12 de mayo de 2017 | Lazarus Group (Corea del Norte) | $4–8B | Interruptor de apagado (killswitch): iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com |
| 2 | NotPetya | Wiper (disfrazado de ransomware) | 27 de junio de 2017 | Sandworm (Rusia) | $10B+ | Usó Mimikatz + EternalBlue + PSEXEC |
| 3 | Bad Rabbit | Ransomware | 24 de octubre de 2017 | Indrik Spider | Regional | Falsa actualización de Flash mediante descarga automática (drive-by) |
| 4 | Uiwix | Ransomware | mayo de 2017 | Desconocido | Bajo | Sin interruptor de apagado (killswitch), más sigiloso que WannaCry |
| 5 | EternalRocks | Gusano | mayo de 2017 | Desconocido | Medio | 7 herramientas de la NSA (incl. DoublePulsar) |
| 6 | Adylkuzz | Criptominero | mayo de 2017 | Desconocido | Alto (silencioso) | Minaba Monero antes que WannaCry |
| 7 | Retefe | Troyano bancario | 2017–2018 | Desconocido | Bancos de la UE | Usaba EternalBlue para movimiento lateral |
| 8 | TrickBot | Malware modular | 2017–2021 | Wizard Spider | Global | Distribuía Ryuk mediante EternalBlue |
| 9 | Emotet | Loader | 2017–2021 | TA542 | Global | Usado como vía de entrada para Cobalt Strike |
| 10 | Clop / Dridex | Ransomware | 2019–2025 | TA505 | Sanidad, Gobiernos | Sigue activo en 2025 |
| Herramienta | Lanzamiento | Características |
|---|---|---|
| EternalBlue (Original) | Abr 2017 (Shadow Brokers) | RCE en SMBv1 |
| DoublePulsar | Abr 2017 | Implante de puerta trasera (ring0) |
| EternalRomance | Abr 2017 | Variante de SMBv3 |
| EternalChampion | Abr 2017 | Ruta SMB alternativa |
| Módulo de Metasploit | May 2017 | exploit/windows/smb/ms17_010_eternalblue |
| FuzzBunch | Abr 2017 | Marco de explotación de la NSA |
| Impacket + PSEXEC | 2017–2025 | Explotación de SMB en Python |
"Un paquete malformado. Acceso total a SYSTEM. Sin inicio de sesión. Sin clic."
[Attacker]
│
├──▶ Sends crafted SMBv1 **Trans2** request
│ → Triggers **heap overflow** in `srv!SrvOS2FeaListSizeToNt`
│
├──▶ Overwrites function pointers → **kernel shellcode**
│
└──▶ Executes **DoublePulsar** backdoor → **Ring-0 payload**
(e.g., WannaCry `mssecsvc.exe`)
| Requisito | Detalles |
|---|---|
| Objetivo | Windows con SMBv1 habilitado (por defecto antes de Windows 10) |
| Puerto abierto | 445/TCP (o 139/TCP mediante NetBIOS) |
| Sin autenticación | Sin autenticar: no se necesita nombre de usuario ni contraseña |
| Arquitectura | x86 o x64 (ambas compatibles) |
| Estado del parche | Sin parchear (anterior a MS17-010) |
SMB_COM_NEGOTIATE → Client sends dialect list
Server responds: SMBv1 supported → Proceed
¿Por qué? Confirma que SMBv1 está activo.
\\TARGET\IPC$ → Anonymous share for SMB pipes
Propósito: establece una sesión para enviar solicitudes de transacción.
SESSION_SETUPFEALIST {
SizeOfListInBytes = 0xFFFF (or large value)
...
}
Desencadenante del fallo:
SrvOS2FeaListSizeToNt()confía en este tamaño sin verificar los límites.
FEA {
AttributeNameLength = 0x00
AttributeName = "A" * 0x1000 → Overflow buffer
}
Heap Spray: asigna grandes bloques para controlar la disposición de la memoria.
srv!SrvOS2FeaListSizeToNt(
PFEALIST FeaList, // attacker-controlled
PULONG pNtFeaListSize // output pointer
)
{
// No validation of FeaList->SizeOfListInBytes
memcpy(dest, src, FeaList->SizeOfListInBytes); // BOOM
}
Free)KeUserModeCallback)mssecsvc.exe)
0x00120034)Ping: 0x0002C001Exec: 0x0002C002 + payloadEjemplo de WannaCry:
EternalBlue → DoublePulsar → mssecsvc.exe → tasksche.exe → Encrypts files
SMB Header
└── Command: 0x32 (TRANSACTION2)
└── Setup: 0x000E (SESSION_SETUP)
└── Parameter: TotalDataCount = 0x1000
└── Data:
[FEALIST]
SizeOfListInBytes = 0x1100
[FEA #1] NameLen=0, Name="A"*0x1000
[FEA #2] ...
[GROOM x100] → Spray heap
[OVERFLOW] → Overwrite pool
[SHELLCODE] → x64 ring0