Pasar al contenido principal

NPM ha sido atacado: probablemente no estás en riesgo

Hace dos días, un código JavaScript malicioso fue inyectado en varios paquetes muy populares. Estos paquetes son tan utilizados que se estima que, como mínimo, la gran mayoría del software que usa NPM utiliza al menos uno de ellos. En consecuencia, hemos recibido mensajes de nuestros clientes preguntando si corren riesgo y qué pueden hacer.

La buena noticia es que probablemente no haya que tomar ninguna medida, ya que es poco probable que tu sitio sea objetivo de este ataque

¿Qué es NPM?

Es posible que hayas leído que npm ha sido atacado y comprometido. ¿Y esto qué significa? npm es la forma estándar de manejar software JavaScript externo en los proyectos. Externo se refiere a que, cuando estás desarrollando un proyecto de software, a menudo necesitas usar algo que alguien más ya ha creado. Muchas veces se trata de cosas sencillas como mostrar texto con colores, o tareas más complejas como gestionar solicitudes a servicios externos. No tiene sentido reescribir el mismo software para las mismas tareas una y otra vez. Al usar Software Libre y de Código Abierto (FOSS), puedes simplemente usar un paquete que ya haga lo que necesitas. Por eso el software y los sitios web de hoy en día son increíblemente complejos sin ser increíblemente caros: es gracias a la reutilización de FOSS disponible de forma libre.

Este proceso es recursivo: un software puede requerir otro para hacer su trabajo, que a su vez requiere algunas más. Al final, cualquier proyecto que use JavaScript puede utilizar cientos de paquetes. Manejar esto manualmente es inviable. El estándar de la industria es usar npm, que obtiene automáticamente los paquetes, entiende las dependencias (qué paquetes son necesarios para que un paquete funcione) y se encarga de gestionar esta complejidad. npm también almacena todos los paquetes necesarios en un servidor para que puedan ser descargados fácilmente. Como resultado, npm es un objetivo increíblemente codiciado para los hackers maliciosos. Si obtienes acceso a npm, puedes añadir código que se ejecutará en cientos de miles, si no millones, de máquinas. Esto se llama un ataque a la cadena de suministro.

Entendiendo el riesgo

El código malicioso tiene como objetivo las aplicaciones de criptomonedas, e intenta robar fondos cuando alguien usa software que incluye algún paquete atacado. ¿Qué significa esto? Significa que, incluso si tu sitio ha sido comprometido, estás a salvo siempre que no manejes transacciones o monederos de criptomonedas. Esto se debe a que el malware roba los fondos al alterar las direcciones de destino de las transacciones aprobadas. Si no apruebas transacciones, no hay nada que pueda hacer.

Pero, ¿qué sucede si un usuario está visitando mi sitio comprometido mientras usa un monedero de criptomonedas en otra pestaña? Esto no es un problema ya que las pestañas del navegador están aisladas. Tu sitio no puede interferir con un sitio en otra pestaña; esto es así por diseño, parte del modelo de seguridad web. ¿Hay alguna forma de saltarse esto? Bueno, sí, hay técnicas avanzadas que, en casos muy especiales, pueden superar esta limitación. Sin embargo, es muy difícil de hacer y a menudo requiere circunstancias especiales, y no parece que este malware sea capaz de hacerlo.

El problema lo tienen principalmente los sitios y aplicaciones que usan los paquetes comprometidos y ofrecen servicios de criptomonedas: un monedero de criptomonedas en JavaScript, una casa de cambio de criptomonedas o un sitio web que permite enviar dinero usando criptomonedas como Bitcoin, Ethereum o Litecoin.

Hay un riesgo muy bajo aún si el equipo de desarrollado tiene los paquetes maliciosos en sus sistemas locales o de CI/CD porque, bueno, no suelen hacer con transacciones de criptomonedas reales en los entornos de desarrollo y pruebas.

Así que, si te preguntas si tu sitio se ha visto afectado, la respuesta es casi con toda seguridad que no. Si lo estuviera, seguramente ya lo sabrías.

Las malas noticias

No es la primera vez que NPM se ve comprometido y no será la última. Esto significa que las comprobaciones de seguridad y las auditorías son más importantes que nunca. Aunque las criptomonedas son el principal objetivo de este tipo de malware, no son el único. Futuros ataques podrían robar credenciales de inicio de sesión, alterar contenido o inyectar software de minería de criptomonedas. La seguridad web es difícil y a menudo se pasa por alto. Por eso deberías pensar en mejorar tu seguridad, no solo en el lado de desarrollo, sino también en el tuyo.

Por el lado del desarrollo, asegúrate de tener un equipo experimentado que entienda los riesgos de las tecnologías web modernas. Es muy fácil crear un sitio web, pero es difícil hacerlo bien estructurado, mantenible, seguro y con un buen rendimiento y respuesta. Ajustar las cabeceras HTTP, actualizar el software regularmente y evitar brechas de seguridad al codificar no es sencillo. En la era del código generado por IA, esto es aún más crucial, ya que la IA tiene tendencia a introducir inadvertidamente agujeros de seguridad.

Por tu parte, puedes tomar medidas como forzar la autenticación de múltiple factor en tus sitios, educar a tus usuarios y editores, y en general tener la seguridad en mente. No seas paranoico, pero no la olvides.

Las buenas noticias

Los paquetes comprometidos estuvieron disponibles solo durante dos horas antes de que alguien se percatara del problema. Unas horas más tarde, los paquetes fueron eliminados de NPM. Aunque las versiones comprometidas se descargaron muchas veces durante ese lapso de dos horas, el problema se detectó muy rápidamente y se tomaron medidas casi de inmediato. El desastre fue menos grave de lo que se podría esperar.

Creo que este incidente ha permitido a la industria experimentar una amenaza real sin, al parecer, grandes consecuencias (apenas 1000 dólares han sido robado hasta ahora). Es de esperar que el resultado sea un impulso en las medidas de seguridad para que el entorno de NPM sea más seguro.

RIcardo Sanz Ante

Ricardo Sanz

CTO