Uso malicioso de agentes de programación con IA en el incidente de seguridad del paquete malicioso Nx
27 de agosto de 2025
0 minutos de lecturaEl 26 y 27 de agosto de 2025 (UTC), se publicaron en npm ocho versiones maliciosas de Nx y Nx Powerpack releases en dos líneas de versiones, que estuvieron disponibles durante ~5 horas y 20 minutos antes de ser retiradas. El ataque también afecta a la extensión Nx Console para VS Code.
Actualización del 1 de septiembre: Ahora se sabe que la causa raíz de la versión maliciosa de Nx publicada en npm fue un flujo de trabajo de CI de GitHub Actions defectuoso que se incorporó mediante un Pull Request el 21 de agosto. Se estima que Claude Code generó la contribución de código. Un commit malicioso posterior, realizado el 24 de agosto, modificó el flujo de trabajo de CI para que el token de npm usado para publicar el conjunto de paquetes de Nx se enviara a un servidor controlado por un atacante mediante un webhook.

Más allá de las técnicas tradicionales, la carga útil armó agentes locales de programación con IA (claude, gemini y q) con una instrucción peligrosa para inventariar archivos sensibles y luego exfiltrar secretos, credenciales y datos sensibles del host a un repositorio público de GitHub llamado s1ngularity-repository-NNNN, con un sufijo numérico. Creemos que probablemente se trata de uno de los primeros casos documentados de malware que aprovecha las interfaces de línea de comandos de asistentes de IA para realizar reconocimiento y exfiltrar datos.
Los responsables de Nx publicaron un aviso de seguridad oficial, que Snyk sigue mediante los siguientes avisos:
La hipótesis actual es que se usó un token de npm comprometido con permisos de publicación para distribuir los paquetes maliciosos. Todas las versiones comprometidas ya se retiraron del registro de npm.
Si instalaste las versiones afectadas, rota las credenciales de inmediato, busca s1ngularity-repository-* en GitHub y sigue los pasos de limpieza que se indican a continuación.
¿Qué es Nx?
Nx es un popular sistema de compilación y herramienta para monorepos, ampliamente utilizado en proyectos de JavaScript y TypeScript, con millones de descargas semanales. La popularidad de Nx amplifica el alcance de incidentes como este en ecosistemas de cadena de suministro de código abierto como npm.
El malware arma agentes de programación con IA para exfiltrar datos
Este incidente marcó un precedente en los ataques con paquetes maliciosos en npm: el malware de postinstall probó localmente varias herramientas de IA para CLI, incluidas Claude Code de Claude, Gemini CLI de Google y el nuevo agente de programación de línea de comandos q de Amazon. Luego, las ejecutó con indicadores no seguros para eludir las protecciones y analizar el sistema de archivos en busca de rutas sensibles, y guardó los resultados en /tmp/inventory.txt (y en una copia de respaldo).
Ejemplos observados: ejecución de agentes de programación con IA con indicadores como --dangerously-skip-permissions (Claude Code), --yolo (Gemini CLI) y --trust-all-tools (Amazon q).
La instrucción incluida indicaba al agente que enumerara de forma recursiva elementos de billeteras, claves SSH, archivos .env y otros objetivos de alto valor, respetando un límite de profundidad y creating /tmp/inventory.txt(.bak).
Esta es la instrucción proporcionada a los agentes de programación con IA:
El malware también incluye una variante mínima de la instrucción, diseñada únicamente para inventariar rutas de archivos de texto sin formato (sin su contenido), lo que confirma aún más el diseño de reconocimiento asistido por agentes.
Por qué importa el ataque del paquete malicioso Nx: convertir agentes de IA «útiles» en herramientas de reconocimiento automatizado supone una fuerte escalada en los ataques a la cadena de suministro de código abierto y probablemente sea uno de los primeros casos documentados públicamente en que se coacciona a interfaces de línea de comandos de asistentes de IA de esta manera.
Análisis del malware de agentes de IA
El script postinstall telemetry.js importa capacidades de procesamiento secundario, establece la instrucción y prepara la recopilación de datos:
Luego, continúa con comprobaciones multiplataforma para asegurarse de que pueda ejecutarse correctamente en macOS, Windows y Linux:
Después, el código malicioso continúa preparando las interfaces de línea de comandos de los asistentes de programación con IA y sus opciones:
Por último, incluye código que recopila credenciales de npm, credenciales de GitHub y otra información confidencial, y configura el inventario y la publicación de estos datos en repositorios públicos de GitHub:
¿Qué ocurrió en la vulneración de Nx?
¿Cómo fue posible el ataque?
Los investigadores creen que se comprometió un token de npm de un responsable del proyecto con permisos de publicación, y que luego se publicaron las versiones maliciosas directamente en npm. Cabe destacar que estas no tenían procedencia, un mecanismo que permite verificar criptográficamente el origen y la integridad de los paquetes publicados. Este incidente destaca la necesidad crítica de adoptar y exigir verificaciones de procedencia en las cadenas de suministro de código abierto.
¿Cómo se ejecutó el ataque a Nx?
Un script postinstall (llamado telemetry.js) se ejecuta durante la instalación del paquete Nx (cuando los desarrolladores ejecutan npm install o npm install nx). Al instalar Nx, el script recopila datos localmente y realiza reconocimiento con agentes de IA, roba las credenciales y los tokens de GitHub de los usuarios (usando el comando gh auth token cuando está disponible), crea un repositorio público de GitHub en la cuenta de la víctima y codifica en base64 tres veces y carga todos los datos recopilados en results.b64.
¿Qué datos se buscaron y de dónde?
La carga útil buscaba tokens de GitHub, tokens de npm (~/.npmrc), claves SSH, variables de entorno y una amplia variedad de elementos de billeteras de criptomonedas. Los datos se recopilaron de las estaciones de trabajo de los desarrolladores y, potencialmente, de cualquier otro ejecutor de CI o compilación donde se instalara el paquete.
¿Incluía algún elemento destructivo?
Sí. El malware, posiblemente en un intento de ocultarse y causar más interrupciones, agregó sudo shutdown -h 0 tanto a ~/.bashrc como a ~/.zshrc, lo que provocaba que las nuevas sesiones de shell se cerraran de inmediato.
Paquetes y versiones afectados
nx:
21.5.0,20.9.0,20.10.0,21.6.0,20.11.0,21.7.0,21.8.0,20.12.0(todas ya fueron retiradas).Plugins de Nx (ejemplos):
@nx/devkit,@nx/js,@nx/workspace,@nx/node,@nx/eslint(variantes maliciosas21.5.0y/o20.9.0) y@nx/key,@nx/enterprise-cloud(3.2.0).Extensión para VS Code: Nx Console
Acciones inmediatas (hazlas ahora)
Comprueba si se usó tu cuenta de GitHub para exfiltrar datos. Busca repositorios llamados
s1ngularity-repository-*. Si encuentras alguno, toma medidas de inmediato según las instrucciones de tus equipos de seguridad de producto y de seguridad de la información.Rota todas las credenciales que podrían haber estado en el host: tokens de GitHub, tokens de npm, claves SSH y cualquier clave de API en archivos
.env.Audita y limpia tu entorno según las instrucciones de tu equipo de seguridad de producto
Identifica el uso de Nx en tus proyectos. Ejecuta
npm ls nx(y revisapackage-lock.json) para detectar instalaciones transitivas; si hay versiones afectadas, desinstálalas e instalanx@latest.Los usuarios de Snyk pueden usar Snyk SCA y Snyk SBOM para localizar y monitorear proyectos en toda la organización.
Si tienes instaladas interfaces de línea de comandos de IA, revisa el historial de tu shell en busca de indicadores peligrosos (
--dangerously-skip-permissions,--yolo,--trust-all-tools).
Medidas preventivas futuras contra ataques a la cadena de suministro
Exige el uso del archivo de bloqueo en CI con
npm ci.Desactiva los scripts de instalación de forma predeterminada: usa
--ignore-scriptsy estableceignore-scripts=trueen un archivo.npmrcde usuario o de proyecto para neutralizar scripts maliciosos depostinstall.Activa la autenticación de dos factores de npm y, de preferencia, usa el modo de autenticación y publicación:
npm profile enable-2fa auth-and-writes.Verifica la procedencia antes de instalar siempre que sea posible. Es fundamental tener en cuenta que las versiones maliciosas de Nx se publicaron sin procedencia (!), mientras que las versiones recientes y legítimas incluían información de procedencia. Es una señal útil durante la investigación.
Verifica tus instalaciones antes de ejecutarlas con npq (o Snyk Advisor) para que puedas controlar las instalaciones según señales de confianza y la inteligencia de Snyk. Considera crear un alias local de
npmanpq.Analiza y monitorea continuamente con Snyk (
snyk test/snyk monitor) para detectar nuevas divulgaciones y automatizar correcciones. Snyk también puede ayudarte a localizar y detectar instalaciones de dependencias específicas en tus equipos de I+D.Usa un registro privado o con proxy (por ejemplo, Verdaccio) para reducir la exposición directa y aplicar políticas de publicación y consumo.
Lecturas recomendadas: las 10 prácticas recomendadas de seguridad para npm de Snyk y Seguridad de npm: cómo prevenir ataques a la cadena de suministro.
Cronología del ataque
A continuación, la cronología del ataque a Nx según el informe de seguridad original de GitHub:
UTC (resumen para quienes responden a incidentes):
22:32: publicación de21.5.0→ 22:39:20.9.0→ 23:54:20.10.0+21.6.0→
27 de ago. 00:16:20.11.0→ 00:17:21.7.0→ 00:30: alerta de la comunidad →
00:37:21.8.0+20.12.0→ 02:44: npm retira las versiones afectadas → 03:52: se revoca el acceso de la organización.EDT (según se registró en el aviso):
6:32 p. m.: ola inicial (incluidas variantes de plugins@nx/*) → 8:30 p. m.: primer problema reportado en GitHub →
10:44 p. m.: npm elimina las versiones y los tokens afectados.
Indicadores de compromiso (IoC)
Sistema de archivos:
/tmp/inventory.txt,/tmp/inventory.txt.bak; archivos de configuración de shell (~/.bashrc,~/.zshrc) con la líneasudo shutdown -h 0agregada.Elementos de la cuenta de GitHub: un repositorio público llamado
s1ngularity-repositoryconresults.b64(codificado en base64 tres veces).Red/procesos: llamadas anómalas a la API de
api.github.comdurantenpm install; ejecuciones degh auth tokenpor parte detelemetry.js.
Sobre los ataques a la seguridad de la cadena de suministro
Esto no ocurre de forma aislada. Ya hemos visto ataques a CI y a cuentas de responsables de proyectos que permiten secuestrar publicaciones:
Ultralytics (diciembre de 2024): una cadena de inyección de plantillas de GitHub Actions provocó publicaciones maliciosas de pip y el robo de credenciales. El ataque a Ultralytics demuestra cómo una configuración incorrecta de CI puede permitir la manipulación de artefactos.
La vulneración de las cuentas de los responsables de ESLint/Prettier (julio de 2025): el phishing y el typosquatting (
npnjs.com) recopilaron credenciales de npm e instalaron malware en paquetes populares, otro recordatorio de que hay que reforzar las cuentas de los responsables de proyectos con autenticación de dos factores.
Más información sobre la confianza en la IA
Trata los agentes locales de programación con IA como cualquier otra automatización con privilegios: restringe el acceso a archivos y redes, revísalos con frecuencia y no ejecutes a ciegas sus interfaces de línea de comandos en modo YOLO. Evita los indicadores que omiten permisos o que «confían en todas las herramientas» para reforzar aún más tu seguridad.
Este incidente demuestra lo fácil que es convertir las interfaces de línea de comandos de los asistentes de programación con IA en agentes autónomos maliciosos cuando se desactivan las protecciones.
La seguridad de las protecciones que implementes determina si un asistente es una ayuda o una amenaza. No dejes al azar la seguridad del código y los sistemas que genera tu IA. La guía de Snyk sobre protecciones para el código de IA te brinda las herramientas para proteger todo el ciclo de vida de la IA, desde las dependencias de tus modelos de IA hasta el código que generan.
EBOOK
Protecciones para el código generado por IA
Obtén las herramientas necesarias para implementar protecciones eficaces y garantizar que el código generado por IA sea eficiente y seguro.
