playbook de npm worm

El manual del gusano npm: El mismo ataque, tres veces en ocho meses.

En ocho meses, el mismo método del gusano npm funcionó tres veces. Atacantes diferentes, paquetes diferentes, la misma mecánica y el mismo lapso de tiempo entre la publicación y la detección que hizo posible cada ataque. Si te preguntas qué es un gusano npm y por qué el patrón se repite en lugar de corregirse, esta es la respuesta honesta: incidentes, mecánica y la única vulnerabilidad que incluso un sólido marco de defensa deja abierta.

¿Qué es un gusano npm?

Un gusano npm es un fragmento de código malicioso publicado en el registro npm que se propaga automáticamente a otros paquetes una vez ejecutado, generalmente robando las credenciales de publicación de un mantenedor y usándolas para inyectar la misma carga útil en todos los paquetes que controla. Es un "gusano" en el sentido clásico: no espera a que alguien lo instale deliberadamente, sino que se propaga por sí solo, de paquete en paquete, de cuenta en cuenta, a la velocidad de la máquina.

Esa autopropagación es lo que distingue un incidente con un gusano npm de un paquete malicioso común. Un solo paquete malicioso es como buscar una aguja en un pajar. Un gusano npm convierte a cada mantenedor comprometido en un nuevo punto de distribución, y el pajar comienza a generar sus propias agujas.

Los mayores incidentes de gusanos npm hasta la fecha

El año pasado, el patrón de gusano de npm se sometió a tres pruebas en el mundo real, cada una más eficiente que la anterior:

  • Shai-Hulud (septiembre de 2025). El primer gusano npm autopropagante documentado. Comprometía las credenciales de los mantenedores y las utilizaba para publicar versiones maliciosas de todos los paquetes bajo su control, convirtiendo a los propios desarrolladores en el mecanismo de distribución de la siguiente fase del gusano.
  • axios (marzo de 2026). Un malware patrocinado por un estado nación se oculta dentro de un paquete descargado aproximadamente 100 millones de veces por semana. No se trata de un gusano en el sentido estricto de propagación, pero demuestra que el mismo modelo de confianza del ecosistema npm que explotó Shai-Hulud podía transportar una carga útil a una escala realmente masiva.
  • SAP npm (abril de 2026). En su momento se describió como un mini Shai-Hulud: el mismo patrón de gusanos, repetido a gran escala, menos de un año después del incidente original. El mecanismo no había cambiado. Las defensas tampoco, en su mayoría.

Tres incidentes del gusano npm, un patrón que se repite: comprometer la reputación de un editor de confianza, usar sus credenciales para propagar automáticamente el contenido y aprovechar el lapso entre la publicación y la detección por parte de la comunidad para que haga el resto.

Cronología de los mayores ataques a la cadena de suministro de npm, 2025-2026 Ocho ataques a la cadena de suministro de npm entre agosto de 2025 y junio de 2026. El color naranja indica campañas de gusanos que se autopropagan; el gris indica vulneraciones de credenciales o tokens. 26 de agosto de 2025 Compromiso de Nx/s1ngularidad Se ha robado el token de publicación 8 de septiembre de 2025 tiza/depuración secuestro Cuenta de administrador comprometida por phishing 14 de septiembre de 2025 Gusano Shai-Hulud Primer gusano autorreplicante 24 de noviembre de 2025 Shai-Hulud 2.0 Variante de gusano más evasiva marzo 2026 malware estatal Axios Malware estatal, 100 millones de descargas por semana 2026 al XNUMX de abril Compromiso de SAP npm Enterprise-patrón de gusano escamoso 11 de mayo de 2026 TanStack CI/CD compromiso Robo de tokens CI, 84 versiones 1 de junio de 2026 Compromiso de espacio de nombres de Red Hat SLSA válido, pero aún malicioso. Gusano autorreplicante Compromiso de credenciales o tokens
Ocho ataques a la cadena de suministro de npm, de agosto de 2025 a junio de 2026. El color naranja indica campañas de gusanos que se autopropagan.

El patrón que se repite

Si eliminamos los detalles, cada incidente del gusano npm sigue los mismos cuatro patrones:

  • Compromiso de cuenta. Un token de publicación de un mantenedor, npm logino las credenciales de CI son robadas, generalmente a través de phishing, una filtración de Secreto o una dependencia comprometida más arriba en su propia cadena.
  • Inyección silenciosa. El atacante distribuye una nueva versión de un paquete legítimo y de confianza con código malicioso añadido, a menudo dentro de un script posterior a la instalación u otro script del ciclo de vida que se ejecuta automáticamente en el momento en que alguien lo instala.
  • Propagación automática. Si el responsable del mantenimiento comprometido controla otros paquetes, o si el propio script malicioso recopila más credenciales, el gusano se propaga al siguiente paquete y al siguiente responsable del mantenimiento sin que el atacante tenga que realizar ninguna otra acción.
  • El retraso en la detección. El paquete permanece activo en el registro, pudiendo ser instalado por cualquiera, hasta que alguien lo detecta, lo reporta y se elimina. Ese lapso, que en algunos casos dura horas y en otros días, es todo el tiempo que necesita el gusano.

Reconocer que el cuarto latido es lo que realmente importa para la defensa. Toda estrategia de mitigación para un incidente de gusano npm es, en esencia, un intento de reducir o evitar ese retraso en la detección.

Un marco de referencia digno de citar: la respuesta de SIP al problema del tiempo de espera.

No todas las respuestas a este patrón provienen de un proveedor. Una de las más claras es SIP, Plan de Seguridad Inmediato de Mohammad-Ali A'râbi, un marco de emergencia de cinco controles para el riesgo en la cadena de suministro de software que surgió de una pregunta muy práctica formulada al final de una sesión de SafeDev: "Si solo podemos hacer unas pocas cosas, ¿qué deberíamos hacer primero?"

El segundo control de SIP está dirigido directamente al problema del gusano npm: congelar las dependencias no verificadas con un período de espera de cinco días y deshabilitar los scripts del ciclo de vida para que un postinstall malicioso no pueda ejecutarse automáticamente durante la instalación. En la práctica, eso es min-release-age=5 y ignore-scripts=true en un proyecto .npmrc, implementado en CI para que un archivo de bloqueo no pueda resolver silenciosamente un paquete publicado ayer. Es un control realmente sólido y de bajo esfuerzo, y apunta directamente al mismo retraso en la detección del que depende cada incidente del gusano npm. Más información:

Donde el tiempo de reutilización aún deja un vacío

El periodo de espera es una apuesta: que la comunidad detectará y reportará un paquete malicioso antes de que finalice dicho periodo. En la mayoría de los casos, esta apuesta da sus frutos. Una parte importante de los paquetes comprometidos se detectan en los primeros días posteriores a su publicación, razón por la cual un plazo de cinco días es un valor predeterminado razonable.

Pero un gusano npm no se comporta como un paquete malicioso típico, y eso cambia lo que un tiempo de espera fijo puede y no puede hacer por ti.

Para ser precise sobre la velocidad: Un gusano que se propaga rápidamente no anula el tiempo de espera en sí. Si se impone una antigüedad mínima estricta para las versiones, los paquetes publicados durante esa oleada inicial siguen siendo demasiado recientes para incluirse en una compilación, independientemente de cuántos paquetes comprometa el gusano mientras tanto. La velocidad importa, pero importa para todos los usuarios posteriores que no tienen un tiempo de espera, no para eludir uno que ya está vigente.

La verdadera limitación es la paciencia. Una carga útil más cuidadosa puede permanecer inactiva más allá del período de enfriamiento, activándose solo una vez que hayan transcurrido los días y el paquete haya envejecido en la zona "confiable", antescisely porque sabe que hay un tiempo de espera vigilando. Ese es el escenario en el que un tiempo de espera fijo por sí solo no es suficiente, y es precisamente donde algo como la detección basada en evidencia de MEW debe coexistir con él, no reemplazarlo.

Ninguno de los dos modos de fallo constituye un defecto en el diseño de SIP. El tiempo de espera es una estrategia de detección comunitaria, y esta tiene un límite: no puede detectar lo que aún no se ha reportado. Esta limitación no es exclusiva de SIP, sino una limitación estructural de cualquier sistema de defensa que espera a que exista una firma, un aviso o un informe público antes de actuar.

Cómo MEW reduce la brecha en el tiempo de recarga

Esto es precisely la brecha Alerta temprana de malware (MEW) de Xygeni MEW está diseñado para cerrarse automáticamente. En lugar de esperar informes de la comunidad o una firma digital publicada, MEW escanea continuamente NPM, PyPI y Maven a medida que se publican nuevos paquetes y versiones, analizando el comportamiento en lugar de compararlo con amenazas conocidas. Si algo parece malicioso, se pone en cuarentena y los investigadores de seguridad confirman el hallazgo antes de su divulgación pública, no después.

Esa distinción es importante para ambos modos de fallo del gusano npm mencionados anteriormente. Contra un gusano de rápida propagación, la detección previa a la firma no necesita los cinco días que supone el periodo de espera. Contra una carga útil latente y persistente, el análisis de comportamiento de MEW no busca la antigüedad ni la reputación, sino lo que realmente hace el código, por lo que esperar a que finalice el periodo de espera no le sirve de nada al atacante.

El firewall de dependencias de MEW extiende esto hasta el punto de la instalación misma, bloqueando un paquete malicioso en tiempo real incluso si pasó por alto comprobaciones anteriores, y la misma capa de detección cubre el CI/CD Aspectos de un incidente con un gusano npm: el patrón de desbloquear-ramificar, inyectar y volver a bloquear que permite a un atacante enviar código malicioso. commit y, discretamente, borrar sus huellas, con un registro de auditoría completo si esto ocurre de todos modos.

SIP y MEW responden a la misma pregunta, pero en diferentes niveles.

Nada de esto invalida el control de enfriamiento de SIP, y vale la pena decirlo claramente: un enfriamiento de cinco días con los scripts del ciclo de vida deshabilitados sigue siendo una de las defensas más rápidas y económicas que un equipo puede implementar contra un incidente común de gusano npm, y debe formar parte de cualquier plan serio de fortalecimiento de la cadena de suministro. Lo que no puede hacer, por diseño, es detectar lo que la comunidad aún no ha descubierto. Esa es la función de la detección continua basada en el comportamiento que se ejecuta bajo el enfriamiento, no en su lugar.

En conjunto, los dos enfoques cubren ambos extremos del mismo problema: SIP fortalece la construcción pipeline, la congelación de dependencias y la imagen del contenedor en torno a un panorama de amenazas conocido y divulgado, mientras que la detección de pre-firma de MEW cubre los incidentes del gusano npm que aún no se han divulgado, aquellos que una ventana de enfriamiento, por su propia lógica, no puede ver venir.

Preguntas Frecuentes

¿Qué es un gusano npm, en una sola frase?
Código malicioso publicado en npm que se propaga automáticamente a otros paquetes, normalmente robando las credenciales de un mantenedor y usándolas para inyectar la misma carga útil en otros lugares, sin que el atacante tenga que realizar ninguna otra acción.

¿Cada paquete npm malicioso es un gusano npm?
No. Un paquete malicioso que no se propaga por sí solo es un ataque a la cadena de suministro, pero no un gusano. Lo que define un incidente de gusano npm específicamente es el paso de autopropagación: una vulnerabilidad que conduce automáticamente a la siguiente.

¿Un período de espera entre dependencias detiene un gusano de npm?
Reduce significativamente el riesgo, ya que la mayoría de los paquetes maliciosos se reportan durante los primeros días de su publicación. Sin embargo, un período de espera implica apostar por la velocidad de detección de la comunidad, y se puede crear un gusano npm de rápida propagación o deliberadamente inactivo específicamente para evitar ese lapso.

¿Qué es lo que realmente atrapa a un gusano de npm antes de que se produzca un período de enfriamiento?
Escaneo continuo basado en el comportamiento que no depende de la existencia de una firma o un informe público. Esa es la brecha específica que las herramientas de detección previa a la firma, como MEW de Xygeni, están diseñadas para subsanar.

sca-tools-software-herramientas-de-analisis-de-composicion
Priorice, solucione y proteja sus riesgos de software
Obtén tu cuenta gratuita.
Sin tarjeta de crédito.

Asegure el desarrollo y entrega de software

con la suite de productos Xygeni