S100,000 sitios de WordPress sirvieron malware sin que sus dueños tocaran nada
// syswork LOG · categoríaNoticiaslectura7 MIN

100,000 sitios de WordPress sirvieron malware sin que sus dueños tocaran nada

Atacantes entraron a Brevo y modificaron los scripts que miles de sitios cargan desde su servidor. El formulario de suscripción y el chat de tu web pudieron entregar una puerta trasera durante horas.

Pantalla de un sitio web corporativo con código JavaScript inyectado resaltado
Pantalla de un sitio web corporativo con código JavaScript inyectado resaltado

La mayoría de las guías de seguridad para sitios web dicen lo mismo: actualiza WordPress, actualiza los plugins, pon contraseñas fuertes. Todo eso está bien y sigue valiendo.

Y aun así, más de 100,000 sitios de WordPress entregaron malware a sus visitantes el 14 de septiembre sin que ninguno de esos consejos hubiera fallado. Porque el código malicioso no estaba en sus servidores.

Qué pasó

Brevo —la plataforma de correo masivo, formularios y chat antes conocida como Sendinblue, muy usada por PyMEs mexicanas— fue comprometida en dos tiempos:

FechaQué ocurrió
10 de septiembreUn atacante explotó una falla en el manejo de inicio de sesión único por SAML y accedió a 138 cuentas de clientes, incluida la del proveedor de monederos de criptomonedas Trezor
14 de septiembreRegresó con una llave de API de Cloudflare de larga duración y desplegó un worker que inyectó JavaScript malicioso en brevo.com, en sibforms.com y en tres archivos JavaScript que los clientes embeben en sus propios sitios

Los investigadores de Sansec encontraron el cargador malicioso en el sitio de Brevo, en sus páginas de reservas, en los formularios alojados, en las páginas de baja de suscripción y en el widget de chat Conversations.

Cada visitante que abría una página con el widget de chat o el formulario de Brevo pedía el archivo JavaScript al servidor de Brevo, no al tuyo. Ese archivo venía envenenado. Ningún antivirus en tu hosting, ninguna actualización de WordPress y ninguna contraseña fuerte lo habrían evitado: el eslabón roto estaba fuera de tu perímetro, en un proveedor al que le diste permiso de ejecutar código en tu página el día que pegaste el fragmento en el pie del sitio.

Qué hacía el código, según quién entrara

Si detectaba a un administrador de WordPress con la sesión abierta, intentaba instalar un plugin llamado Web Media Optimizer. El nombre suena a herramienta de optimización de imágenes; en realidad es una puerta trasera persistente con una llave de autenticación fija escrita en el propio plugin, que permite generar una sesión válida de administrador sin conocer la contraseña.

Si era un visitante normal, le mostraba una página de verificación falsa al estilo ClickFix: la pantalla que pide "demuestra que no eres un robot" y te indica copiar un texto y pegarlo en una ventana del sistema. Ese texto es el comando que infecta la computadora del visitante — es decir, de tu cliente.

Qué revisar hoy, en este orden

  1. Lista de plugins de WordPress. Busca Web Media Optimizer o cualquier plugin que nadie recuerde haber instalado. Revisa también los desactivados: siguen ahí.
  2. Usuarios administradores. Borra los que no reconozcas y fíjate en las fechas de creación posteriores al 14 de septiembre.
  3. Contraseñas y sesiones. Cambia las de todos los administradores y cierra todas las sesiones activas; la puerta trasera funciona generando sesiones válidas.
  4. Inventario de scripts externos. Abre el código de tu página y anota de qué dominios ajenos carga JavaScript. Casi siempre hay más de los que dirección imagina: analítica, chat, formularios, píxeles publicitarios, mapas, reseñas.
  5. Si encontraste el plugin, no basta con borrarlo. Hay que revisar archivos modificados, tareas programadas y usuarios creados después de la fecha.

La pregunta incómoda que deja este caso

Un sitio corporativo típico de una empresa mediana carga entre cinco y quince scripts de terceros. Cada uno de ellos puede ejecutar cualquier cosa en la página de tus clientes, y cada uno depende de la seguridad de una empresa sobre la que no tienes control ni visibilidad.

No se trata de quitarlos todos —el chat sirve, la analítica sirve—, sino de tres disciplinas baratas:

  • Saber cuáles son. La lista no existe en la mayoría de las empresas.
  • Quitar los que ya no se usan. El píxel de una campaña de 2023 sigue cargando y sigue siendo un riesgo.
  • Enterarte el mismo día. Un monitoreo que avise cuando cambia el contenido de un script externo cuesta poco y es la diferencia entre horas y semanas de exposición.

Es el mismo patrón que dejó la falla de carga de archivos en un plugin de WooCommerce hace unos días: en el comercio electrónico, el riesgo no está solo en tu código, está en todo lo que tu página invita a ejecutarse. Si vendes en línea, la revisión de la tienda antes de la temporada alta debería incluir esta lista.

Seguridad de tu sitio

¿Cuántos scripts ajenos corren en tu página ahora mismo?

Hacemos el inventario, quitamos lo que ya no sirve, revisamos si hubo compromiso y dejamos alertas para el próximo caso.

Auditar mi sitio

// FAQ

Preguntas frecuentes

// Temas relacionados

#ciberseguridad#wordpress#cadena de suministro#e-commerce

// Autor

Especialista en Ciberseguridad e Infraestructura

Diego Herrera

Ingeniero en ciberseguridad e infraestructura IT. Protege la operación de empresas mexicanas contra amenazas y caídas de servicio.

¿Te fue útil? Compártelo

// Sigue leyendo

Artículos relacionados

Ver todos

// Consultoría gratuita

¿Sabes qué carga tu sitio desde servidores ajenos?

Auditamos los scripts externos de tu web, revisamos si hubo compromiso y te dejamos el monitoreo para enterarte el mismo día.

Ver ciberseguridad