Virus de redireccionamiento en WordPress: diagnóstico profundo y eliminación definitiva
El virus de redireccionamiento en WordPress no destruye tu web sino que la usa. Tu instalación sigue funcionando con normalidad para ti, pero los visitantes que llegan desde Google son redirigidos a sitios de spam, farmacias falsas o páginas de phishing. El atacante monetiza tu tráfico orgánico mientras tú pierdes posicionamiento y credibilidad.

Cómo detectar que tienes este tipo de infección
El síntoma más común es el redireccionamiento condicional: el malware solo redirige a usuarios que vienen de motores de búsqueda, identificando el referrer HTTP. Si abres tu web directamente o tienes sesión activa como administrador, todo parece normal. Por eso el propietario puede tardar días o semanas en descubrirlo.
Para detectarlo sin sesión de administrador, abre una ventana de incógnito y accede a tu web desde un resultado de Google. También puedes simular el user-agent de Googlebot desde la terminal: curl -A "Googlebot/2.1" https://tuweb.com.
En Google Search Console, un aviso de «sitio hackeado» o un aumento repentino de URLs indexadas que no has creado son señales claras. El informe de cobertura puede mostrar miles de páginas nuevas generadas por el malware.
Los tres vectores de entrada más habituales
Los plugins y temas nulled son la causa número uno. Un plugin de pago descargado de un sitio no oficial casi siempre lleva código malicioso preinstalado. La segunda causa son los plugins desactualizados con vulnerabilidades conocidas — existen bases de datos públicas (WPVulnDB, CVE) que los atacantes escanean automáticamente. La tercera es la reutilización de contraseñas: si usas la misma contraseña en WordPress que en otro servicio que sufrió una brecha, el atacante puede entrar con credenciales válidas.
Análisis forense de archivos modificados
El primer paso es identificar qué archivos fueron modificados. Desde el servidor puedes listar archivos PHP modificados en los últimos 30 días:
find /ruta/wordpress -type f -name "*.php" -mtime -30 -ls
Los archivos del núcleo de WordPress no deben haber sido modificados nunca. Si ves fechas recientes en archivos de /wp-includes/ o /wp-admin/ que no corresponden a una actualización tuya, esos archivos están comprometidos.
El malware suele insertar código ofuscado con base64 al principio o al final de archivos PHP clave. Búscalo con:
grep -r "base64_decode" /ruta/wordpress/wp-content/ --include="*.php"
grep -r "eval(" /ruta/wordpress/ --include="*.php"

Backdoors: la puerta que el atacante deja abierta
Lo más crítico de la limpieza no es eliminar el redireccionamiento visible sino encontrar y eliminar los backdoors. Un backdoor es un archivo PHP que el atacante instaló para poder volver al servidor aunque cambies contraseñas y limpies el malware principal.
Los backdoors suelen tener nombres que parecen legítimos: wp-config.php.bak, xmlrpc2.php, wp-includes/class-wp-options.php. También se instalan en la carpeta de uploads donde no debería haber PHP:
find /ruta/wordpress/wp-content/uploads -name "*.php"
Cualquier archivo PHP en uploads es malware. WordPress nunca pone PHP ahí.
Limpieza de la base de datos
El malware moderno inserta código también en la base de datos, especialmente en wp_options y en el contenido de posts. Desde phpMyAdmin busca cadenas como <script src=http o dominios desconocidos. MalCare o Wordfence pueden automatizar este análisis, pero una revisión manual adicional es recomendable porque el malware más sofisticado sabe evadir los scanners.
Hardening post-limpieza
El hardening es lo que evita la reinfección. Los puntos más importantes: desactivar la ejecución de PHP en la carpeta uploads (regla en .htaccess o configuración de Nginx), añadir autenticación de dos factores al login, cambiar el prefijo de las tablas de base de datos si sigue siendo wp_ por defecto, y activar ModSecurity en el servidor.
En nuestro hosting tenemos ModSecurity activo con el ruleset OWASP actualizado. Bloquea la mayoría de los intentos de explotación de vulnerabilidades conocidas antes de que lleguen a WordPress.