Mi WordPress fue comprometido. Esto es lo que hice.

Pasó una noche. Bueno, lo descubrí al día siguiente.

El sitio cargaba de forma extraña. Una redirección rara en móvil, hacia una URL sospechosa. En desktop, nada. Como si el problema quisiera pasar desapercibido.

Mi primer pensamiento fue un bug de caché. Siempre nos decimos eso al principio.

Qué pasó exactamente

Un plugin. No algo descargado de un foro dudoso. Un plugin bastante conocido que no había sido actualizado desde hacía varios meses. Alguien había introducido una backdoor. Código ofuscado escondido en un archivo que nadie lee nunca.

El tipo de cosa que se queda ahí, silenciosamente. Esperando.

La backdoor inyectaba contenido. Redirecciones móviles hacia sitios de phishing. Clásico. Efectivo. Y a los motores de búsqueda les encanta penalizar eso. El SEO poisoning funciona exactamente sobre este principio: discreto, eficiente, y devastador para el posicionamiento.

Primera reacción: no tocar nada

Instinto básico: eliminar el plugin, vaciar la caché, seguir con la vida.

Mala idea.

Si la backdoor tuvo tiempo de funcionar, puede haber creado otros puntos de entrada. Archivos modificados. Una cuenta admin fantasma. Eliminar el plugin visible no arregla lo que aún no puedes ver.

Le pedí a Claude una lista de tareas en tiempo real

No se me ocurrió ir a un foro. Abrí Claude y pregunté directamente: mi WordPress tiene un plugin comprometido con código inyectado, ¿por dónde empiezo?

La lista que me dio era sólida. En orden:

  • Poner el sitio en modo mantenimiento inmediatamente
  • No eliminar nada antes de analizar
  • Escanear con Wordfence (escaneo completo, no el rápido)
  • Verificar archivos modificados recientemente (fechas de modificación anómalas)
  • Buscar patrones sospechosos: eval(base64_decode(...)), base64, gzinflate
  • Verificar todas las cuentas de usuario de WordPress (¿admin fantasma?)
  • Verificar los archivos core de WordPress
  • Verificar functions.php y archivos del tema
  • Escanear la base de datos (enlaces externos inyectados en opciones, contenido, widgets)
  • Reinstalar el core de WordPress limpiamente
  • Eliminar plugins no mantenidos o sospechosos
  • Cambiar todas las contraseñas (WP, FTP, BDD, hosting)
  • Regenerar los salts de WordPress en wp-config.php via api.wordpress.org/secret-key — cierra todas las sesiones activas
  • Activar 2FA en la cuenta admin
  • Verificar Google Search Console (¿penalización manual? ¿URLs infectadas indexadas?)
  • Restaurar desde una copia de seguridad limpia si el daño es demasiado extenso

Seguí ese orden. Me evitó cometer errores.

Lo que encontró el escaneo

El informe de Wordfence saca una lista de archivos modificados y archivos sospechosos. eval(base64_decode(...)) es la señal clásica. Si ves eso en un archivo de WordPress, algo va mal.

También había una cuenta admin que yo no había creado. Contraseña fuerte, email externo. Discreta.

Eliminada.

La limpieza

Archivo por archivo para las zonas sospechosas. Core de WordPress reinstalado limpiamente. Plugins verificados uno por uno.

El tema también. Aunque no era la fuente original, verifiqué functions.php y los archivos de plantilla. Es donde les gusta esconderse a las inyecciones.

Luego la base de datos. Búsqueda de enlaces externos inyectados en contenidos, opciones de WordPress, widgets. A menudo olvidado.

Salts regenerados en wp-config.php. Todas las sesiones cortadas de golpe. Da la sensación rara la primera vez pero ese es exactamente el efecto buscado.

Lo que debería haber tenido antes

Copias de seguridad automáticas diarias fuera del servidor. Las tenía, pero no eran suficientemente recientes. Perdí algunos días de configuración.

Monitoreo de cambios en archivos. Wordfence lo hace de forma continua si lo activas correctamente. Habría detectado la modificación mucho antes.

Un plugin menos. Cada plugin no mantenido es una puerta abierta. Desinstalé varios después de esto. No porque estuvieran comprometidos, sino porque eran inútiles.

Después de la limpieza

Verificación en Google Search Console. Sin penalización manual declarada. Pero las redirecciones móviles habían empezado a indexarse. Limpieza de las URLs mediante la herramienta de eliminación de GSC.

Lo que aprendí

Un plugin desactualizado es una puerta abierta. Quizás no derribada mañana, pero abierta.

El problema con WordPress es que lo instalas, añades cosas y te olvidas de limpiar. Mientras tanto las vulnerabilidades se acumulan.

Ahora gestiono mis sitios de forma diferente. Menos plugins. Actualizaciones semanales. Copias de seguridad automáticas fuera del servidor.

Y Wordfence con monitoreo activo, no solo instalado y olvidado en la lista de extensiones.