Reemplazar plugins y temas elimina solo dos ubicaciones. La persistencia puede vivir en mu-plugins, uploads, wp-config.php, archivos raíz, opciones MySQL, tareas o configuración del hosting. Las credenciales robadas también pueden recrear archivos sin ningún backdoor local.
Deja de repetir la misma limpieza y amplía el límite de confianza.
Demuestra qué significa «regresa»
Registra nombre, hash, valor de base, redirección o usuario que reaparece, además de la hora tras limpiar. Compáralo con el original conservado.
No asumas que nombres parecidos son el mismo payload. Caché o una restauración pueden mostrar contenido viejo. Correlaciona la repetición con peticiones, cron, despliegues y logins.
Revisa mu-plugins y drop-ins
Inspecciona wp-content/mu-plugins y drop-ins de caché, base u objetos. Pueden cargarse antes que plugins normales y seguir activos aunque la pantalla de Plugins parezca limpia.
Compara archivos de fabricante con paquetes fiables y documenta el propietario del código propio. No ejecutes código ofuscado para identificarlo. Revisa configuración antes de sustituir un drop-in legítimo.
Inspecciona directorios escribibles
Busca ejecutables y reglas inesperadas en uploads, caché, idiomas, upgrade y copias. Restringe PHP en uploads cuando la funcionalidad lo permita.
Conserva muestras y después aísla o elimina mediante reconstrucción limpia. No borres todo el contenido multimedia por un solo archivo. Revisa carpetas antiguas y organizadas por fecha.
Distingue caché de reinfección
Opcode, caché de objetos, CDN y workers PHP pueden servir estado viejo tras cambiar archivos. Anota capas y reinicios antes de interpretar una recurrencia.
Purga solo después de preservar evidencias y corregir el origen. La caché no suele recrear un archivo borrado en disco: ese caso aún necesita un proceso escritor. Compara hash del disco y respuesta servida.
Revisa raíz y configuración
Compara núcleo y raíz con la versión oficial correspondiente. Inspecciona wp-config.php, .htaccess, configuración PHP y valores auto_prepend_file.
Un include fuera del webroot puede cargar malware después de cada reemplazo. Comprueba directorios superiores de la cuenta. Conserva propietario, permisos y fechas antes de corregir.
Busca persistencia en la base
Revisa opciones, widgets, entradas o plantillas, usuarios, usermeta y datos de eventos. Constructores y etiquetas pueden emitir JavaScript sin cambiar archivos.
Trabaja desde una captura y aplica cambios precisos. Evita sustituciones amplias que rompan serialización o contenido legítimo. En multisitio, revisa opciones de red aparte.
Revisa la ejecución programada
Inspecciona WP-Cron, Action Scheduler, cron del servidor y tareas del panel. Registra hook, comando, propietario y frecuencia antes de deshabilitar.
Una tarea maliciosa puede recrear el archivo minutos después. No borres a ciegas trabajos legítimos de WooCommerce, copias o certificados. Revisa también automatizaciones de despliegue y restauración.
Inspecciona cargadores externos
Revisa Tag Manager, Workers de CDN, JavaScript externo, webhooks y agentes de gestión. Un sistema de archivos limpio puede producir comportamiento malicioso desde una cuenta externa comprometida.
Protege cada proveedor, revoca usuarios y tokens desconocidos y compara versiones desplegadas. No retires analytics legítimo sin identificar responsable y rollback.
Revoca la persistencia de cuentas
Audita administradores, contraseñas de aplicación, sesiones, usuarios y claves del hosting, base, correo principal, DNS/CDN y control de versiones. Rota desde un dispositivo limpio.
Quien mantiene SFTP puede restaurar un archivo tras cada escaneo. Limpiar archivos no revoca esa credencial. Utiliza acceso por web y MFA.
Reconstruye todo el límite confirmado
Crea una raíz limpia, instala componentes fiables, valida código propio e importa base y uploads evaluados. Cierra la vulnerabilidad inicial y aísla el árbol infectado.
Prueba los desencadenantes: ciclo cron, calentamiento de caché, login administrador, formulario y checkout. Monitoriza archivos, base y cuentas. Si el mismo indicador vuelve, solicita análisis urgente compartiendo hashes, rutas y horas censuradas, nunca payloads o bases.