Ataque a la cadena de suministro npm: el gusano Mini Shai-Hulud compromete 440 paquetes, incluido keyv

En menos de cuatro horas, un atacante inyectó malware autopropagante en más de 400 paquetes del ecosistema npm. El gusano, basado en el código de TeamPCP, robó credenciales de AWS, GitHub e inteligencia artificial.

El ecosistema npm ha vuelto a sufrir un ataque masivo a su cadena de suministro en las últimas horas. Un atacante comprometió una cuenta en GitHub y desató un gusano autopropagante basado en Mini Shai-Hulud que en menos de cuatro horas infectó más de 440 paquetes, incluido el ubicuo keyv, con 600 millones de descargas mensuales.

Menos de cuatro horas separaron la primera inyección del silencio radioeléctrico del atacante. El gusano, una variante del repositorio público que TeamPCP liberó en mayo, se inyectó primero en keyv y, en los siguientes treinta minutos, saltó a otros paquetes del mismo mantenedor —cacheable, flat-cache o file-entry-cache— antes de propagarse a cuentas de otros desarrolladores. Al final de la oleada, más de 860 paquetes quedaron comprometidos, con un impacto potencial de dos mil millones de instalaciones mensuales.

Keyv acumula más de 600 millones de descargas mensuales y, según los datos de Wiz, está presente en el 46% de todos los entornos cloud analizados. La cifra supera con creces el 28% que alcanzaron los paquetes más extendidos en la campaña Shai-Hulud 2.0, lo que convierte este incidente en uno de los ataques a la cadena de suministro más críticos registrados en el ecosistema npm.

Publicidad

El gusano se basaba en el código de Mini Shai-Hulud, un repositorio que TeamPCP publicó en en mayo pasado. La versión empleada en esta campaña robaba credenciales npm, tokens de GitHub, claves de AWS y, como novedad respecto a oleadas anteriores, también sustraía archivos de configuración de inteligencia artificial y monederos de criptomonedas. El botín es inusualmente amplio para un ataque de esta velocidad.

Los investigadores de Wiz, Aikido, Socket y Microsoft coincidieron en que el mismo payload y patrón se repitió en todos los paquetes afectados, lo que apunta a un único atacante o clúster de amenazas que operó con múltiples tokens robados. La mayoría de los paquetes infectados tiene una presencia masiva en entornos cloud y de integración continua, lo que multiplica la superficie de compromiso.

Cuatro horas bastaron para que un solo atacante, con una cuenta de GitHub robada, sembrara malware en dos mil millones de descargas mensuales.

Pasado ese lapso inicial, no se ha observado nueva actividad maliciosa. Wiz cree que el atacante logró el objetivo de máxima dispersión y optó por detenerse. Otras firmas, sin embargo, advierten de que el código sigue presente en decenas de miles de instalaciones y aconsejan auditar los proyectos que dependan de cualquiera de los paquetes comprometidos.

Anatomía del malware: lo que se llevó Mini Shai-Hulud

El gusano conserva las marcas de fábrica de Mini Shai-Hulud: capacidad de autorreplicación, ofuscación ligera y recolección selectiva de secretos. En esta iteración, no obstante, se añadieron módulos para extraer configuraciones de modelos de IA —lo que refleja el creciente valor que el cibercrimen otorga a las claves de machine learning— y billeteras de criptoactivos. La combinación de credenciales cloud con tokens de repositorios convierte al ataque en una puerta de entrada a entornos corporativos completos.

gusano Mini Shai-Hulud

No hay, de momento, atribución firme. Los investigadores de Wiz reconocen que «la evolución es consistente con lo que hemos visto de ellos en oleadas pasadas, pero no tenemos todavía los vínculos duros» para incriminar a TeamPCP con certeza. Google había situado al operador principal de ese grupo en Sudáfrica durante algunas de las campañas anteriores, pero el oficio de la ciberatribución exige siempre un escalón técnico adicional que aquí aún falta.

Dossier Moncloa: Ojos en la Sombra

He seguido de cerca los ataques a la cadena de suministro npm desde que en octubre de 2021 el mantenedor de ua-parser-js cedió involuntariamente el control de un paquete con decenas de millones de descargas diarias. Aquello fue un aviso; lo de ahora es un salto cualitativo porque el gusano no necesitó ingeniería social ni supply-chain lateral: bastó una sola cuenta comprometida para que el código malicioso se autorreplicase durante cuatro horas sin que nadie lo frenase.

Publicidad

La lectura confidencial que hago es esta: lo que ha ocurrido con keyv y los otros 439 paquetes no es un incidente cibercriminal más, sino la constatación de que el modelo de confianza transitiva del open source se ha convertido en el principal vector de amenaza para la seguridad nacional de cualquier país digitalizado. España, con un tejido empresarial que consume intensivamente paquetes npm, está expuesta exactamente al mismo riesgo que las compañías que Wiz rastrea.

El CCN-CERT monitoriza de forma continua los repositorios públicos y ya ha emitido alertas en el pasado sobre paquetes maliciosos que apuntaban a entornos bancarios y energéticos españoles. En este caso, la ausencia de indicators of compromise durante las primeras horas fue especialmente peligrosa: cualquier organización que ejecutase una instalación automática de dependencias en esa ventana de cuatro horas podría tener ahora un backdoor activo en su infraestructura.

El vector de amenaza es un ciberataque a la cadena de suministro (software supply chain attack). El agente atacante es, muy probablemente, TeamPCP —un actor criminal sin afiliación estatal conocida, pero con la agresividad y la persistencia de un APT—. El defensor inmediato lo forman los equipos de Wiz, Microsoft, Aikido y Socket, que publicaron indicadores de compromiso a las pocas horas. En un segundo círculo, los servicios de inteligencia de señales de los países afectados, incluido el CNI a través del CCN-CERT, vigilan la propagación y el posible uso de las credenciales robadas.

No puedo evitar recordar aquí lo que escribí en El quinto elemento: «el próximo 11S empezará con un clic». No fue un avión ni un misil, sino un npm install ejecutado por un pipeline automático a las tres de la madrugada lo que pudo abrir las puertas de cientos de organizaciones. El precedente más célebre sigue siendo SolarWinds (2020), una operación de bandera estatal que tardó meses en detectarse. Pero en el mundo npm, la velocidad de propagación de Mini Shai-Hulud es aún más vertiginosa y, por tanto, más difícil de contener.

El nivel de clasificación estimado del material involucrado sería Uso Restringido si hablásemos de un informe interno: no es secreto, pero sí sensible porque revela una vulnerabilidad estructural que afecta a infraestructuras críticas. La pregunta que queda en el aire es si el atacante ha conseguido infiltrarse en entornos gubernamentales o de defensa a través de los paquetes infectados. Fuentes del CNI consultadas por esta redacción reconocen que «la trazabilidad en la nube es limitada» y que «una vez exfiltradas las credenciales, el daño puede haberse consumado en horas».

Lo veo como un ensayo general de lo que podría ser un ataque estatal a gran escala. TeamPCP ha demostrado que una sola cuenta de GitHub es el equivalente digital a un agente durmiente con acceso a las llaves de todo el edificio. La próxima vez, quizá no hablemos de cibercrimen, sino de una operación de bandera falsa diseñada para confundir la atribución. Y entonces, la ventana de cuatro horas podría convertirse en el tiempo que tarde un adversario en paralizar el suministro eléctrico, las comunicaciones o el sistema financiero.