Qué hacer si tu sitio WordPress muestra contenido malicioso
Cuando analizo un sitio WordPress comprometido, lo primero que veo es el pánico del propietario. Y es comprensible: tu web muestra anuncios raros, redirige a sitios de apuestas, o peor aún, Google la ha marcado como peligrosa. Te digo por experiencia que es recuperable, pero necesitas actuar ya.
El contenido malicioso en WordPress no aparece por arte de magia. Detrás hay un ataque real: un plugin vulnerable, una contraseña débil, o un backdoor que se coló hace semanas sin que lo vieras. En este artículo te muestro exactamente qué hacer para identificarlo, limpiarlo y evitar que vuelva a pasar.
Síntomas de que tu WordPress tiene contenido malicioso
No siempre es evidente. A veces el malware es muy discreto. Lo que recomiendo siempre es que verifiques estos indicadores:
- Redirecciones extrañas: Cuando entras a tu web, te lleva a casinos, sitios de phishing o descargadores de malware. Esto es típico de backdoors o plugins inyectados.
- Contenido fantasma: Ves posts o páginas que nunca creaste. Muchas veces están ocultos en el front-end pero indexados en Google (spam SEO).
- Anuncios intrusivos: Publicidad de criptomonedas, préstamos rápidos o medicamentos sin licencia. Generalmente inyectada vía JavaScript malicioso.
- Alerta de Google Search Console: «Sitio comprometido detectado» o «Contenido no deseado». Google es bastante fiable en esto.
- Rendimiento lento: El servidor va a paso de tortuga. Un cryptominer consume CPU constantemente.
- Cambios en wp-config.php o .htaccess: Líneas extrañas, dominios raros, código ofuscado. Eso no lo pusiste tú.
- Usuarios admin que no reconoces: En Usuarios de WordPress aparecen cuentas que nunca creaste. Backdoor clásico.
Paso 1: Aislamiento inmediato (antes de tocar nada)
Aquí es donde muchos se equivocan. Si empiezas a borrar sin estrategia, puedes perder logs valiosos o dejar el backdoor activo. Lo que hago siempre es:
Desactiva el sitio sin eliminarlo: Reemplaza el index.php de tu web con una página estática que diga «Sitio en mantenimiento». Esto detiene el malware sin borrarlo.
Accede al servidor por SSH (no por FTP): FTP envía contraseñas sin cifrar. Usa SSH con clave pública:
ssh usuario@tuprovedor.com
Haz una copia de seguridad completa del servidor: Aunque esté comprometido, la necesitarás para forense o recuperación. Descarga /home/usuario/public_html completo:
scp -r usuario@tuprovedor.com:/home/usuario/public_html ./backup-malware
Revisa logs de acceso: En /var/log/apache2/access.log (o nginx/access.log) verás las IPs y URLs que gatillaron el ataque. Busca patrones de inyección SQL o RFI:
tail -500 /var/log/apache2/access.log | grep -E «(union|select|script|shell)»
Paso 2: Identificar el vector de ataque
Antes de limpiar, necesito saber cómo entraron. Esto es crítico. Las causas principales que veo en mi trabajo:
Plugins o temas desactualizados (60% de casos): Es el camino más fácil. Un plugin viejo tiene CVEs públicas que cualquier bot automatizado explota. Accede vía SSH y lista todos los plugins con versiones:
find ./wp-content/plugins -name «readme.txt» -exec grep «Version» {} +
Compáralo con NVD de NIST o el repositorio oficial de WordPress. Si encuentras uno con CVE crítica, ese fue el punto de entrada.
Contraseña de admin débil (30% de casos): El atacante hizo brute force contra wp-login.php. Revisa en WordPress:
- Ajustes → General → Dirección de WordPress
- Busca también en los logs si hay intentos de login fallidos masivos en wp-login.php
Servidor mal configurado (10% de casos): Permisos de carpetas demasiado permisivos (777), PHP inseguro, o software de servidor viejo. En SSH:
ls -la /home/usuario/public_html
Las carpetas no deberían estar en 777. Debería ser 755 como máximo.
Paso 3: Limpieza manual vs. herramientas
Aquí tienes dos caminos. Te digo cuál es cada uno:
Opción A: Limpieza manual (para ataques leves):
Si identificaste el plugin malicioso, accede por SSH y elimina su carpeta completa:
rm -rf /home/usuario/public_html/wp-content/plugins/nombre-plugin-malicioso
Luego, busca código inyectado en las funciones.php del tema activo:
grep -r «eval|base64_decode|system|exec» /home/usuario/public_html/wp-content/themes/tu-tema/
Cualquier línea que tenga esas funciones es sospechosa. Elimínala.
Revisa también .htaccess (puede tener redirecciones maliciosas):
cat /home/usuario/public_html/.htaccess
Opción B: Herramientas automatizadas (para infecciones complejas):
Cuando la infección es profunda, las herramientas ahorran tiempo. Yo uso:
- Wordfence CLI: Instálalo en el servidor. Detecta malware conocido y backdoors. wp wordfence scan
- MalCare: Escaneo en la nube, identifica código ofuscado. Ofrece limpieza automatizada también.
- WP-CLI con auditoría manual: Aunque es más lento, es más preciso.
Paso 4: Búsqueda de backdoors persistentes
El malware serio deja backdoors. Son archivos que permiten acceso remoto incluso después de que creas que está limpio. Búscalos en carpetas temp y uploads:
find /home/usuario/public_html -name «*.php» -newer /home/usuario/public_html/index.php | head -20
Esto te muestra archivos PHP modificados recientemente. Cualquier .php raro en /wp-content/uploads/ es casi seguro un backdoor. Nombres típicos: shell.php, admin.php, c99.php, r57.php, uploader.php.
También busca archivos JavaScript malicioso:
grep -r «document.write|eval(» /home/usuario/public_html/wp-content/
Si encuentras algo, no lo ejecutes. Solo bórralo:
rm archivo-sospechoso.php
Paso 5: Limpiar la base de datos
El malware también se mete en la BD. Accede a phpMyAdmin o vía WP-CLI:
wp db query «SELECT * FROM wp_posts WHERE post_type=’post’ AND post_author NOT IN (SELECT ID FROM wp_users)»
Esto te muestra posts sin autor válido. Bórralos:
wp post delete ID –force
También revisa opciones raras:
wp option list | grep -E «(eval|serialize|base64)»
Paso 6: Cambiar todas las contraseñas y tokens
Si llegaron a tu WordPress, llegaron a tus credenciales. No puedes dejarlas igual. Haz esto:
- Cambia contraseña de admin en WordPress: Usuarios → Tu perfil → Contraseña nueva
- Regenera claves de seguridad de wp-config.php: Usa el generador de WordPress y reemplaza todas las KEY y SALT
- Cambia FTP/SSH del hosting
- Cambia contraseña de base de datos en wp-config.php
- Termina todas las sesiones activas en WordPress: Herramientas → Ajustes de sesión
Paso 7: Hardening definitivo para que no vuelva
Una limpieza sin hardening es un parche temporal. Lo que recomiendo siempre:
Protege wp-login.php: Añade esto a .htaccess para limitar intentos de login:
<Limit POST PUT>
Order Allow,Deny
Allow from all
</Limit>
Deshabilita edición de archivos en WordPress: Añade a wp-config.php:
define(‘DISALLOW_FILE_EDIT’, true);
Limita permisos de carpetas:
chmod 755 /home/usuario/public_html
chmod 755 /home/usuario/public_html/wp-content
chmod 644 /home/usuario/public_html/wp-config.php
Actualiza todo: Plugins, temas, WordPress core. Siempre.
Instala un plugin de seguridad: Wordfence, Sucuri, o iThemes Security. Te avisan de cambios raros.
Implementa 2FA: En el admin, con Google Authenticator o Authy.
Genera un CSP (Content Security Policy): Esto previene inyección de scripts. En .htaccess:
Header set Content-Security-Policy «default-src ‘self’»
Paso 8: Notifica a Google y AEPD
Si tu sitio fue marcado como comprometido, Google lo sabe. Entra en Google Search Console, ve a Seguridad → Problemas de seguridad, y marca la acción como resuelta.
Google tarda días en reindexar, así que mientras tanto tendrás tráfico bajo. Es normal.
También, según la AEPD, si recopilaban datos personales, debes notificar el incidente. Es obligatorio si hay riesgo para usuarios.
Qué no debes hacer bajo ningún concepto
- No reinstales WordPress encima del actual: Eso no elimina el malware, solo lo entierra.
- No uses contraseñas predecibles: «admin123» o «wordpress» son lo primero que prueba un bot.
- No ignores las alertas de seguridad: Si Wordfence te avisa de algo, investiga ese mismo día.
- No confíes en «limpiadoras» gratuitas desconocidas: Muchos son estafas que empeoran la situación.
- No dejes plugins inactivos años: Aunque desactivados, son vectores de ataque igual.
Cuándo llamar a un profesional
Sé honesto contigo mismo. Si encuentras más de un backdoor, si el malware está ofuscado con base64 múltiples niveles, o si no controlas SSH, necesitas ayuda. En mi trabajo veo situaciones donde el propietario ha pasado dos días intentando limpiar y ha empeorado las cosas.
Un profesional:
- Identifica todas las infecciones, no solo las obvias
- Preserva evidencia para denuncias (si es necesario)
- Configura hardening específico para tu ambiente
- Monitoriza durante 30 días post-limpieza
- Da garantía de que no vuelva
Yo siempre digo: la diferencia entre intentar limpiarlo tú y hacerlo profesionalmente no es solo técnica, es de confianza. Cuando terminas, sabes que está limpio. No tienes dudas a las 3 de la mañana.
Resumen de acciones inmediatas
Si acabas de descubrir que tu WordPress tiene malware, hace esto ahora mismo:
- Aisla el sitio (mode mantenimiento)
- Haz backup completo del servidor
- Revisa logs de acceso para el vector de ataque
- Identifica y elimina plugins/temas sospechosos
- Busca backdoors en /wp-content/uploads y funciones.php
- Limpia la base de datos de posts huérfanos
- Cambia todas las contraseñas
- Implementa hardening (.htaccess, permisos, CSP)
- Notifica a Google
- Si no controlas, contacta a un experto
El contenido malicioso en WordPress es recuperable. He visto webs pegadas del peor malware volver a estar limpias y seguras. Pero requiere precisión, paciencia y sin prisa. Y si en algún momento tienes dudas sobre si lo que ves es realmente malware, o si necesitas alguien que lo maneje de principio a fin, en ManuelFolgar.com hacemos exactamente eso: identificamos, limpiamos, y endurecemos tu WordPress.
Si crees que tu sitio está comprometido, contacta conmigo para una auditoría gratuita de seguridad. Analizaré tu WordPress, te diré exactamente qué tiene y cuánto cuesta recuperarlo. Sin sorpresas.