Soporte

Caso iRepairPhone: limpiamos spam SEO oculto y un plugin malicioso en WordPress

Caso real en irepairphone.es/blog/: el cliente vio un “virus” y en la home aparecía spam de apuestas Premier League. Causa multipunto (theme, plugin falso, snippets y usuarios) y limpieza quirúrgica en vivo.

Caso real: irepairphone.es/blog/ — blog WordPress de iRepairPhone, tienda y taller de reparación de móviles en Madrid.

El cliente escribió porque “el blog tenía un virus”. Si te está pasando ahora, el servicio de limpiar virus WordPress es exactamente este trabajo. En la home del blog, entre las entradas reales de pantallas, baterías y reparaciones, aparecía un texto largo en inglés sobre Detailed Premier League Predictions con enlace a una web de apuestas (betzoid.com). No encajaba con el negocio. Olía a spam SEO.

No había copia local del sitio. La limpieza se hizo en el servidor en vivo por SSH: diagnóstico, backup puntual de lo infectado, limpieza quirúrgica y verificación en el front. No hizo falta reinstalar WordPress entero.

Captura del proyecto irepairphone.es: tienda y blog de reparación de móviles en Madrid
irepairphone.es — el blog WordPress compartía el mismo vhost que la tienda; el spam SEO solo afectaba al blog.

Qué se veía (y por qué importaba)

El síntoma no era una pantalla en blanco. Era peor para el SEO: contenido ajeno mezclado con entradas legítimas. Para un visitante podía pasar casi desapercibido. Para Google, el HTML de la home del blog incluía spam de apuestas deportivas.

  • Home del blog con bloque de predicciones de Premier League en inglés.
  • Enlace externo a un dominio de apuestas.
  • Entradas reales del taller todavía visibles.
  • WordPress desactualizado: 6.0.12.

Ese tipo de infección no “rompe” la web a ojos del dueño. Rompe la confianza de Google y la reputación del dominio.

Diagnóstico: no era un solo archivo

Tras localizar la instalación WordPress del blog en el vhost y confirmar en el HTML en vivo las cadenas betzoid y Premier League Predictions, el escaneo de themes y plugins dejó claro el patrón: infección multipunto.

Había cuatro frentes a la vez:

  1. Inyección PHP en el theme activo.
  2. Un plugin falso con nombre “de sistema”.
  3. Snippets maliciosos en la base de datos (Insert Headers and Footers / WPCode).
  4. Usuarios WordPress creados por el ataque.

Pocas piezas. Mucho daño. Con eso basta para tumbar el SEO de todo el blog sin tocar cada entrada.

Proyecto iRepairPhone: referencia visual del sitio limpio tras la limpieza de malware WordPress
Referencia del proyecto iRepairPhone. Tras la limpieza, la home del blog volvió a mostrar solo contenido de reparación de móviles.

Qué encontramos (causa real)

1) Inyección en el theme nisargpro

Archivo afectado:

wp-content/themes/nisargpro/header.php

Theme activo: nisargpro.

En header.php había PHP inyectado que, en la home del blog, imprimía un bloque HTML enorme. El truco: CSS de ocultación agresiva (position: absolute; top: -340620px). Casi invisible para humanos. Perfectamente indexable para Google. Dentro: spam de Premier League y el enlace de apuestas.

Eso explica el síntoma visible sin necesidad de “infectar” cada post.

2) Plugin malicioso falso: WP Core Features

Carpeta:

wp-content/plugins/wp-core-features/

Archivos:

  • hello-world-plugin.php
  • wp-core-features.js (~623 KB, ofuscado)

El nombre engaña a propósito (“WP Core Features”). Estaba activo. Desactivaba cabeceras CSP y cargaba un “captcha” falso que contactaba dominios externos maliciosos (entre otros: whost.kyun.li, wproxy.codeinecrazy.xyz). No era un plugin de WordPress.org. Era malware disfrazado de utilidad del core.

3) Snippets en base de datos (Insert Headers and Footers)

Plugin: insert-headers-and-footers (WPCode).

Había 2 snippets publicados (IDs 968 y 969), sin título. Contenían el mismo tipo de JavaScript malicioso del captcha falso, con auto-inserción en el front. Aunque limpiaras el theme, estos snippets podían volver a inyectar código en cada carga.

4) Usuarios ilegítimos

  • zabfnjogee → rol editor (crítico: puede publicar y editar contenido)
  • rpjkyifixq → rol subscriber

Los administradores legítimos se mantuvieron. El ataque no necesitaba borrar al dueño: le bastaba crear un editor paralelo.

Alcance: pocas piezas, mucho impacto

Área Afectado Cantidad
PHP del theme nisargpro/header.php 1 archivo
Plugin malware wp-core-features 1 plugin (2 archivos)
Base de datos Snippets WPCode 968 y 969 2 entradas
Usuarios Editor + subscriber ilegítimos 2 usuarios
Caché WordPress + WP Fastest Cache Limpiada tras el arreglo

Contexto: WordPress 6.0.12 (desactualizado). El .htaccess parecía normal. En el escaneo principal no aparecieron webshells PHP en uploads. Las entradas del blog, en su mayoría, eran legítimas: el spam venía del theme, del plugin y de los snippets.

Lección clave: no hace falta “infectar mil archivos” para destrozar un blog. Con un header.php, un plugin falso y dos snippets en la base de datos ya puedes empujar spam de apuestas a Google.

Cómo lo solucionamos (paso a paso)

  1. Localizar la instalación WordPress del blog dentro del vhost.
  2. Confirmar el spam en el HTML en vivo (cadenas betzoid / Premier League Predictions).
  3. Escanear themes y plugins buscando inyecciones y carpetas con nombres “oficiales”.
  4. Backup puntual antes de tocar: copia del header.php infectado y del plugin malware.
  5. Limpiar la inyección de wp-content/themes/nisargpro/header.php.
  6. Desactivar y borrar por completo wp-content/plugins/wp-core-features/.
  7. Eliminar los snippets WPCode con IDs 968 y 969.
  8. Borrar los usuarios ilegítimos (zabfnjogee, rpjkyifixq).
  9. Vaciar cachés de WordPress y WP Fastest Cache.
  10. Verificar en vivo: home del blog limpia, sin spam ni JS de captcha malicioso.

Nota operativa: tras limpiar el header.php hubo un 500 breve por un detalle de compatibilidad con wp_body_open. Se corrigió al momento. En producción, después de cada cambio en el theme, hay que recargar el front y no dar por cerrado el ticket solo porque el panel admin “parece bien”.

Resultado

  • Home del blog limpia: solo contenido de reparación de móviles.
  • Spam de apuestas / Premier League eliminado del HTML.
  • Plugin falso wp-core-features eliminado.
  • Snippets maliciosos 968 y 969 eliminados.
  • Usuarios no autorizados eliminados.
  • Cachés vaciadas.
  • Sitio listo para solicitar revisión en Google Search Console.

No se reinstaló WordPress desde cero. Fue una limpieza quirúrgica: quitar lo comprometido, dejar lo legítimo y verificar.

Cómo pedir revisión en Google Search Console

Cuando Google ha visto spam SEO o malware, limpiar el servidor no basta: hay que avisar. En Search Console:

  1. Abre el informe de Seguridad o Acciones manuales (según lo que muestre la propiedad).
  2. Solicita revisión explicando, con hechos, qué se limpió.
  3. Indica que se eliminó la inyección del theme (nisargpro/header.php), se borró el plugin malicioso wp-core-features, se eliminaron los snippets WPCode 968 y 969, se borraron usuarios ilegítimos y se vació la caché.
  4. Confirma que la home del blog ya no muestra el spam de apuestas.

Sé concreto. “Hemos limpiado el virus” no ayuda. “Eliminamos X, Y y Z y verificamos el HTML en vivo” sí.

Prevención (checklist realista)

  • Cambiar contraseñas de WordPress, FTP/SFTP y hosting después de un hackeo.
  • Actualizar WordPress, themes y plugins (aquí el núcleo estaba en 6.0.12).
  • Quitar plugins que no uses. Menos superficie = menos puertas.
  • Pocos administradores + 2FA en cuentas con privilegios.
  • Plugin de seguridad serio (Wordfence, Solid Security, etc.) y revisiones periódicas.
  • Vigilar usuarios nuevos con roles raros, plugins desconocidos y snippets de Insert Headers and Footers / WPCode sin título.
  • Backups externos (no solo en el mismo servidor).
  • Limitar o desactivar xmlrpc si no lo usas.

Si ves un plugin con nombre genérico tipo “Core Features”, “Helper”, “Optimizer” que no instalaste tú, trátarlo como sospechoso hasta demostrar lo contrario.

Conclusión

En irepairphone.es/blog/ el “virus” no era un misterio abstracto: era spam SEO oculto en el theme, un plugin falso activo, dos snippets en la base de datos y dos usuarios creados por el ataque. Con pocas piezas se puede empujar contenido de apuestas a Google y poner en riesgo todo el dominio.

La solución correcta no fue reinstalar a ciegas. Fue diagnosticar → aislar → limpiar → verificar → preparar Search Console.

Si tu blog WordPress o tu tienda PrestaShop muestra textos raros, enlaces de apuestas, “captchas” que no pediste o usuarios que no creaste, puedo hacer el mismo trabajo: diagnóstico, limpieza y endurecimiento.

Limpiar virus WordPress · Mantenimiento WordPress · Soporte PrestaShop · Pedir presupuesto · WhatsApp

¿Necesitas ayuda con tu tienda?

Relacionado con: Limpiar virus WordPress

Ver servicio
Siguiente paso

¿Quieres mejorar tu PrestaShop?

Velocidad, errores, SEO o mantenimiento. Te ayudo con trato directo. Madrid y remoto en toda España.

WhatsApp Contacto