OreNPMGuard - Escáner de Paquetes Shai-Hulud
Versión 2.0.0 - Detección Shai-Hulud 2.0 y Sistema de Prevención Mejorado
Una herramienta de seguridad para detectar paquetes npm comprometidos en los ataques a la cadena de suministro Shai-Hulud (septiembre de 2025 original y Shai-Hulud 2.0 noviembre de 2025). Escanea tanto archivos package.json como package-lock.json para detectar versiones instaladas exactas e Indicadores de Compromiso (IoC). Disponible en implementaciones Python y Node.js con configuración YAML centralizada para un mantenimiento sencillo.
Última actualización: 24 de noviembre de 2025 - 738+ paquetes comprometidos rastreados con 1,291 combinaciones únicas paquete@versión. Ahora detecta tanto las variantes originales de Shai-Hulud como las de Shai-Hulud 2.0.
Para escaneo multi-ecosistema, consulte ore-mal-pkg-inspector.
🔗 Proyectos Relacionados
Para escaneo de paquetes maliciosos multi-ecosistema (npm, PyPI, Maven, RubyGems, Go, Cargo), consulte:
ore-mal-pkg-inspector - Escáner completo de paquetes maliciosos con inteligencia de amenazas dinámica.
OreNPMGuard se enfoca específicamente en la defensa contra ataques Shai-Hulud para paquetes npm.
🚨 Acerca de los Ataques Shai-Hulud
Shai-Hulud es un gusano autorreplicante que comenzó a comprometer paquetes npm el 14 y 15 de septiembre de 2025, representando el primer ataque autopropagante exitoso en el ecosistema npm y uno de los ataques más graves a la cadena de suministro de JavaScript observados hasta la fecha. Nombrado en honor a los gusanos de arena gigantes de la serie Dune de Frank Herbert, este malware ha evolucionado en múltiples variantes.
Shai-Hulud Original (septiembre de 2025)
El ataque original infectó 200+ paquetes npm (según lo rastreado en esta herramienta) con múltiples versiones afectadas por paquete.
Shai-Hulud 2.0 (noviembre de 2025) - NUEVO
Una nueva variante surgió en noviembre de 2025 con cambios significativos:
- 738+ paquetes comprometidos con 1,291 combinaciones únicas paquete@versión
- 25,000+ repositorios afectados en ~350 usuarios únicos
- Nueva fase de ejecución: Utiliza scripts
preinstall (no solo postinstall)
- Nuevos archivos de payload:
setup_bun.js y bun_environment.js (además de bundle.js)
- Persistencia mejorada: Crea runners autoalojados llamados 'SHA1HULUD' y nuevos patrones de workflow de GitHub
- Orientación multi-nube: Recolección de credenciales en AWS, Azure y GCP
- Escalada de privilegios en Docker: Intenta obtener acceso root mediante contenedores privilegiados
- Paquetes subidos entre el 21 y 23 de noviembre de 2025
Referencia: Wiz Research - Artículo del Blog Shai-Hulud 2.0
🦠 Cómo Funciona el Ataque
Paciente Cero: El ataque comenzó con el paquete rxnt-authentication publicado el 14 de septiembre de 2025 a las 17:58:50 UTC por la cuenta npm comprometida "techsupportrxnt".
Cadena de Ataque (Shai-Hulud Original):
- Instalación: El paquete malicioso ejecuta el script
postinstall que ejecuta bundle.js (payload JavaScript de 3MB+)
- Recolección de Credenciales: Utiliza TruffleHog para escanear tokens de GitHub/npm, credenciales de AWS/GCP/Azure, variables de entorno y claves de nube expuestas por IMDS
- Exfiltración de Datos: Crea un repositorio público "Shai-Hulud" en la cuenta de GitHub de la víctima con secretos robados en
data.json (codificado en base64 doble)
- Persistencia: Inyecta un workflow malicioso de GitHub Actions (
.github/workflows/shai-hulud-workflow.yml) que exfiltra secretos del repositorio a webhook[.]site
- Migración de Repositorios: Fuerza que los repositorios organizacionales privados se conviertan en repositorios personales públicos con el sufijo "-migration" y la descripción "Shai-Hulud Migration"
- Propagación del Gusano: Utiliza tokens npm robados para inyectar malware en otros paquetes mantenidos por la víctima, incrementando números de versión y añadiendo hooks
postinstall
Cadena de Ataque (Shai-Hulud 2.0 - noviembre de 2025):
- Instalación: El paquete malicioso ejecuta el script
preinstall que ejecuta setup_bun.js o bun_environment.js (nuevos archivos de payload)
- Creación de Archivos de Datos: Crea archivos
cloud.json, contents.json, environment.json y truffleSecrets.json
- Recolección de Credenciales: Orientación multi-nube (AWS, Azure, GCP) utilizando SDKs oficiales, extrayendo credenciales de archivos de configuración, variables de entorno e IMDS
- Registro de Runner Autoalojado: Registra la máquina infectada como runner autoalojado llamado 'SHA1HULUD'
- Inyección de Workflow de GitHub:
- Crea
.github/workflows/discussion.yaml con runner autoalojado para acceso de puerta trasera
- Crea
.github/workflows/formatter_*.yml para exfiltración de secretos (luego elimina el workflow para ocultar la actividad)
- Escalada de Privilegios en Docker: Intenta obtener acceso root mediante
docker run --rm --privileged -v /:/host
- Volcado de Secretos en la Nube: Utiliza sesiones autenticadas para volcar secretos de AWS Secrets Manager, Google Secret Manager y Azure Key Vault
- Creación de Repositorios: Crea repositorios con "Shai-Hulud" en la descripción para la exfiltración
🎯 Qué se Roba
- Credenciales de Desarrollo: PAT de GitHub (
ghp_*, gho_*), tokens de autenticación npm
- Credenciales de Nube: Claves de acceso y tokens de AWS, GCP, Azure
- Claves API: Atlassian, Datadog y otras credenciales de servicios
- Información del Sistema: Variables de entorno, detalles del host, cuentas de usuario
- Código Fuente: Repositorios privados hechos públicos o clonados
📊 Escala del Impacto
Shai-Hulud Original (septiembre de 2025):
- 200+ paquetes comprometidos en esta base de datos de seguimiento (incluyendo paquetes populares como
@ctrl/tinycolor, ngx-bootstrap)
- Múltiples cuentas de GitHub comprometidas (el número exacto varía según la fuente de reporte)
- Repositorios públicos creados con la etiqueta "Shai-Hulud Migration"
- Desarrolladores potencialmente afectados a través de dependencias de paquetes
Shai-Hulud 2.0 (noviembre de 2025):
- 738+ paquetes comprometidos con 1,291 combinaciones únicas paquete@versión
- 25,000+ repositorios afectados creados en ~350 usuarios únicos
- 1,000+ repositorios nuevos añadidos cada 30 minutos durante las horas iniciales de la campaña
- Afecta a paquetes de ecosistemas importantes: Zapier, ENS Domains, PostHog, Postman, AsyncAPI y más
- Robo de credenciales multi-nube (AWS, Azure, GCP)
- Intentos de escalada de privilegios en Docker
Robo de Credenciales Verificado (de ~20,000 repositorios analizados):
- 775 tokens de acceso de GitHub comprometidos
- 373 credenciales de AWS expuestas
- 300 credenciales de GCP expuestas
- 115 credenciales de Azure expuestas
⚠️ Advertencia de Exfiltración Cruzada entre Víctimas
CRÍTICO: Wiz Research ha confirmado que se está produciendo exfiltración cruzada entre víctimas. Esto significa:
- Los secretos robados de una víctima pueden publicarse en repositorios propiedad de una víctima diferente y no relacionada
- Si encuentra datos sospechosos en sus repositorios de GitHub, pueden pertenecer a otro usuario comprometido
- Sus datos pueden haber sido exfiltrados a repositorios que usted no posee
- Esto complica la atribución y la respuesta a incidentes
Implicación para la Investigación: Al revisar datos exfiltrados en sus repositorios, verifique si los datos realmente pertenecen a su organización o a otra víctima.