El ecosistema JavaScript sufrió un golpe significativo con un sofisticado ataque contra Copay, un popular proveedor de carteras de criptomonedas, en noviembre de 2018. Conocido como el ataque event-stream, este incidente puso de manifiesto las vulnerabilidades críticas asociadas a la dependencia de paquetes de terceros en el desarrollo de software.
Copay se conoce ahora como Bitpay Wallet.

Entendiendo el ataque
Event-stream, un popular paquete npm, era ampliamente utilizado por numerosos proyectos para gestionar eficientemente flujos de datos dentro de aplicaciones Node.js. Su funcionalidad era fundamental para los desarrolladores que manejaban flujos de datos complejos en aplicaciones en tiempo real.
En este artículo, cubrimos los vectores de ataque ocultos más comunes y los ataques a la cadena de suministro con más detalle.
Mantenido inicialmente por un desarrollador dedicado y de confianza, el módulo se había convertido en un elemento habitual en muchos proyectos de software gracias a su fiabilidad y rendimiento.
Sin embargo, como ocurre con frecuencia en la comunidad de código abierto, el mantenedor original de event-stream dejó de tener tiempo para gestionar el proyecto. A finales de 2018, la responsabilidad de event-stream pasó a un nuevo mantenedor voluntario. Esta transición, habitual en los ecosistemas de código abierto, no estuvo acompañada de las rigurosas comprobaciones de seguridad que serían deseables. El nuevo mantenedor, aparentemente un colaborador con buenas intenciones, resultó tener motivaciones maliciosas.
Poco después de hacerse cargo, esta persona publicó varias actualizaciones de event-stream. Integrada en estas actualizaciones había una nueva dependencia llamada flatmap-stream. Este paquete fue diseñado específicamente para formar parte de la actualización de event-stream. Sin que los usuarios lo supieran, flatmap-stream contenía código malicioso ofuscado, una técnica utilizada para ocultar su verdadera funcionalidad y evitar su detección por herramientas de seguridad y revisiones de código.
Cabe destacar que cside desofusca el código para ofrecerte una vista detallada y completa de lo que se está cargando. Luego analizamos el código completo antes de que sea renderizado por el navegador de tu usuario. Esto probablemente habría detectado este incidente.

El código malicioso dentro de flatmap-stream estaba diseñado para activarse únicamente cuando se cumplían ciertas condiciones, específicamente dentro del entorno de Copay, una aplicación de cartera de criptomonedas construida con JavaScript. Esta especificidad refleja el carácter dirigido del ataque; los atacantes tenían un conocimiento claro de la arquitectura interna y las dependencias de Copay.
El payload estaba programado para detectar si el entorno presentaba las características propias del entorno de desarrollo de Copay. Una vez confirmado, ejecutaba rutinas que buscaban y extraían claves privadas y datos de carteras de cuentas con cantidades significativas de Bitcoin y Bitcoin Cash. Estos datos eran entonces transmitidos a un servidor remoto controlado por los atacantes.
Consecuencias del ataque
El incidente de event-stream es un ejemplo de manual de un ataque a la cadena de suministro del lado del cliente, donde el compromiso de un único componente puede afectar a miles de proyectos dependientes.
La inserción y activación sigilosa del código malicioso hizo que permaneciera sin detectarse durante varias semanas. Otra característica habitual de los ataques a la cadena de suministro.
Durante ese tiempo, cualquier actualización de la aplicación Copay incluía inadvertidamente el módulo comprometido, poniendo en riesgo todas las instalaciones activas y nuevas de la cartera. Los usuarios desconocían por completo que sus carteras Copay recién instaladas o actualizadas estaban comprometidas.
Este ataque no solo provocó pérdidas económicas a esos usuarios, sino que también asestó un duro golpe a la confianza depositada en los módulos de código abierto y en el ecosistema npm en general.
El incidente puso de relieve varias lecciones críticas:
- Confianza y verificación: La necesidad de evaluar las credenciales y la fiabilidad de las personas a quienes se les otorga el control de proyectos de código abierto ampliamente utilizados.
- Visibilidad y monitorización: La importancia de tener visibilidad sobre el comportamiento de las dependencias de terceros, especialmente aquellas capaces de comprometer la integridad de software crítico. Todo esto es lo que cside cubre.
- Respuesta rápida: La necesidad de mecanismos de respuesta ágil cuando se descubre una vulnerabilidad, para evitar daños generalizados.
Acciones inmediatas y respuesta de la comunidad
Una vez descubierta la inyección maliciosa, el equipo de npm actuó con rapidez para eliminar la versión comprometida de event-stream del registro y evitar una mayor propagación. Esta versión también fue marcada como obsoleta para que los desarrolladores fueran conscientes del riesgo de seguridad y se desaconsejara su uso en nuevos proyectos.
El incidente de event-stream ha tenido implicaciones duraderas para el ecosistema npm, reforzando la importancia de la seguridad en el desarrollo de software y los riesgos inherentes a las cadenas de dependencias, especialmente en proyectos de código abierto. Generó una mayor concienciación y un enfoque más cauteloso hacia la integración de paquetes de terceros, contribuyendo en última instancia a un entorno de software de código abierto más seguro.
Lee aquí por qué el riesgo en la cadena de suministro no termina en npm.
Previene un ataque similar con cside
El incidente de event-stream es un recordatorio de las vulnerabilidades inherentes a las dependencias de software. Estas vulnerabilidades exponen a las empresas a riesgos graves, como el robo de datos y las pérdidas económicas. En cside monitorizamos, protegemos e incluso optimizamos tus scripts de terceros. Ofrecemos:
- Monitorización avanzada: Nuestros sistemas de monitorización vigilan todos los scripts y dependencias de terceros integrados en tus proyectos. Identificamos y te alertamos sobre cualquier actividad inusual o modificación en tiempo real, previniendo posibles brechas antes de que ocurran.
- Mejoras de seguridad automatizadas: Automatizamos el proceso de protección de tu cadena de suministro de software desde el lado de los activos de terceros. Antes de que el script sea entregado a un usuario en tu sitio, hemos comprobado el código completo en busca de cualquier elemento malicioso en nuestro proxy. Si encontramos algo, no llegará a su navegador.
- Optimizado para la velocidad: Nuestro proxy hace todo lo contrario a añadir latencia. En la mayoría de los casos podemos acelerar esos scripts para reducir los tiempos de carga.
- Defensa proactiva: Nuestro enfoque proactivo va más allá de la simple monitorización. Analizamos tendencias y patrones en las amenazas globales de ciberseguridad para mejorar continuamente nuestros mecanismos de defensa. Esta visión anticipada nos permite prever y mitigar posibles nuevos vectores de ataque.
- Fácil integración: Integrar cside en tus sistemas existentes es increíblemente sencillo. Solo añade nuestro script como el primero en cargarse y todos los demás quedarán cubiertos.




