Campaña activa de WordPress: dos XSS sin autenticación instalan administradores ocultos
Patchstack confirmó una campaña de explotación activa contra dos plugins muy usados: Ninja Forms (más de 500.000 sitios) y WPC Product Bundles for WooCommerce (más de 30.000). Las dos fallas son XSS almacenados sin autenticación, con CVSS 7.1: CVE-2026-94504 en Ninja Forms hasta la 3.15.3 y CVE-2026-93836 en WPC Product Bundles hasta la 8.6.6. Si usás alguno, actualizá hoy: Ninja Forms a 3.15.4 y WPC Product Bundles a 8.6.7. Y si un administrador abrió envíos u órdenes en los últimos días, revisá el sitio aunque ya hayas actualizado.
Qué pasó
Las dos fallas se hicieron públicas el 22 de septiembre. Patchstack vio los primeros ataques contra WPC Product Bundles el 4 de octubre y contra Ninja Forms el 5 de octubre, y publicó su análisis el 6.
El atacante no necesita cuenta. En WooCommerce mete código en el parámetro woosb_ids[…][qty] de una compra; en Ninja Forms lo manda como un envío normal del formulario (admin-ajax.php?action=nf_ajax_submit). El código queda guardado y se ejecuta cuando un administrador abre esa orden o ese envío en el panel.
Ese script (imgcdn1.com/fz/x.js) no roba la cookie: usa la sesión del administrador que lo abrió. Recorre wp-admin, toma los nonces legítimos y con ellos instala un plugin falso llamado WP Smart Thumbnails (wp-smart-thumbnails, firmado como “MediaPress Labs”). El dominio imgcdn1.com se registró el 1 de octubre, tres días antes del primer ataque.
Desde ahí, la campaña deja cuatro formas de volver a entrar:
- Un administrador visible, creado con datos que manda el servidor del atacante.
- Un administrador oculto con nombre de cuenta técnica (
support,updater,maintenance,backup…) y email@wordpress.org. Un mu-plugin (class-wp-query-<8 caracteres>.php) lo saca de la lista de Usuarios, del filtro de administradores y de los contadores. - Una URL de acceso secreta:
/wp-login.php?_wplogin=<token>. Inicia sesión como el administrador más antiguo del sitio, no como el atacante. La maneja otro mu-plugin,class-wp-token-validate.php. - Un gestor de archivos sin contraseña dentro del plugin falso, accesible con un pedido directo.
Además, el instalador busca el archivo más viejo de tu WordPress y les pone esa fecha a todos los archivos que deja. La búsqueda clásica de “archivos modificados recientemente” no los encuentra.
Impacto
Alcanza con que una persona con rol de administrador abra una orden o un envío de formulario. A partir de ese clic, el atacante tiene control total del sitio y varias puertas de reserva.
Lo más importante: actualizar no limpia. Patchstack advierte que quitar el plugin vulnerable, o incluso el plugin falso, no cierra las otras rutas. El administrador oculto y la URL secreta viven en mu-plugins, que no se pueden desactivar desde el panel y no aparecen en la pantalla de Plugins.
La técnica tampoco depende de estos dos plugins: cualquier XSS almacenado que llegue a la pantalla de un administrador puede instalar el mismo kit.
Qué hacer ahora
-
Actualizá ya. Ninja Forms a 3.15.4 o superior y WPC Product Bundles a 8.6.7 o superior. Hacé un backup antes.
-
Revisá los mu-plugins por contenido, no por fecha. Entrá a
wp-content/mu-plugins/. Si hay archivos que no pusiste vos (en especialclass-wp-query-*.phpoclass-wp-token-validate.php), el sitio está comprometido. -
Contá los administradores en la base de datos, no en el panel. Ni la pantalla de Usuarios ni
wp user listsirven, porque el mu-plugin también se carga en WP-CLI. Usá esta consulta (cambiáwp_si tu prefijo de tablas es otro):SELECT u.ID, 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%';Compará el resultado con lo que ves en Usuarios. Sospechá de cuentas que no aparecen en el panel, de emails
@wordpress.orgy de nombres genéricos comosupportobackup. -
Buscá las marcas de la campaña. La carpeta
wp-content/plugins/wp-smart-thumbnails/(conemer-run.php), las opcionesfz_emer_done_v1yfz_emer_login_tokensen la tablawp_optionsy, en los logs del servidor,imgcdn1.com,/fz/x.js,/fz/c.phpy pedidos awp-login.phpcon_wplogin. -
Si encontrás algo, tratá el sitio como comprometido. Borrá las cuentas, el plugin, los mu-plugins y las dos opciones; cambiá las contraseñas de todos los administradores (empezando por el más antiguo) y regenerá las claves de seguridad (salts) de
wp-config.php. Si no podés asegurar que no quedó nada, restaurá un backup limpio anterior al 4 de octubre y actualizá los plugins antes de volver a ponerlo en línea.
Qué hacer hoy: actualizá los dos plugins, abrí wp-content/mu-plugins/ y corré la consulta de administradores. Son diez minutos y te dicen si estás limpio.
Si encontrás algo raro y no querés arriesgarte a dejar una puerta abierta, puedo hacer la recuperación del sitio hackeado o una auditoría de seguridad WordPress para confirmar que quedó limpio. Para borrar cuentas una vez identificadas, tenés el paso a paso en cómo eliminar un usuario administrador en WordPress.
Fuente
Seguí leyendo
¿Tu WordPress está caído, hackeado o querés protegerlo antes de que pase? Te ayudo a recuperarlo y blindarlo.
Solicitar diagnóstico