Pulsa ESC para cerrar

Curso WordpressCurso Wordpress

Puertas traseras en WordPress: dónde se esconden después de un hackeo y cómo encontrarlas

Es una historia que se repite: el sitio se infecta, alguien lo limpia, todo vuelve a la normalidad… y a los pocos días el malware regresa. No es mala suerte. Es una puerta trasera (backdoor): un acceso que el atacante dejó escondido para volver cuando quiera.

Limpiar sin encontrar las puertas traseras es como cambiar los muebles después de un robo sin cambiar la cerradura.

Los ocho escondites más comunes

  1. Administradores falsos. Un usuario con nombre inocente (wpadmin, support, wp-update) creado por el atacante.
  2. Contraseñas de aplicación. Permiten entrar por la API aunque cambies la contraseña.
  3. Mu-plugins. Los archivos en wp-content/mu-plugins se cargan siempre y no aparecen en la lista normal de plugins. Un escondite perfecto.
  4. Plugins falsos. Una carpeta con nombre creíble (wp-security-helper) que no viene de ningún lado.
  5. Archivos del núcleo modificados. Una línea extra en wp-load.php, index.php o wp-config.php.
  6. PHP en uploads. Un archivo .php entre las imágenes, a veces con nombre de imagen (foto.jpg.php).
  7. Tareas programadas. Un evento de WP-Cron o un trabajo de cron del servidor que vuelve a descargar el malware.
  8. Código en la base de datos. Opciones o widgets con código que algún plugin ejecuta.

Cómo revisarlos

Haz un respaldo completo antes (aunque esté infectado: sirve para analizar). Luego, por SSH desde la carpeta del sitio:

# 1 y 2. Administradores y contraseñas de aplicación
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
wp user application-password list 1

# 3. Mu-plugins (revisa cada archivo: ¿sabes qué hace?)
ls -la wp-content/mu-plugins/

# 4 y 5. Núcleo y plugins comparados con los originales
wp core verify-checksums
wp plugin verify-checksums --all

# 6. PHP donde no debería haber
find wp-content/uploads -type f -name "*.php*"

# 7. Tareas programadas de WordPress
wp cron event list --fields=hook,next_run_relative,recurrence

# 8. Opciones sospechosas en la base de datos
wp db query "SELECT option_name, LENGTH(option_value) FROM wp_options WHERE option_value LIKE '%eval(%' OR option_value LIKE '%base64_decode%' OR option_value LIKE '%<script%'"

Y en cPanel, revisa Trabajos de cron: cualquier tarea con wget, curl o php apuntando a un archivo que no reconoces es sospechosa.

wp plugin verify-checksums solo puede comparar plugins publicados en WordPress.org. Los plugins de pago y los temas no tienen sumas oficiales: para esos, la solución es borrarlos y volver a instalarlos desde la fuente original.

Cerrar el acceso para siempre

La limpieza que funciona no intenta «arreglar» archivos infectados, sino reemplazarlos:

  1. Pon el sitio en mantenimiento o bloquea el acceso público mientras trabajas.
  2. Reinstala el núcleo: wp core download --force --skip-content.
  3. Borra y reinstala cada plugin y tema desde su fuente oficial. No copies las carpetas viejas.
  4. Revisa archivo por archivo los mu-plugins y la raíz del sitio. Lo que no reconozcas, se va.
  5. Borra los administradores falsos y todas las contraseñas de aplicación.
  6. Cambia todas las credenciales: WordPress, cPanel, FTP, base de datos (y actualiza wp-config.php) y correo.
  7. Regenera las claves secretas: wp config shuffle-salts.
  8. Revisa los trabajos de cron de cPanel y los eventos de WP-Cron.

Que no vuelvan a entrar

  • Bloquea la ejecución de PHP en uploads con un .htaccess dentro de esa carpeta:
<FilesMatch "\.(php|phtml|phar)$">
  Require all denied
</FilesMatch>
  • Desactiva el editor de archivos del escritorio en wp-config.php: define( 'DISALLOW_FILE_EDIT', true );
  • Activa el doble factor para todos los administradores.
  • Descubre por dónde entraron (un plugin vulnerable, una contraseña filtrada) y ciérralo. Si no, volverán por el mismo lugar.

Si el hosting es compartido y tienes varios sitios en la misma cuenta de cPanel, revísalos todos. Un sitio infectado puede reinfectar a los demás de la misma cuenta.

¿Encontraste un archivo sospechoso y no sabes si es malicioso? Pega las primeras líneas en el foro (sin datos privados) y te ayudamos a revisarlo.