Una campaña XSS esconde administradores en WordPress a través de Ninja Forms

Una campaña de ataques contra WordPress aprovecha fallos de tipo XSS almacenado en los plugins Ninja Forms y WPC Product Bundles for WooCommerce para instalar un administrador que no aparece en el escritorio y dejar hasta cuatro vías distintas para volver a entrar en la web. Así lo detalla Patchstack, que detectó los primeros ataques el 04/10/2026 y ha analizado el código malicioso. El problema es que actualizar el plugin vulnerable no basta: si el ataque llegó a ejecutarse, la puerta trasera sigue ahí.

Las claves de la campaña XSS que oculta administradores en WordPress en 30 segundos

  • Los atacantes usan CVE-2026-93836 (WPC Product Bundles) y CVE-2026-94504 (Ninja Forms), ambas con CVSS 7,1.
  • El código se activa cuando un administrador abre un pedido o un envío de formulario.
  • Instala un plugin falso, crea un administrador oculto y una URL de acceso secreta.
  • Los archivos maliciosos se fechan hacia atrás para no parecer recientes.
  • Hay que actualizar a Ninja Forms 3.15.4 y WPC Product Bundles 8.6.7 y revisar la base de datos.

La campaña ya apareció de pasada en nuestro artículo sobre la vulnerabilidad crítica de Bricksforge, pero el análisis de Patchstack merece una lectura más detallada. Lo relevante no es tanto el fallo de entrada como lo que llega después: un implante diseñado para sobrevivir a la vulnerabilidad que le abrió la puerta y para esconderse del propio dueño de la web.

Dos plugins distintos, un mismo código malicioso

Patchstack observó el primer intento el 4 de octubre a las 10:39 (UTC) contra CVE-2026-93836, una vulnerabilidad de WPC Product Bundles for WooCommerce hasta la versión 8.6.6. El plugin acepta una cantidad que empieza por un número válido pero conserva el código que el atacante añade detrás, y ese valor se guarda en los metadatos del pedido de WooCommerce y se muestra después sin filtrar. Al día siguiente, el 5 de octubre, el mismo código llegó a través de CVE-2026-94504, en Ninja Forms hasta la 3.15.3, que almacena el texto de los campos de formulario y lo muestra sin codificar en el antiguo editor de envíos del escritorio.

Los dos fallos se pueden explotar sin autenticación y se hicieron públicos el 22 de septiembre. Las formas de inyectar el código cambian según el plugin, pero en ambos casos se carga el mismo archivo JavaScript desde el dominio imgcdn1.com, y eso es lo que permite atribuir los ataques a una única campaña. El riesgo potencial es amplio: Ninja Forms supera las 500.000 instalaciones activas y WPC Product Bundles las 30.000.

Patchstack explica por qué el XSS almacenado resulta tan útil para este tipo de ataque. A diferencia del XSS reflejado, no hace falta convencer a la víctima de que abra un enlace: el código malicioso ya está dentro de la aplicación, en un pedido o en un envío de formulario que el administrador abrirá como parte de su trabajo diario. Se ejecuta en el momento en que lo mira.

Qué hace el código una vez dentro

El archivo x.js no roba la cookie del administrador. Como se ejecuta dentro de la propia web, aprovecha la sesión abierta: carga páginas del escritorio, extrae los tokens de seguridad (nonces) que exigen las acciones administrativas y los reutiliza. Por eso la protección de cookies HttpOnly no sirve aquí. El script consulta antes su servidor de control para saber qué pasos se han completado en esa web y guarda su progreso en el navegador.

Después usa el instalador de plugins de WordPress para subir un plugin falso llamado WP Smart Thumbnails 1.2.4, supuestamente de MediaPress Labs, con el slug wp-smart-thumbnails. Su archivo principal invierte la comprobación habitual: en lugar de detenerse si se accede a él directamente, se detiene cuando lo carga WordPress. Activado no hace nada visible; solo funciona cuando alguien lo llama directamente. Dentro hay un gestor de archivos oculto tras siete capas de ofuscación, sin contraseña ni ninguna comprobación de acceso, que permite subir, borrar, renombrar y editar archivos. Cualquiera que conozca la ruta tiene el mismo control que el atacante.

El paquete incluye un segundo archivo, emer-run.php, que construye la persistencia. Crea un administrador con un nombre de apariencia inofensiva, como support, updater, maintenance o backup, y un correo @wordpress.org. Luego instala dos plugins obligatorios (must-use) en wp-content/mu-plugins. El primero, class-wp-query-<8 caracteres>.php, oculta esa cuenta del listado de usuarios, del filtro de administradores y hasta del contador de usuarios. El segundo, class-wp-token-validate.php, habilita una URL de acceso mágica que inicia sesión como el administrador más antiguo de la web, el dueño original.

Los plugins obligatorios se cargan en cada petición, no se pueden desactivar desde el escritorio y no aparecen en la pantalla de plugins. Además, se escriben ofuscados con una clave distinta en cada web, de modo que no comparten firma, y se les cambia la fecha de modificación por la del archivo más antiguo de la instalación. Buscar archivos modificados recientemente no los delatará.

Las cuatro puertas que deja abiertas

Una sola ejecución con éxito deja al atacante cuatro vías independientes para volver, y solo una de ellas es visible desde el escritorio:

  1. Un administrador visible, creado con credenciales que facilita el servidor de control.
  2. Un administrador oculto, que no aparece en la lista de usuarios.
  3. Una URL de acceso secreta, /wp-login.php?_wplogin=<token>, que entra como el administrador original.
  4. El gestor de archivos sin autenticación del plugin falso.

Desinstalar el plugin vulnerable, o incluso el plugin falso, no cierra ninguna de las tres últimas. Según Patchstack, el dominio imgcdn1.com se registró el 1 de octubre, unos diez días después de que se publicaran ambas vulnerabilidades, lo que encaja con una infraestructura montada para esta campaña. Cuatro de las cinco IP detectadas son nodos de salida de Tor, así que bloquearlas no es una defensa duradera. La empresa advierte de que el volumen de ataques aún es limitado, pero de que el implante sirve para cualquier XSS almacenado que llegue a un administrador, por lo que espera que aparezcan más plugins afectados.

Cómo revisar y limpiar una web afectada

Lo primero es actualizar WPC Product Bundles for WooCommerce a la 8.6.7 y Ninja Forms a la 3.15.4 o posteriores. Después conviene buscar en los registros del servidor referencias a imgcdn1.com, /fz/x.js y /fz/c.php, y comprobar si existe la carpeta /wp-content/plugins/wp-smart-thumbnails/.

Como el administrador oculto no se ve en el escritorio, hay que buscarlo directamente en la base de datos. Patchstack propone esta consulta, en la que habrá que cambiar el prefijo wp_ si la instalación usa otro:

SELECT u.user_login, u.user_email, u.user_registered
FROM wp_users u
JOIN wp_usermeta m ON m.user_id = u.ID
WHERE m.meta_key = 'wp_capabilities'
AND m.meta_value LIKE '%administrator%';Lenguaje del código: JavaScript (javascript)

Cualquier cuenta que aparezca en el resultado pero no en el escritorio está oculta por uno de los plugins maliciosos. También son señales de alerta un correo @wordpress.org en una cuenta local y nombres como support, updater o maintenance. El resto de comprobaciones son estas:

  • Revisar la carpeta wp-content/mu-plugins en busca de class-wp-token-validate.php y class-wp-query-*.php, sin fiarse de las fechas de los archivos.
  • Buscar en la tabla de opciones fz_emer_done_v1 y fz_emer_login_tokens. Si existe la segunda, hay al menos una URL de acceso secreta activa.
  • Buscar en los registros peticiones a wp-login.php con el parámetro _wplogin y accesos directos a wp-smart-thumbnails.php.
  • Revisar las cuentas de administrador creadas cuando algún administrador consultó pedidos de WooCommerce o envíos de Ninja Forms.

Si hay indicios de que el código llegó a ejecutarse, Patchstack recomienda tratar la web como comprometida: eliminar las cuentas y los plugins no autorizados, borrar los archivos de mu-plugins y las dos opciones de la base de datos, cambiar las contraseñas de los usuarios con privilegios y las claves de seguridad (salts) de WordPress, y revisar archivos y base de datos en busca de otros cambios. La contraseña del administrador más antiguo debe darse por comprometida aunque nunca se haya robado. Para una limpieza completa, la hoja de AyudaWP con 77 pasos para limpiar un WordPress infectado es una buena guía.

Preguntas frecuentes

¿Qué versiones de Ninja Forms y WPC Product Bundles son vulnerables?

Ninja Forms hasta la 3.15.3 y WPC Product Bundles for WooCommerce hasta la 8.6.6. Las versiones corregidas son la 3.15.4 y la 8.6.7.

¿Cómo encuentro un administrador oculto en WordPress?

Consultando directamente la base de datos los usuarios con rol de administrador y comparando el resultado con la lista del escritorio. Si una cuenta solo aparece en la base de datos, está oculta.

¿Basta con borrar el plugin wp-smart-thumbnails?

No. El administrador oculto y la URL de acceso secreta dependen de plugins obligatorios en mu-plugins y de opciones de la base de datos, que siguen funcionando aunque se borre el plugin falso.

¿Por qué no sirve buscar archivos modificados recientemente?

Porque el malware cambia la fecha de sus archivos por la del archivo más antiguo de la instalación de WordPress.

Fuentes:

Editor WPDirecto

Editor de WPDirecto potenciado con IA con el apoyo del equipo de edición.

Te puede interesar...

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    WordPress Directo
    WPDirecto.com es una revista especializada en WordPress y WooCommerce que ofrece una amplia gama de recursos, incluyendo tutoriales, análisis de plugins y plantillas, consejos de optimización y estrategias de SEO, para ayudar a los usuarios a mejorar y personalizar sus sitios web, manteniéndolos informados sobre las últimas novedades y tendencias en el mundo de WordPress.

    © 1995-2025 Color Vivo Internet, SLU (Medios y Redes Online).. Otros contenidos se cita fuente. Infraestructura cloud servidores dedicados de Stackscale.