Ataque Shai-Hulud: Expansión de malware en paquetes npm
Ataque Shai-Hulud: Expansión de malware en paquetes npm

Ataque Shai-Hulud: Expansión de malware en paquetes npm

Investigadores han identificado al menos 187 paquetes del registro npm comprometidos en un ataque continuo a la cadena de suministro. La campaña, denominada «Shai-Hulud», se caracteriza por una carga maliciosa que se autopropaga para infectar otros paquetes.

Expansión del ataque desde el paquete tinycolor

La campaña comenzó el lunes con la vulneración del paquete @ctrl/tinycolor, que recibe más de 2 millones de descargas semanales. Desde entonces, se ha expandido significativamente y ahora incluye paquetes publicados bajo el espacio de nombres NPM de CrowdStrike.

El nombre «Shai-Hulud» proviene de los archivos de flujo de trabajo shai-hulud.yaml utilizados por el malware encontrado en las versiones comprometidas. Los investigadores indican que la presencia del nombre refuerza que el atacante denominó deliberadamente la campaña así.

Investigación y afectación de paquetes

Daniel Pereira, ingeniero senior de software, alertó a la comunidad sobre un ataque a gran escala a la cadena de suministro de software que afecta al registro de JavaScript más grande del mundo, npmjs.com, advirtiendo a todos que se abstuvieran de instalar las últimas versiones del proyecto @ctrl/tinycolor.

Socket, empresa de seguridad de la cadena de suministro de software, comenzó a investigar la vulnerabilidad e identificó al menos 40 paquetes comprometidos. Investigadores de Socket y Aikido han identificado paquetes adicionales, lo que eleva el recuento a al menos 187.

StepSecurity también publicó un análisis técnico con fragmentos desofuscados y diagramas de flujo de ataque, que confirma en gran medida los hallazgos iniciales de Socket. Los paquetes afectados incluyen varios publicados por la cuenta crowdstrike-publisher de CrowdStrike.

Mecanismo de autopropagación del malware

Las versiones comprometidas incluyen un mecanismo de autopropagación que ataca otros paquetes del mismo mantenedor. El malware descarga cada paquete, modifica su package.json, inyecta un script bundle.js, reempaqueta el archivo y lo republica, permitiendo la troyanización automática de los paquetes posteriores.

El script bundle.js utiliza TruffleHog, un escáner de secretos legítimo que desarrolladores y profesionales de seguridad pueden usar para encontrar información confidencial filtrada accidentalmente, como claves API, contraseñas y tokens. Sin embargo, el script malicioso abusa de la herramienta para buscar tokens y credenciales de la nube en el host.

El malware encontrado en los paquetes identificados es idéntico al tipo anterior que usaba bundle.js para: descargar y ejecutar la herramienta legítima de escaneo de secretos, TruffleHog; buscar secretos como tokens y credenciales de la nube en el host; comprobar si las credenciales de desarrollador y de CI descubiertas son válidas; crear flujos de trabajo de GitHub Actions no autorizados dentro de los repositorios; exfiltrar datos confidenciales a un punto final de webhook codificado.

Contexto de ataques previos

El ataque se produce tras dos ataques de alto perfil a la cadena de suministro ocurridos el mismo mes. La primera semana de septiembre, un malware basado en IA afectó a 2.180 cuentas de GitHub en lo que se denominó el ataque «s1ngularity». A principios de este mes, los mantenedores de los populares paquetes chalk y debug también fueron víctimas de phishing en un ataque separado, lo que provocó que sus proyectos se vieran comprometidos.

Aunque la causa raíz de este nuevo ataque aún se está investigando, expertos, incluido Pereira, plantean la hipótesis de que podría haber sido orquestado por los atacantes responsables del «s1ngularity».

Consejos para usuarios afectados

Los usuarios afectados deben auditar sus entornos y registros para detectar indicios de vulnerabilidad, rotar todos los secretos y tokens de CI/CD, y revisar los árboles de dependencias para detectar versiones maliciosas. Fijar las dependencias a versiones de confianza y limitar el alcance de las credenciales de publicación son pasos cruciales para reducir la exposición a vulnerabilidades a nivel de paquete.