Por qué hay que revisar mu-plugins por separado: el código de wp-content/mu-plugins se carga en cada petición antes que los plugins normales. Además, un loader muy pequeño puede ser el único rastro visible en el panel mientras el payload real vive en otra ruta.
Inventaría todos los archivos y su procedencia
Recoge nombre, hash, fecha de modificación y propietario de cada archivo y subdirectorio. Compáralo con documentación del hosting, de la agencia o del sistema de despliegue: muchos proveedores usan MU plugins legítimos para caché, seguridad o routing.
Sigue cada include y cada loader
- Abre los loaders e identifica todas las rutas cargadas con
requireoinclude. - Busca llamadas remotas, escritura de archivos, creación de usuarios y ejecución condicional.
- Comprueba si el archivo esperado coincide con una copia de confianza.
- Conserva hashes y timestamps antes de sustituir nada.
La persistencia puede estar fuera de mu-plugins
Un MU plugin puede restaurar código en un tema, un plugin normal, una tarea cron o una opción de base de datos. El directorio es el punto de entrada, no necesariamente el único lugar comprometido.
Elimina la persistencia sin romper funcionalidad legítima
- Confirma qué MU plugins pertenecen a la plataforma y cuáles no tienen propietario legítimo.
- Retira loaders maliciosos y todos los payloads que cargan.
- Restaura archivos modificados desde fuentes de confianza.
- Revisa configuración del servidor, cron y base de datos por si existe una segunda vía de persistencia.
¿Loader malicioso o plugin legítimo modificado?
Si un archivo mínimo carga una ruta oculta o ajena, sigue toda la cadena. Si un componente conocido ha cambiado, compáralo con la versión oficial y determina quién lo modificó. Revisa también persistencia en wp_options y tareas cron maliciosas, porque cualquiera de ellas puede recrear el código.
No borres todo mu-plugins de golpe
En un hosting gestionado puedes desactivar caché, seguridad o routing imprescindibles y complicar aún más la recuperación.
Cómo saber que la vía de ejecución temprana ha desaparecido
Cada MU plugin debe tener propietario y función documentados, no debe quedar ningún include oculto ni payload desconocido y el sitio debe superar reinicios, cron y ciclos de caché sin que el código vuelva a aparecer.