- Se produjo un ataque a la cadena de suministro en el ecosistema de NPM en el que se inyectó malware autorreplicante en más de 40 paquetes, incluido el popular @ctrl/tinycolor, lo que puede desencadenar una infección en cadena de secretos del entorno de desarrollo e incluso credenciales de CI/CD. Las versiones comprometidas ya fueron eliminadas de npm
- La carga útil del ataque ejecuta de forma asíncrona durante el proceso de instalación de npm un bundle de Webpack (
bundle.js, ~3.6MB) y realiza una recolección amplia de credenciales mediante variables de entorno, el sistema de archivos y SDKs de nube
- La lógica maliciosa usa NpmModule.updatePackage para forzar el parcheo y despliegue de otros paquetes, provocando propagación en cascada, e inyecta un workflow shai-hulud en GitHub Actions para robar secretos de la organización mediante
toJSON(secrets)
- Los datos recolectados se exfiltran mediante la creación del repositorio público de GitHub
Shai-Hulud, disfrazándose como actividad de desarrollo legítima y con alta capacidad de evasión de detección
- Opera de forma encubierta mediante acceso a tokens y endpoints de metadatos de AWS/GCP/Azure/NPM/GitHub, además de búsqueda de secretos basada en TruffleHog
- Se exige la eliminación inmediata de paquetes, limpieza de repositorios y rotación total de credenciales, junto con revisión de logs de CloudTrail/GCP Audit, bloqueo de webhooks e implementación de políticas de protección de ramas/Secret Scanning/enfriamiento
Affected Packages
- Se reportaron 195 paquetes/versiones en total; entre los principales están @ctrl/tinycolor(4.1.1, 4.1.2), múltiples paquetes del namespace @ctrl/, módulos de @crowdstrike/, además de ngx-bootstrap/ngx-toastr/ng2-file-upload/ngx-color en todo el ecosistema de Angular/UI web, el stack móvil de @nativescript-community/ y @nstudio/, el toolchain de ciencias de la vida de teselagen/, ember-*, koa2-swagger-ui, pm2-gelf-json, wdio-web-reporter y otros
- Para la versión exacta de cada paquete, se debe consultar la tabla del texto original y verificar con precisión si esas versiones están en uso
- Ejemplos:
@ctrl/ngx-emoji-mart 9.2.1, 9.2.2, @ctrl/qbittorrent 9.7.1, 9.7.2, ngx-bootstrap 18.1.4, 19.0.3–20.0.5, ng2-file-upload 7.0.2–9.0.1 y otros de amplio alcance
Immediate Actions Required
Identify and Remove Compromised Packages
- Verificar si existen paquetes comprometidos en el proyecto: revisar con
npm ls @ctrl/tinycolor, etc.
- Eliminar de inmediato los paquetes comprometidos: ejecutar
npm uninstall @ctrl/tinycolor, etc.
- Buscar hashes conocidos de
bundle.js para revisar rastros locales: usar sha256sum | grep 46faab8a...
Clean Infected Repositories
- Eliminar el workflow malicioso de GitHub Actions: quitar
.github/workflows/shai-hulud-workflow.yml
- Detectar y borrar la rama remota
shai-hulud creada en el repositorio: después de git ls-remote ... | grep shai-hulud, ejecutar git push origin --delete shai-hulud
Rotate All Credentials Immediately
- Es necesaria la rotación total de tokens de NPM, secretos de GitHub PAT/Actions, claves SSH, credenciales de AWS/GCP/Azure, cadenas de conexión a bases de datos, tokens de terceros y secretos de CI/CD
- También se requiere la rotación completa de los elementos almacenados en AWS Secrets Manager/GCP Secret Manager
Audit Cloud Infrastructure for Compromise
- AWS: revisar en CloudTrail el momento y patrón de llamadas a
BatchGetSecretValue, ListSecrets y GetSecretValue, y usar el IAM Credential Report para detectar creación o uso anómalo de claves
- GCP: revisar en Audit Logs los accesos a Secret Manager y confirmar si existen eventos
CreateServiceAccountKey
Aún no hay comentarios.