Esto es lo que realmente sucedió, paso a paso: El 18 de mayo, los actores de amenazas comprometieron la cuenta de publicación de Nrwl (la empresa detrás de Nx Console) en el mercado de VS Code. Entre las 12:36 y las 12:47 UTC de ese día, subieron la versión 18.3.4 de Nx Console con código malicioso al mercado utilizando las credenciales legítimas del editor. La versión comprometida fue firmada criptográficamente con el certificado de editor válido de Nrwl, por lo que la verificación integrada de VS Code la aceptó sin advertencia. Cuando cualquier instancia de VS Code de un desarrollador buscó actualizaciones de extensiones durante esa ventana de 11 minutos (o cuando instalaron manualmente Nx Console durante ese período), descargaron directamente la versión envenenada desde el mercado oficial de Microsoft. La extensión no fue hackeada en el sentido de que alguien modificara archivos en un servidor, se publicó por la puerta principal utilizando credenciales de editor robadas. ¿Cómo obtuvieron los atacantes las credenciales de publicación del mercado de Nrwl en primer lugar? Esa es la parte que a la mayoría de la cobertura le falta. La publicación en el mercado de VS Code requiere ya sea un Token de Acceso Personal (PAT) de Azure DevOps o credenciales OAuth vinculadas a una cuenta de Microsoft. Esas credenciales casi con seguridad se obtuvieron de un compromiso anterior de cadena de suministro, posiblemente de una ola anterior de la misma campaña. Esto crea un patrón de falla en cascada: comprometer una herramienta de desarrollador para robar credenciales, usar esas credenciales para publicar versiones maliciosas de otra herramienta de desarrollador, usar esa herramienta para robar más credenciales, repetir. Cada iteración aumenta el acceso del atacante a las cuentas de editor en todo el ecosistema. El compromiso de Nx Console no fue el paciente cero, ya estaba profundamente en la cadena. Una vez que la extensión envenenada se instaló en la máquina de un desarrollador (incluido el empleado de GitHub en el centro de esta historia), ejecutó inmediatamente código que escaneó toda la máquina en busca de credenciales. Las extensiones de VS Code están escritas en JavaScript y TypeScript, y se ejecutan dentro de Node.js, el mismo entorno de ejecución de JavaScript que impulsa a VS Code. Cuando instalas una extensión, VS Code carga su código JavaScript directamente en el espacio del proceso del editor con acceso completo a las APIs de Node.js. El código malicioso en Nx Console 18.3.4 utilizó las APIs del sistema de archivos de Node.js (específicamente fs.readFile, fs.readdir y funciones de recorrido de rutas) para escanear recursivamente el directorio de inicio del usuario y ubicaciones comunes de almacenamiento de credenciales. Buscó archivos que coincidieran con patrones como .npmrc, .aws/credentials, .kube/config, .ssh/, .gitconfig, .netrc y archivos de configuración para 1Password CLI, HashiCorp Vault y Claude Code. La extensión también llamó a las APIs del proceso hijo de Node.js (child_process.exec y child_process.spawn) para ejecutar comandos del sistema que descargan variables de entorno, consultan el llavero del sistema en macOS (utilizando la herramienta de línea de comandos de seguridad) y extraen credenciales del Administrador de Credenciales de Windows (usando cmdkey). Todo esto sucede en puro JavaScript que se ejecuta con los mismos privilegios que el usuario que lanzó VS Code. No hay sandboxing, no hay mensajes de permisos, no hay aislamiento a nivel del sistema operativo. Las extensiones de VS Code son código de confianza por diseño. Las credenciales obtenidas fueron luego exfiltradas usando el módulo https incorporado de Node.js para enviar los datos mediante POST a dominios controlados por el atacante. El código malicioso ofuscó el punto final de exfiltración utilizando codificación base64 y concatenación de cadenas para evadir el análisis estático, pero una vez que la extensión se ejecutó, hizo solicitudes HTTPS directas para enviar cargas útiles JSON comprimidas que contenían todas las credenciales que encontró. El package.json de la extensión declaró eventos de activación que la hacían ejecutarse inmediatamente al inicio de VS Code (utilizando el evento de activación "*", que se activa en cualquier apertura de espacio de trabajo), lo que significa que los desarrolladores no necesitaban invocar explícitamente las funciones de Nx Console para que se ejecutara el código malicioso. Solo tener VS Code funcionando con la extensión instalada era suficiente. La carga útil de JavaScript también inyectó hooks en las propias APIs de almacenamiento de credenciales de VS Code (usando las APIs vscode.authentication y vscode.workspace) para interceptar cualquier credencial a la que el usuario accediera durante su sesión de trabajo, incluidos los tokens OAuth de GitHub que VS Code utiliza para su propia integración de Git. A partir de ahí, el atacante utilizó esas credenciales robadas para instalar una segunda extensión envenenada en la misma máquina del empleado (GitHub aún no ha revelado cuál fue esta extensión). Esa segunda extensión exfiltró aproximadamente 3,800 repositorios internos de GitHub durante las siguientes horas o días. Para el 20 de mayo, el grupo de amenazas TeamPCP estaba anunciando los repositorios robados para su venta en un foro de piratería por $50,000 en adelante, horas antes de que GitHub confirmara públicamente la brecha. Los repositorios internos no son datos de clientes, son algo peor para la seguridad de la infraestructura. Estos repositorios contienen scripts de implementación, credenciales de preparación, esquemas de API internos y configuraciones de infraestructura. El acceso al código fuente a ese nivel da a los atacantes un plano de cómo los sistemas de GitHub se conectan, autentican y fallan. Cada secreto que llega a un comprador acorta la fase de reconocimiento para cualquier ataque que ese comprador ya estaba planeando. El cofundador de Binance, CZ, advirtió inmediatamente a cualquiera con repositorios privados que contengan secretos en texto claro que rotara todo. Mike Riemer, CTO de Ivanti, me dijo que la red honeypot de Azure ahora muestra vulnerabilidades conocidas explotadas en menos de 90 segundos, y las credenciales robadas colapsan la línea de tiempo aún más. La brecha de GitHub no llegó en un vacío. El 19 de mayo, Endor Labs detectó 42 paquetes npm maliciosos (Socket's tracking más amplio encontró 639 versiones maliciosas en 323 paquetes) publicados dentro del ecosistema de visualización de datos @antv de Alibaba, que ve aproximadamente 16 millones de descargas semanales. Esta ola introdujo falsificación de procedencia: el gusano Mini Shai-Hulud ahora llama a Fulcio y Rekor en tiempo de ejecución para generar certificados de firma válidos de Sigstore para cada paquete que propaga. Las herramientas de procedencia muestran una insignia verde. La cadena de construcción pertenece al atacante. Peyton Kennedy, investigador de seguridad sénior en Endor Labs, me dijo que "TanStack tenía la configuración correcta sobre el papel: publicación de confianza OIDC, procedencia firmada, 2FA en cada cuenta de mantenedor. El ataque funcionó de todos modos". También el 19 de mayo, actores de amenaza comprometieron el flujo de trabajo de acciones de GitHub actions-cool/issues-helper redirigiendo cada etiqueta existente a un commit impostor que contiene código malicioso que exfiltra credenciales de pipelines CI/CD (Integración Continua/Despliegue Continuo). El dominio de exfiltración coincidió con la ola Mini Shai-Hulud de @antv, uniendo los clústeres. Horas después, Wiz detectó que TeamPCP había comprometido durabletask, el cliente oficial de Python de Microsoft para el marco de ejecución de flujos de trabajo Durable Task. Tres versiones maliciosas fueron publicadas en PyPI (Índice de Paquetes de Python) dentro de una ventana de 35 minutos usando una cuenta de GitHub comprometida en una operación previa de TeamPCP. La carga útil roba credenciales de AWS (Servicios Web de Amazon), Azure, GCP (Plataforma de Google Cloud), Kubernetes y más de 90 configuraciones de herramientas de desarrollo, luego se propaga lateralmente a través de la infraestructura en la nube. El paquete promedia más de 400,000 descargas mensuales. Todo el patrón se repite: comprometer una herramienta popular, exfiltrar credenciales de cada máquina que la ejecuta, usar esas credenciales para comprometer la siguiente herramienta. TeamPCP está construyendo una base de datos de credenciales que abarca todo el ecosistema de desarrolladores y están vendiendo acceso a cualquiera que pague.
Historia completa del hackeo de GitHub: La extensión de VSCode Nx Console de Nrwl filtra 3,800 secretos
GitHub confirmó el 20 de mayo que dos extensiones envenenadas de VS Code en la máquina de un empleado dieron a los atacantes acceso a aproximadamente 3,800 repositorios internos. Primero, una versión comprometida de Nx Console (2.2 millones de instalaciones) obtuvo credenciales el 18 de mayo. Luego, una segunda extensión no revelada utilizó esas credenciales para exfiltrar los repositorios. El grupo de amenazas TeamPCP está vendiendo el botín comenzando desde $50,000. Esto no fue un caso aislado: llegó junto con un gusano de cadena de suministro que forjó firmas criptográficas válidas en 639 paquetes npm maliciosos y una brecha del propio SDK de Python de Microsoft en PyPI.
Mi opinion
Siete superficies de cadena de suministro fallaron en 48 horas, y un grupo conecta al menos tres de ellas. Esta no es una historia sobre una mala extensión de VS Code. Esta es una historia sobre la infraestructura de confianza que colapsa bajo una presión adversarial que nunca fue diseñada para soportar. Las insignias de procedencia no significan nada cuando la identidad de firma es robada. La moderación del mercado no significa nada cuando el moderador también es la víctima. Cada marca de verificación verde en la cadena de herramientas de desarrollo se ha convertido en un señuelo. Lo que hace que esto sea diferente de cada susto anterior de cadena de suministro es el ritmo operativo del adversario y las herramientas que han hecho de código abierto. TeamPCP lanzó el código del gusano Mini Shai-Hulud completamente armado el 12 de mayo. Las variantes imitadoras ya están circulando. Trend Micro rastreó al menos siete olas confirmadas desde marzo, cada una apuntando a un paquete de mayor descarga e introduciendo un vector de acceso más técnicamente sofisticado. El gusano ahora forja su propia procedencia criptográfica en tiempo de ejecución. Se propaga a través de GitHub Actions, extensiones de VS Code, npm y PyPI simultáneamente. Omite sistemas con una configuración regional rusa. Kennedy me dijo que la configuración correcta sobre el papel ya no detiene estos ataques. Los marcos de cumplimiento en los que dependen las empresas fueron escritos para humanos. Las identidades de los agentes no aparecen en ningún catálogo de control con el que nadie se haya encontrado. Los malos están pivoteando más rápido de lo que la industria de la defensa puede actualizar sus manuales.
Que pasa despues
Cada desarrollador que tenía Nx Console instalado el 18 de mayo entre las 12:36 y las 12:47 UTC necesita rotar cada credencial en su máquina, inmediatamente. Eso incluye no solo credenciales de trabajo sino también tokens personales de GitHub, claves de AWS, claves SSH, bases de datos de gestores de contraseñas, todo. La mayoría no lo hará, porque la mayoría de los desarrolladores no saben que fueron afectados. El tiempo de respuesta de 11 minutos del equipo de Nx significa que esta brecha no aparecerá en la mayoría de los registros de auditoría de seguridad. No se disparó ninguna alerta, ningún intento de inicio de sesión sospechoso activó la monitorización, solo una actualización normal de extensión que contenía un recolector de credenciales. El empleado de GitHub que fue vulnerado enfrentará presión para divulgar exactamente cuál extensión fue envenenada en segundo lugar, y cuando lo hagan, cada equipo de seguridad que ejecute esa extensión exigirá un post-mortem completo. El verdadero efecto dominó ocurre cuando el primer comprador de esas credenciales (no solo los 3,800 repositorios, sino la base de datos completa de credenciales que TeamPCP obtuvo de todos los que instalaron la extensión envenenada) usa credenciales de preparación o esquemas de API internos para violar una empresa que no ha conectado los puntos aún. Mientras tanto, el hecho de que TeamPCP haya hecho de código abierto el gusano Mini Shai-Hulud significa que estamos a punto de ver una explosión cambriana de ataques imitadores dirigidos a otras extensiones y paquetes populares. La heurística de detección de Kennedy funcionará hasta que la próxima variante cambie esas firmas. El escenario contrario que nadie está considerando: ¿qué pasa si el compromiso de Nx Console obtuvo credenciales de desarrolladores en docenas de grandes empresas tecnológicas, proveedores de la nube y vendedores de seguridad, y GitHub simplemente fue la primera víctima cuya brecha se hizo pública? En ese escenario, estamos viendo el acto de apertura de una campaña mucho más grande, y las credenciales que están en la base de datos de TeamPCP desbloquean infraestructuras en toda la industria.
Lo que nos dice la historia
El ataque de cadena de suministro SolarWinds de 2020 comprometió aproximadamente a 18,000 clientes a través de una actualización de software envenenada, llevando a un replanteamiento fundamental de los modelos de confianza en el software empresarial. Ese ataque tomó meses para descubrir e involucró a un adversario de estado-nación (atribuido al SVR de Rusia) con recursos significativos. Lo que es diferente en 2026 es el ritmo operativo y el perfil del adversario. TeamPCP está motivado financieramente, no patrocinado por el estado, sin embargo, están ejecutando ataques de cadena de suministro a un ritmo que iguala o supera las capacidades de los estados-nación de hace solo unos años. La publicación abierta de sus herramientas representa un cruce de umbral: los ataques de cadena de suministro ya no son exclusivos de los grupos APT (Amenaza Persistente Avanzada) con cronogramas operacionales de varios años. Ahora son ejecutables por cualquier actor de amenaza con una sofisticación técnica moderada, y las herramientas se propagan por sí mismas.
Impacto en los mercados
Microsoft (MSFT, cotizando actualmente alrededor de $425, bajando aproximadamente un 3% en el último mes en medio de una debilidad más amplia en el sector tecnológico) enfrenta un daño reputacional por una brecha que permaneció completamente dentro de su propio ecosistema. GitHub es una subsidiaria de Microsoft, VS Code es un producto de Microsoft, y la extensión maliciosa llegó a través de un mercado operado por Microsoft. Esto crea presión a nivel de la junta para revisar la seguridad del mercado, lo que probablemente significa un aumento de la fricción en el ecosistema de extensiones y potencialmente una velocidad de funciones más lenta. Eso es un arrastre a mediano plazo en la posición competitiva de VS Code frente a JetBrains y otros IDEs (Entornos de Desarrollo Integrados). Más inmediatamente, CrowdStrike (CRWD, cotizando alrededor de $285, subiendo aproximadamente un 8% mes a mes a medida que las empresas aumentan el gasto en seguridad tras brechas de alto perfil) y Palo Alto Networks (PANW, alrededor de $345, subiendo un 6% este mes) están en posición de beneficiarse a medida que las empresas reevalúan la seguridad de terminales y la gestión de riesgos de la cadena de suministro. Se espera un movimiento alcista a corto plazo para ambos a medida que los equipos de aprovisionamiento aceleran las evaluaciones de proveedores. La brecha de GitHub específicamente valida la tesis detrás de los proveedores de arquitectura de confianza cero, cada credencial y token en esos 3,800 repositorios ahora deben ser tratados como comprometidos, lo que impulsa la demanda de soluciones que asumen la violación y aplican el acceso de menor privilegio en tiempo de ejecución. Cloudflare (NET, alrededor de $95, relativamente plano este mes) y Okta (OKTA, alrededor de $78, bajando un 4% en medio de preocupaciones de rentabilidad) podrían ver una mayor demanda de soluciones de gestión de identidad y acceso que limiten el radio de explosión cuando se filtran credenciales.