Más de 868 paquetes npm comprometidos en horas: el gusano Shai-Hulud expone la fragilidad de la cadena de suministro de software
Un atacante tomó control de la cuenta de GitHub del mantenedor de keyv, una librería de almacenamiento clave-valor que npm sirve 127 millones de veces por semana. En cuestión de horas, versiones envenenadas de keyv y sus paquetes de caché asociados estaban activos en npm, cargando un gusano robador de credenciales. Para el mediodía del martes 5 de agosto de 2026, la firma de seguridad Aikido confirmó al menos 868 paquetes comprometidos a través de 1.381 versiones, con más de 2 mil millones de instalaciones mensuales combinadas, una cifra que seguía escalando. JFrog rastreó independientemente la campaña en más de 400 paquetes y 1.700 versiones envenenadas.
Lo que debería preocupar a cada equipo de seguridad no es el volumen de descargas. Es la documentación criptográfica. Las versiones iniciales envenenadas se enviaron con firmas de procedencia válidas, la atestación criptográfica que la industria construyó para demostrar que un paquete provenía de donde afirmaba. El gusano no falsificó esa firma. La ganó, como lo haría una versión legítima.
Un día antes, CrowdStrike publicó su Reporte de Caza de Amenazas 2026 y predijo exactamente esta forma de ataque. Una sección titulada "Los Ataques a la Cadena de Suministro de Software Evolucionan" nombra al ecosistema de desarrolladores mismo, registros de paquetes, pipelines de integración continua, registros de contenedores y las extensiones que los desarrolladores cargan en sus editores de código, como la superficie que los adversarios ahora atacan directamente. Sitúa a los paquetes npm en el centro de ese cambio, vinculados al 87% de las amenazas maliciosas de registros de software que CrowdStrike rastreó en el primer semestre del año. El gusano keyv convirtió ese hallazgo en un incidente en vivo en menos de 24 horas.
👥 ¿Quieres ir más allá de la noticia?
En nuestra comunidad discutimos las tendencias, compartimos oportunidades y nos ayudamos entre emprendedores. Sin humo, solo acción.
👥 Unirme a la comunidad¿Cómo el gusano obtuvo su procedencia legítima?
Al recorrer el mecanismo queda claro por qué la procedencia no ayudó. Según el análisis de Aikido, el atacante empujó archivos maliciosos directamente a la rama principal de cada repositorio que el mantenedor controlaba, luego inmediatamente cortó una nueva versión. Debido a que la versión se ejecutó a través del propio flujo de trabajo de GitHub Actions del mantenedor, npm generó una atestación de procedencia legítima para ella. Para cualquiera que audite la integridad de la cadena de suministro, la compilación envenenada parecía auténtica. Wiz confirmó la ruta de lanzamiento independientemente, y en una ruta específica documentada por JFrog el gusano fue más allá. Dentro de una ejecución de GitHub Actions vinculada a opensearch-js, solicitó un token OIDC, lo intercambió por un token de publicación y acuñó un paquete Sigstore a través de Fulcio y Rekor para que el tarball malicioso llevara procedencia generada desde el contexto de flujo de trabajo confiable mismo.
Lo que convirtió una sola toma de cuenta en un evento de registro completo fue la propagación. Una vez que un paquete envenenado aterrizó en el entorno de un desarrollador o en un ejecutor de compilación, su carga útil cosechó cada credencial que pudo alcanzar, luego usó cualquier token de publicación de npm que encontró para infectar otros paquetes que la víctima controlaba. Cada mantenedor comprometido se convirtió en un nodo de distribución involuntario, con Aikido observando docenas de paquetes recién infectados aparecer cada pocos minutos. El malware exfiltró secretos robados a repositorios públicos de GitHub etiquetados "Shai-Hulud: Here We Go Again", la firma que nombró la campaña.
Este radio de explosión alcanzó mucho más allá de utilidades oscuras. Debido a que keyv se sienta como una dependencia transitiva bajo muchas herramientas populares, el gusano montó esas cadenas en paquetes bajo ámbitos npm corporativos, con lanzamientos vinculados a Deliveroo, Qlik y Picsart entre los impactos confirmados. Los desarrolladores en esas empresas nunca instalaron keyv a propósito. Solo dependían de algo que dependía de él, capas abajo en un árbol que nadie revisa a mano.
El objetivo real: las credenciales en la nube
Los extractores de credenciales dentro de la carga útil revelan lo que los atacantes realmente buscaban, y nunca fueron las librerías de caché. JFrog, que rastreó el compromiso a través de keyv y cacheable, y Wiz encontraron que el malware cosechaba claves de acceso a la nube, secretos de CI y tokens que autentican a infraestructura de producción. El compromiso del paquete fue el vehículo, y la nube detrás de él siempre fue el destino. CrowdStrike encontró que la actividad criminal consciente de la nube aumentó 171% en el primer semestre de 2026, y el compromiso de la cadena de suministro es una de las rutas que lo alimenta.
El robo no fue el final, porque el gusano también se plantó donde los desarrolladores trabajan. Wiz encontró que el malware deja cargas útiles de persistencia en dos directorios en las máquinas que alcanza: uno para Visual Studio Code y otro llamado .claude, el directorio de trabajo para el agente Claude Code de Anthropic. Los archivos de configuración colocados allí significan que la carga útil puede ejecutarse cuando un desarrollador abre el proyecto infectado en su editor o inicia una sesión de codificación con IA, no solo en el momento de la instalación. Este es el ecosistema de desarrolladores que CrowdStrike nombró, golpeado con precisión: el editor y el asistente de IA en el que un desarrollador más confía y menos inspecciona.
La solución no cuesta nada: retrasar dependencias
Un control habría amortiguado el gusano, y no cuesta nada. Adam Meyers, quien lidera Counter Adversary Operations en CrowdStrike, lo expuso en una entrevista previa al lanzamiento bajo embargo. "Asegura la cadena de suministro de software. Cosas simples como no permitir que ninguna de tus herramientas descargue las dependencias más recientes, sino quizás las dependencias de la semana pasada". El retraso es todo el punto. "Aún vas a tener cosas bastante actualizadas, pero no tendrás ese riesgo de descargar algo que se actualizó hace minutos, y ahora acabas de incorporar algún tipo de herramienta maliciosa". Una versión retenida una semana le da a la comunidad de seguridad tiempo para detectar un envenenamiento que de otro modo alcanzaría cada compilación descendente en minutos.
Esa guía no es hipotética. npm envió esta capacidad en febrero de 2026 con la versión CLI 11.10.0 como una configuración llamada min-release-age. pnpm llegó allí cinco meses antes con minimumReleaseAge. Cualquiera permite a un equipo rechazar cualquier versión de paquete publicada más recientemente que un umbral que establecen. El gusano keyv es el argumento para activarlo.
Meyers empareja el enfriamiento con una segunda disciplina. Parchea lo que los atacantes están explotando antes que cualquier otra cosa. "Necesitas enfocar tu mitigación de vulnerabilidades y parcheo alrededor de las explotaciones que son conocidas por el explotador", dijo a VentureBeat. Señaló un recurso que la mayoría de los equipos subutilizan. "CISA aquí en Estados Unidos publica algo llamado el Catálogo de Vulnerabilidades Explotadas Conocidas", actualizado semanalmente con fallas confirmadas bajo ataque activo, mantenido por el gobierno y gratuito. "Si parcheas esas vulnerabilidades primero, probablemente estarás más seguro".
Meyers puso números duros al problema de velocidad, números que no aparecen en el informe publicado. Todo 2025 vio aproximadamente 48.200 vulnerabilidades registradas como CVEs. Cuando verificó la semana antes de la sesión informativa, 2026 ya había alcanzado 43.000.
Ese volumen rompe los ciclos de parcheo mensuales. "No pueden operar en ventanas de parcheo de 30 días", dijo a VentureBeat. "Tan pronto como se divulga una vulnerabilidad, necesitan moverse hacia parchear o mitigar ese problema en particular". El informe de CrowdStrike empareja esa trayectoria con un hallazgo de que el 88% de la explotación observada contra vulnerabilidades con una prueba de concepto pública ocurrió dentro de las 48 horas de que el código se hiciera público.
GitHub endureció la mitad del problema
GitHub, que posee npm, ha pasado el último año endureciendo el registro contra precisamente esta clase de ataque. La plataforma hizo obligatoria la autenticación de dos factores para publicar, revocó tokens de acceso antiguos que nunca expiran y agregó publicación confiable para que los sistemas de compilación empujen sin credenciales almacenadas. Luego en npm versión 12, lanzada a mediados de 2026, cambió el predeterminado más consecuente. Los ganchos preinstall, install y postinstall en los que la mayoría del malware de registros confía para ejecutarse en el momento en que un paquete aterriza ahora requieren aprobación explícita.
Ese cambio importa directamente aquí porque el gusano keyv se ejecuta a través de un script preinstall, y npm 12 corta en ambas direcciones. JFrog confirmó que en npm 12 o más nuevo, donde los ganchos preinstall están desactivados por defecto, el malware no se ejecuta en el momento de la instalación. Cada organización todavía en una npm más antigua, y la mayoría de las empresas se actualizan lentamente, permaneció expuesta.
Las defensas de GitHub endurecieron la mitad equivocada del ataque más que la correcta, haciendo más difícil que un paquete malicioso se ejecute una vez que aterriza mientras hace menos para detener a un atacante de ganar el derecho de publicar. La toma de cuenta sigue siendo la causa raíz. Kiran Raj, ingeniero de seguridad en Endor Labs, dijo que vio el mismo patrón, un token de publicación de npm robado y reutilizado, en la mayoría de los casos un token de CI o cuenta de servicio cosechado de un ejecutor de compilación que él mismo había instalado una dependencia envenenada. El gusano nunca tuvo que derrotar la procedencia. Necesitaba un conjunto de credenciales válidas, y la propia maquinaria de publicación de npm hizo el resto.
La atestación de procedencia responde si un paquete vino del pipeline que afirma. No responde si el humano o token que activó ese pipeline se suponía que debía. El gobierno de identidad, quién puede publicar y qué pueden alcanzar sus credenciales, es el control más débil. CrowdStrike nombra el abuso de identidades legítimas de desarrolladores como el punto de entrada principal para el compromiso de la cadena de suministro. Meyers lo puso claramente. "Inician sesión, no hackean". La cuenta del mantenedor de keyv era esa identidad, y la maquinaria de publicación confiable hizo el resto en nombre del atacante.
Por qué la sala de juntas es la siguiente
La presión para arreglar esto no vendrá solo de informes de amenazas. Está a punto de venir a través de contratos. Kayne McGladrey, miembro senior del IEEE, dijo a VentureBeat en una entrevista exclusiva que las empresas están comenzando a empujar obligaciones de seguridad de software hacia los proveedores y mantenedores en sus cadenas de suministro. "Vamos a empezar a ver empresas tratando de cambiar contractualmente la responsabilidad a otras partes en sus cadenas de suministro. Estamos usando tu tecnología, pero queremos que hagas la seguridad para ello".
Lo comparó con cómo el Departamento de Defensa obligó a sus proveedores a mejorar su juego a través del programa de certificación CMMC. "Mejora en ciberseguridad si quieres vendernos cosas". Para cualquier empresa que envíe software en dependencias de código abierto, eso convierte la procedencia, la identidad y la disciplina de parcheo en exposición contractual.
Qué significa esto para tu startup
Para un equipo de seguridad decidiendo qué hacer sobre esto el lunes por la mañana, las acciones se dividen en cinco movimientos que se mapean a las cinco formas en que opera esta clase de ataque. Cada uno es una decisión de gobernanza que una junta puede financiar y auditar, no una herramienta que un desarrollador instala solo.
El ecosistema de desarrolladores es el objetivo. CrowdStrike nombra registros de paquetes, pipelines CI/CD, registros de contenedores y extensiones de IDE como la superficie que los adversarios golpean directamente. La carga útil de keyv plantó ganchos de persistencia en directorios de editor de desarrollador y herramientas de IA, no solo en el paquete. Requiere atestación de procedencia y publicación confiable antes de que cualquier dependencia o extensión de editor entre en una compilación. Da a la junta un inventario permanente de registros, componentes de pipeline y extensiones en alcance. Trata las herramientas de desarrollador como una categoría de proveedor auditada.
La automatización hace que la propagación sea rápida. Una credencial robada sembró una cascada que alcanzó al menos 868 paquetes y 2 mil millones de instalaciones mensuales en horas, saltando entre organizaciones cada pocos minutos. El gusano se ejecutó a través de un script preinstall, el predeterminado de tiempo de instalación que npm v12 desactiva. Activa min-release-age de npm para que las herramientas extraigan versiones de la semana pasada, no versiones publicadas hace minutos. Requiere npm v12 o bloqueo de scripts de instalación en todo el estado de compilación. Planifica el compromiso simultáneo de múltiples paquetes en pruebas de resiliencia.
La identidad es el punto de entrada. El ataque comenzó con una cuenta de mantenedor de GitHub secuestrada. La procedencia firmó las versiones envenenadas porque se ejecutaron a través del propio pipeline del mantenedor. Credenciales válidas, no un control roto, hicieron el daño. Manda autenticación multifactor resistente a phishing para cada mantenedor con derechos de publicación. Prefiere tokens de ámbito de corta duración sobre los de larga duración. Reporta la cobertura de identidad de desarrollador y máquina a la junta como una responsabilidad contable.
La nube es el destino real. La carga útil llevaba extractores dirigidos para claves de acceso a la nube, secretos de CI y tokens de infraestructura de producción. El compromiso del paquete fue el vehículo. La actividad criminal consciente de la nube aumentó 171% en el primer semestre de 2026. Clasifica estaciones de trabajo de desarrolladores y ejecutores de CI como activos de nivel cero con estándares de rotación de controlador de dominio. Documenta la rotación de credenciales de la nube en horas después de cualquier exposición de cadena de suministro. Reporta claves de nube de larga duración con objetivos de reducción.
La ventana de parcheo se ha colapsado. CrowdStrike observó el 88% de la explotación con una prueba de concepto pública dentro de las 48 horas. Meyers puso los registros de CVE de 2026 en 43.000 a finales de julio contra 48.200 para todo 2025. El gusano keyv estaba activo en horas, sin CVE que esperar. Restablece los niveles de servicio de parcheo para sistemas orientados a Internet de días a horas y financia el parcheo de emergencia continuo como una operación presupuestada. Da al comité de auditoría el tiempo desde la divulgación hasta la mitigación como una métrica permanente. Construye defensibilidad en controles compensatorios previos al parcheo documentados.
Acciones concretas para implementar esta semana
Configura min-release-age en npm hoy mismo: Ejecuta
npm config set min-release-age 604800000para rechazar paquetes publicados en los últimos 7 días. Es una línea de configuración que podría haber detenido este ataque.Actualiza a npm v12 o bloquea scripts de instalación: Si no puedes actualizar inmediatamente, usa banderas
--ignore-scriptsen tus pipelines de CI hasta que la migración esté completa.Audita tus tokens de publicación npm: Revoca cualquier token de acceso personal que no haya sido usado en 30 días. Migra a tokens de corta duración con ámbitos restringidos solo a los paquetes que cada desarrollador mantiene.
Implementa MFA resistente a phishing para todos los mantenedores: No solo SMS. Usa llaves de seguridad FIDO2 o aplicaciones autenticadoras. Un token robado fue todo lo que necesitó este atacante.
Clasifica credenciales de nube como activos de nivel cero: Rota cualquier clave de acceso AWS, Azure o GCP que haya estado en una máquina de desarrollador o ejecutor de CI en las últimas 72 horas. Asume que fueron comprometidas.
El gusano keyv será contenido. Versiones comprometidas eliminadas, tokens robados rotados, paquetes afectados republicados limpios. Lo que no cambiará es la forma de la exposición que reveló. El ecosistema de desarrolladores es ahora un objetivo principal, la automatización que lo hace productivo es la misma automatización que hace que un gusano sea rápido, y las señales de confianza destinadas a asegurarlo pueden ser satisfechas por cualquiera que tenga las credenciales correctas.
Fuentes
- The Shai-Hulud npm worm didn't fake its security check — it earned a legitimate one
- Keyv and friends compromised in npm supply chain attack - Aikido
- Keyv and Cacheable npm supply chain attack - Wiz
- Shai-Hulud is back: August 2026 npm supply chain attack - JFrog
- CrowdStrike 2026 Threat Hunting Report
👥 ¿Quieres ir más allá de la noticia?
En nuestra comunidad discutimos las tendencias, compartimos oportunidades y nos ayudamos entre emprendedores. Sin humo, solo acción.
👥 Unirme a la comunidad













