TempMail Ninja
//

Ataque a cadena de suministro: Compromiso de Nx Console afecta a GitHub

6 min de lectura
TempMail Ninja
Ataque a cadena de suministro: Compromiso de Nx Console afecta a GitHub

En el panorama de la ciberseguridad corporativa, las fronteras tradicionales del perímetro de red han quedado obsoletas. Durante años, las organizaciones han fortificado sus servidores, implementado sistemas de detección en la nube y blindado las conexiones VPN de sus empleados. Sin embargo, un vector crítico ha permanecido en una alarmante zona gris: las herramientas y entornos de desarrollo locales de sus ingenieros. El reciente incidente de seguridad que afectó a GitHub, rastreado bajo el identificador CVE-2026-48027, ha demostrado con dolorosa claridad cómo un sofisticado ataque a cadena de suministro dirigido a las extensiones de Visual Studio Code (VS Code) puede derribar las defensas de un gigante tecnológico en cuestión de minutos.

La explotación de la popular extensión Nx Console, desarrollada por Nrwl y utilizada por más de 2.2 millones de programadores para la gestión de monorrepositorios, marca un hito peligroso en las tácticas de los actores de amenazas. Este no fue un simple ataque fortuito; representa una operación quirúrgica y multidimensional orquestada por el grupo de amenazas TeamPCP (también catalogado por firmas de seguridad como UNC6780). Al comprometer un componente de confianza incrustado en el corazón mismo del software de edición de código de un empleado, los atacantes lograron evadir las defensas tradicionales de endpoints para exfiltrar aproximadamente 3,800 repositorios de código fuente interno de GitHub, desencadenando una de las crisis de seguridad de software más comentadas del año.

La Génesis del Ataque: La Reacción en Cadena desde TanStack

Para comprender la magnitud de este desastre, es crucial analizar el efecto dominó que facilitó la intrusión inicial. El origen de la brecha no residió directamente en un fallo de la infraestructura de Nx Console, sino en un compromiso aguas arriba que tuvo lugar a principios de mayo de 2026. Los investigadores revelaron que los atacantes lograron obtener las credenciales de un desarrollador principal de Nx —específicamente un token de autorización OAuth de la interfaz de línea de comandos de GitHub (gh CLI)— a través de un ataque a cadena de suministro previo que afectó a la biblioteca de código abierto TanStack.

Con este token legítimo bajo su control, TeamPCP obtuvo acceso privilegiado para actuar como un colaborador autenticado en el repositorio de Nx Console. El 18 de mayo de 2026, a las 12:30 UTC, los atacantes cargaron y publicaron la versión maliciosa 18.95.0 de la extensión en el Visual Studio Code Marketplace oficial de Microsoft y en la plataforma neutral Open VSX. Aunque el equipo de seguridad de Nx identificó la anomalía y retiró la versión comprometida en un tiempo récord de entre 11 y 18 minutos, la trampa ya había sido activada.

El gran catalizador de esta infección masiva fue la función de actualización automática integrada de manera predeterminada en VS Code y otros editores basados en su arquitectura (como Cursor). Durante el breve periodo en que la extensión maliciosa estuvo disponible, los sistemas de miles de desarrolladores en todo el mundo descargaron e instalaron la actualización en segundo plano de manera silenciosa. Las estimaciones internas sugieren que el número real de instalaciones exitosas osciló entre 28 (según métricas iniciales de Microsoft) y más de 6,000 sistemas de desarrollo activos. Uno de estos sistemas pertenecía a un ingeniero de GitHub, otorgando a los atacantes el puente de acceso directo que buscaban hacia la red de la corporación.

Arquitectura Técnica del Exploit: El Decoy del Servidor MCP y el Truco del Commit Huérfano

Una vez instalada en el equipo de la víctima, la versión 18.95.0 de Nx Console se comportaba de manera idéntica a la herramienta legítima para no levantar sospechas. Sin embargo, en el instante en que el programador abría cualquier espacio de trabajo (workspace), se activaba el archivo main.js de la extensión. Este archivo contenía un fragmento de código JavaScript altamente ofuscado y minimizado que simulaba realizar una tarea de configuración rutinaria de un servidor de Model Context Protocol (MCP), un estándar moderno utilizado para integrar agentes de inteligencia artificial en entornos de desarrollo.

Este señuelo del servidor MCP permitía ocultar la verdadera actividad maliciosa: la ejecución silenciosa de un comando del sistema diseñado para descargar una carga útil secundaria. Lo extraordinario y alarmante de este método de entrega es que el script no se conectaba a un servidor externo desconocido (lo que habría encendido las alertas de los firewalls de red tradicionales), sino que apuntaba directamente a un commit huérfano (orphan commit) oculto dentro del repositorio oficial y legítimo de nrwl/nx en GitHub.

En la arquitectura de Git, un commit huérfano es un objeto que ha sido subido al servidor pero no está asociado a ninguna rama (branch) o etiqueta (tag) activa. Esto significa que el código malicioso existía de manera invisible en los servidores de GitHub, evadiendo las herramientas de análisis estático tradicionales que solo escanean ramas principales. El script de la primera etapa instalaba el entorno de ejecución Bun (un runtime de JavaScript de alto rendimiento) para ejecutar de forma inmediata este segundo payload de 498 KB, denominado nx-next, aislando el proceso malicioso bajo un entorno daemonizado indetectable.

El Botín Digital: Un Extractor de Credenciales Sin Precedentes

La carga útil de la segunda etapa, nx-next, operaba como un recolector de credenciales extremadamente agresivo diseñado para barrer la memoria de los procesos en ejecución y los archivos locales del sistema de desarrollo del ingeniero afectado. El objetivo de TeamPCP era claro: recolectar la mayor cantidad de llaves de acceso posibles para comprometer entornos de nube y pipelines de integración continua (CI/CD). El malware ejecutaba rutinas exhaustivas para extraer:

  • Secretos de HashiCorp Vault: Archivos de tokens de acceso ubicados en ~/.vault-token y /etc/vault/token.
  • Configuraciones y Credenciales de Nube: Datos de configuración de AWS IAM, metadatos de contenedores ECS/IMDS (direcciones IP de enlace local 169.254.169.254 y 169.254.170.2), tokens de AWS Systems Manager (SSM) y credenciales de Google Cloud Platform (GCP) y Docker.
  • Tokens de Ecosistemas de Desarrollo: Credenciales guardadas en el archivo de configuración de npm (.npmrc) y tokens activos de OpenID Connect (OIDC).
  • Llaves de Identidad y Almacenamiento Seguro: Credenciales y tokens de la API de GitHub (como prefijos ghp_, gho_ y ghs_), llaves privadas SSH, credenciales de entornos locales de Anthropic Claude Code, e incluso las bóvedas de contraseñas de 1Password a través de sesiones activas de su interfaz CLI (op).

Para transferir el gigantesco botín de credenciales sin levantar sospechas en los sistemas de monitoreo de seguridad empresarial, el malware utilizaba una estrategia de exfiltración de tres canales independientes. El canal principal empleaba conexiones HTTPS directas cifradas hacia dominios de los atacantes. En caso de que estas conexiones fueran interceptadas, utilizaba llamadas legítimas a la propia API de GitHub para ocultar el tráfico de exfiltración bajo transacciones ordinarias de desarrollo. Por último, si el dispositivo se encontraba detrás de un proxy corporativo restrictivo, el malware recurría al tunelizado DNS (DNS tunneling) para enviar pequeños paquetes de datos codificados mediante consultas de resolución de nombres.

TN

Escrito por

TempMail Ninja

Experto en privacidad digital y seguridad en línea. Apasionado por crear herramientas que protejan la identidad de los usuarios en internet.