Resumen ejecutivo
Actualización: 25 de noviembre de 2025
Los investigadores de Unit 42 investigaron un compromiso renovado centrado en npm en una campaña denominada Shai-Hulud 2.0. Esto se reportó por primera vez a principios de noviembre de 2025. La campaña actual tiene un alcance significativamente mayor, afectando a decenas de miles de repositorios de GitHub. Esto incluye más de 25,000 repositorios maliciosos a través de unos 350 usuarios únicos.
Diferencias notables en las campañas de noviembre
- La ejecución durante la preinstalación amplió drásticamente el área de impacto.
- Esta campaña introdujo un mecanismo de reserva (fallback) mucho más agresivo, el cual podría intentar destruir el directorio home del usuario.
- Los nuevos archivos de carga útil (payload) se llaman setup_bun.js y bun_environment.js.
- Las credenciales y secretos robados se exfiltran a repositorios públicos de GitHub con la descripción del repositorio: “Sha1-Hulud: The Second Coming” (Sha1-Hulud: La segunda venida).
La campaña Shai-Hulud 2.0 representa una escalada agresiva en los ataques a la cadena de suministro de software, yendo más allá de los métodos de su predecesor al cambiar el punto de infección. Al apuntar a la fase de preinstalación de las dependencias de software, el malware logra dos avances significativos:
- Elimina por completo la necesidad de interacción humana, garantizando la ejecución en prácticamente todos los servidores de compilación (build servers) que procesen el paquete infectado.
- Evade eficazmente las herramientas de escaneo estático que inspeccionan el código durante etapas posteriores de la compilación.
Si bien esta amenaza todavía se enfoca en robar credenciales de la nube de alto valor, también puede paralizar todo el pipeline de CI/CD de una empresa. Esto podría interrumpir el desarrollo y potencialmente bloquear los sistemas internos, escalando el ataque de un simple espionaje a un evento de denegación de servicio altamente disruptivo.
Lee la sección "Alcance actual del ataque" para obtener más detalles técnicos.
In septiembre, Unit 42 investigó el novedoso gusano de autorreplicación como "Shai-Hulud", responsable del compromiso de cientos de paquetes de software.
Este ataque representa una evolución significativa en las amenazas a la cadena de suministro, aprovechando la propagación automatizada para alcanzar escala. Unit 42 también evalúa con una confianza moderada que se utilizó un LLM para generar el script bash malicioso, basándose en la inclusión de comentarios y emojis.
Los clientes de Palo Alto Networks están mejor protegidos contra este ataque y reciben mitigación para algunos de sus aspectos a través de varios productos y servicios, entre los que se incluyen:
- Cortex Cloud
- Prisma Cloud
- Cortex XDR y XSIAM
- Advanced URL Filtering
- Advanced WildFire
- Next-Generation Firewall con Advanced Threat Prevention
El equipo de respuesta ante incidentes de Unit 42 también puede involucrarse para ayudar con una intrusión o para proporcionar una evaluación proactiva que permita reducir el riesgo.
| Temas relacionados con Unit 42 | Cadena de suministro, recolección de credenciales, Phishing, JavaScript |
Antecedentes de los paquetes npm y la cadena de suministro
El ataque podría originarse en una campaña de phishing de recolección de credenciales que suplanta a npm y pide a los desarrolladores que “actualicen” sus opciones de inicio de sesión de autenticación multifactor (MFA). Una vez obtenido el acceso inicial, el autor de amenazas implementa una carga maliciosa que funciona como un gusano, iniciando una secuencia de ataque en varias fases. Basándose en la inclusión de comentarios y emojis en el script bash, Unit 42 determina con confianza moderada que el actor de amenazas aprovechó un LLM para ayudar a escribir el código malicioso.
Las versiones maliciosas de los paquetes contienen un gusano que ejecuta un script posterior a la instalación. Este malware escanea el entorno comprometido en busca de credenciales sensibles, incluyendo:
- Archivos .npmrc (para tokens npm)
- Variables de entorno y archivos de configuración dirigidos específicamente a tokens de acceso personal (PAT) de GitHub y claves API para servicios en la nube como los siguientes:
- Amazon Web Services (AWS)
- Google Cloud Platform (GCP)
- Microsoft Azure
Las credenciales recolectadas se exfiltran a un endpoint controlado por un actor. El malware crea mediante programación un nuevo repositorio público de GitHub llamado “Shai-Hulud” bajo la cuenta de la víctima y consigna en él los secretos robados, exponiéndolos públicamente.
Utilizando el token npm robado, el malware se autentica en el registro npm como el desarrollador comprometido. Luego, identifica otros paquetes mantenidos por ese desarrollador, inyecta código malicioso en ellos y publica las nuevas versiones comprometidas en el registro. Este proceso automatizado permite que el malware se propague exponencialmente sin la intervención directa de un actor.
Alcance actual del ataque
A fecha de noviembre de 2025, existe un compromiso renovado centrado en npm en una campaña denominada "Shai-Hulud 2.0".
- Ejecución durante la preinstalación (en lugar de post-instalación): Amplió drásticamente el área de impacto a través de las máquinas de los desarrolladores y los pipelines de integración continua y entrega continua (CI/CD).
- Un mecanismo de reserva mucho más agresivo: Esto cambia las tácticas del robo de datos puramente a un sabotaje punitivo. Si el malware no logra robar credenciales, obtener tokens o asegurar algún canal de exfiltración (es decir, no puede autenticarse en GitHub, crear un repositorio o encontrar tokens de GitHub/npm), intenta destruir todo el directorio home de la víctima. Lo hace sobrescribiendo y eliminando de forma segura cada archivo con permisos de escritura que sea propiedad del usuario actual bajo su carpeta home.
- Nuevos archivos de carga útil: Estos se llaman setup_bun.js y bun_environment.js. El ataque se disfraza como un instalador útil de Bun. La carga útil principal, bun_environment.js, es un archivo masivo (más de 10 MB) que utiliza técnicas de ofuscación extrema. Retrasa la ejecución completa en las máquinas de los desarrolladores bifurcándose (forking) en un proceso en segundo plano separado. Esto permite que el proceso de instalación original termine limpiamente, dando al usuario la ilusión de una instalación normal.
- Sha1-Hulud: Las credenciales y secretos robados se exfiltran a repositorios públicos de GitHub con la descripción del repositorio: “Sha1-Hulud: The Second Coming”. También intenta lograr persistencia creando un archivo de flujo de trabajo de GitHub Actions llamado discussion.yaml. Este flujo de trabajo registra la máquina infectada como un runner autohospedado y permite a los atacantes ejecutar comandos arbitrarios abriendo discusiones en GitHub.
Alcance del ataque antes de noviembre de 2025
El alcance del compromiso es extenso, impactando a numerosos paquetes, incluida la biblioteca ampliamente utilizada @ctrl/tinycolor, que recibe millones de descargas semanales.
El robo de credenciales de esta campaña puede conducir directamente al compromiso de servicios en la nube (como AWS, Azure, GCP), llevando al robo de datos de buckets de almacenamiento, despliegue de ransomware, criptominería o eliminación de entornos de producción. También puede conducir al robo directo de bases de datos y al secuestro de servicios de terceros para phishing. Además, las llaves SSH robadas pueden permitir el movimiento lateral dentro de las redes comprometidas.
Guías provisionales
- Rotación de credenciales: rote inmediatamente todas las credenciales de desarrollador. Esto incluye tokens de acceso a npm, PAT y claves SSH de GitHub, y todas las claves de acceso programático para servicios en la nube y de terceros. Asuma que cualquier secreto presente en la máquina de un desarrollador puede haber sido comprometido.
- Auditoría de dependencia: realice una auditoría exhaustiva e inmediata de todas las dependencias del proyecto. Utilice herramientas como npm audit para identificar las versiones vulnerables de los paquetes. Revise los archivos package-lock.json o yarn.lock del proyecto para asegurarse de no estar usando ninguno de los paquetes con problemas conocidos. Elimine o actualice inmediatamente las dependencias afectadas.
- Revisión de la seguridad de la cuenta de GitHub: todos los desarrolladores deben revisar sus cuentas de GitHub en busca de repositorios públicos no reconocidos (en concreto, “Shai-Hulud”), confirmaciones sospechosas o modificaciones inesperadas en los flujos de trabajo de Acciones de GitHub que podrían establecer la persistencia.
- Hacer cumplir la MFA: asegúrese de que la MFA se aplique estrictamente en todas las cuentas de desarrolladores, especialmente en plataformas críticas como GitHub y npm, para evitar el abuso de credenciales.
Consultas de búsqueda de amenazas gestionadas de Unit 42
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Description: Check for connections to any webhook.site domains in raw NGFW URL logs. Optional filter for specific URI observed in use by threat actor. dataset = panw_ngfw_url_raw | filter lowercase(url_domain) contains "webhook.site" | alter susp_uri = if(uri contains "bb8ca5f6-4175-45d2-b042-fc9ebb8170b7") // Optional filter: // | filter susp_uri = true | fields url_domain, uri, susp_uri, * |
|
1 2 3 4 5 6 7 8 9 |
// Description: Check for connections to any webhook.site domains in XDR telemetry. Optional filter for specific URI observed in use by threat actor. dataset = xdr_data | filter event_type = STORY | filter lowercase(dst_action_external_hostname) contains "webhook.site" or lowercase(dns_query_name) contains "webhook.site" | fields agent_hostname, dst_action_external_hostname, dns_query_name |
|
1 2 3 4 5 6 7 |
// Description: Detect malicious YAML file dataset = xdr_data | filter event_type = FILE and action_file_name = "shai-hulud-workflow.yml" and agent_os_type in (ENUM.AGENT_OS_MAC, ENUM.AGENT_OS_LINUX) | fields agent_hostname, actor_effective_username, action_file_name, action_file_path, actor_process_image_name, actor_process_command_line |
|
1 2 3 4 5 6 7 |
// Description: Detects Trufflehog usage. Legitimate tool abused by threat actor for secrets discovery. False positives may occur if there is legitimate use. dataset = xdr_data | filter event_type = PROCESS and lowercase(action_process_image_command_line) contains "trufflehog" | fields agent_hostname, actor_effective_username, actor_process_command_line, action_process_image_command_line |
Consultas actualizadas para la campaña de noviembre de 2025
|
1 2 3 4 5 6 7 |
// Description: Detect malicious bundle.js, bun_environment.js, and setup_bun.js files preset = xdr_file | fields agent_hostname, action_file_name, action_file_path, event_type, event_sub_type, actor_process_image_name, actor_process_command_line, action_file_sha256 | filter event_type = ENUM.FILE | filter action_file_sha256 = "46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09" // bundle.js from September 2025 attack or action_file_sha256 in ("62ee164b9b306250c1172583f138c9614139264f889fa99614903c12755468d0", "f099c5d9ec417d4445a0328ac0ada9cde79fc37410914103ae9c609cbc0ee068", "cbb9bc5a8496243e02f3cc080efbe3e4a1430ba0671f2e43a202bf45b05479cd") // bun_environment.js from November 2025 attack or action_file_sha256 = "a3894003ad1d293ba96d77881ccd2071446dc3f65f434669b49b3da92421901a" // setup_bun.js from November 2025 attack |
|
1 2 3 4 5 6 |
// Description: Detects the unique SHA1HULUD string used in runner creation preset = xdr_process | fields agent_hostname, actor_effective_username, action_process_image_name, action_process_image_path, action_process_image_command_line, actor_process_image_name, actor_process_image_path, actor_process_command_line, agent_os_type, event_type, event_sub_type | filter event_type = ENUM.PROCESS and event_sub_type = ENUM.PROCESS_START | filter action_process_image_command_line contains " --name SHA1HULUD" |
|
1 2 3 4 5 6 7 |
// Description: Detects an extremely large (>=9MB) bun_environment.js file. False positives are possible, be sure to check action_file_path for the package name and version of any hits. preset = xdr_file | fields agent_hostname, action_file_name, action_file_path, action_file_size, event_type, event_sub_type, actor_process_image_name, actor_process_command_line, action_file_sha256 | filter event_type = ENUM.FILE and event_sub_type = ENUM.FILE_WRITE | filter action_file_name = "bun_environment.js" and action_file_size >= 9437184 |
Conclusión
El gusano Shai-Hulud representa una escalada significativa en la actual serie de ataques de NPM dirigidos a la comunidad de código abierto. Esto se produce tras incidentes recientes como la vulneración de s1ngularity/Nx, que supuso el robo de credenciales y expuso repositorios privados, y una campaña generalizada de phishing de NPM observada en septiembre de 2024.
Destaca especialmente su diseño autorreplicante, que combina eficazmente la recogida de credenciales con un mecanismo de difusión automatizado que aprovecha los derechos de publicación de los mantenedores para proliferar en todo el ecosistema. Además, observamos la integración de contenidos generados por IA en la campaña Shai-Hulud, una evolución que sigue al armamento explícito de herramientas de línea de comandos de IA para reconocimiento del ataque s1ngularity/Nx. Esto significa la amenaza en constante evolución de los actores maliciosos que explotan la IA para actividades maliciosas, acelerando la expansión secreta.
La naturaleza consistente y refinada de estas metodologías de ataque subraya una amenaza creciente para las cadenas de suministro de software de código abierto. Estos ataques se propagan a la velocidad de la Integración Continua y la Entrega Continua (CI/CD), lo que plantea retos de seguridad duraderos y cada vez mayores para todo el ecosistema.
Palo Alto Networks ha compartido nuestros resultados con nuestros compañeros de Cyber Threat Alliance (CTA). Los miembros de CTA utilizan esta inteligencia para implementar rápidamente medidas de protección para sus clientes y desarticular sistemáticamente a los ciberdelincuentes. Obtenga más información sobre Cyber Threat Alliance.
Protecciones y detecciones de productos de Palo Alto Networks para ataques a la cadena de suministro de paquetes npm
Los clientes de Palo Alto Networks pueden aprovechar varias protecciones, servicios y actualizaciones de productos diseñados para identificar y defenderse contra esta amenaza.
Si cree que podría haber resultado vulnerado o tiene un problema urgente, póngase en contacto con el equipo de respuesta ante incidentes de Unit 42 o llame al:
- Norteamérica: llamada gratuita: +1 (866) 486-4842 (866.4.UNIT42)
- Reino Unido: +44.20.3743.3660
- Europa y Oriente Medio: +31.20.299.3130
- Asia: +65.6983.8730
- Japón: +81.50.1790.0200
- Australia: +61.2.4062.7950
- India: 00 800 050 45107
Advanced WildFire
Los modelos de aprendizaje automático y las técnicas de análisis de Advanced WildFire se han revisado y actualizado a la luz de los indicadores asociados con esta amenaza.
Firewalls de próxima generación con prevención avanzada de amenazas
El Firewall de próxima generación (Next-Generation Firewall), con la suscripción de seguridad de Prevención Avanzada de Amenazas (Advanced Threat Prevention), puede ayudar a bloquear el ataque a través de la siguiente firma de Prevención de Amenazas: 87042, 87046 y 87047.
Servicios de seguridad suministrados desde la nube para el Firewall de próxima generación
El servicio de Filtrado Avanzado de URL (Advanced URL Filtering) ayuda a bloquear ataques de phishing de tipo Meddler-in-the-Middle (MitM) y clasifica como maliciosas las URL asociadas con esta actividad.
Cortex XDR y XSIAM
Cortex XDR y XSIAM ayudan a proteger contra las amenazas descritas en este artículo. Los agentes impiden la ejecución de malware malicioso conocido y también pueden impedir la ejecución de malware desconocido utilizando protección frente a amenazas de comportamiento y el aprendizaje automático basado en el módulo de análisis local.
Cortex Cloud
Cortex Cloud ofrece amplias capacidades de ASPM y seguridad de la cadena de suministro para ayudar a identificar las vulnerabilidades y configuraciones erróneas que explota Shai-Hulud. Con visibilidad de SBOM en tiempo real, los equipos pueden consultar instantáneamente su inventario contra paquetes npm maliciosos conocidos. El modelo de Riesgo Operacional de la plataforma agrega otra capa de defensa al evaluar componentes de código abierto basándose en la actividad del mantenedor, señales de desuso y salud de la comunidad para marcar paquetes riesgosos incluso sin CVEs publicados.
Para endurecer los pipelines, Cortex Cloud proporciona reglas de CI/CD listas para usar alineadas con la guía de OWASP y CIS, incluyendo verificaciones de archivos lock de npm faltantes, uso inseguro de “npm install”, paquetes con origen en git sin hashes de commit y dependencias no utilizadas que expanden la superficie de ataque.
Dado que la publicación de CVEs a menudo va por detrás de los ataques activos, es crítico revisar y verificar que tus aplicaciones no dependan de versiones de paquetes npm no sancionadas. Juntos, estos controles ayudan a garantizar que las versiones maliciosas no puedan entrar silenciosamente en las compilaciones ni permanecer en tu entorno.
Cortex Cloud publicó una entrada de blog detallada que describe cómo puede utilizarse Cortex Cloud para detectar y prevenir ataques a la cadena de suministro.
Prisma Cloud
Prisma Cloud puede ayudar a detectar el uso de paquetes maliciosos y reconocer errores de configuración en las canalizaciones que podrían llevar a los clientes a utilizar versiones de paquetes OSS no comprobadas o no autorizadas. Sin embargo, el escáner está diseñado para detectar vulnerabilidades, problemas de licencia y riesgos operativos, y no para detectar código malicioso en paquetes nuevos. Es importante investigar las alertas de CI/CD pertinentes y asegurarse de que las aplicaciones no utilizan versiones no autorizadas de paquetes npm.
Indicadores de vulneración
- 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
- b74caeaa75e077c99f7d44f46daaf9796a3be43ecf24f2a1fd381844669da777
- dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c
- 4b2399646573bb737c4969563303d8ee2e9ddbd1b271f1ca9e35ea78062538db
- hxxps://webhook[.]site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7
Recursos adicionales
- Ataque a la cadena de suministro Sha1-Hulud 2.0: +25K repositorios npm expuestos | Blog de Wiz
- Actualizaciones en vivo: Sha1-Hulud, La segunda venida - Cientos de paquetes NPM comprometidos
- Sha1-Hulud: La segunda venida - Zapier, ENS Domains y otros paquetes NPM prominentes comprometidos - StepSecurity
- Breakdown: Widespread npm Supply Chain Attack Puts Billions of Weekly Downloads at Risk (Un ataque generalizado a la cadena de suministro de npm pone en peligro miles de millones de descargas semanales), Palo Alto Networks