3 puntos por GN⁺ 2025-08-29 | Aún no hay comentarios. | Compartir por WhatsApp
  • Se distribuyeron en npm versiones maliciosas de los paquetes y plugins de Nx, que escanean el sistema de archivos, recopilan credenciales y luego las envían a un repositorio de la cuenta de Github del usuario
  • Para verificar si hubo impacto, es necesario confirmar si se creó el repositorio s1ngularity-repository en la cuenta de Github
  • Si hubo infección, es imprescindible reemplazar tokens y contraseñas, eliminar el repositorio malicioso y revisar los archivos de configuración del shell
  • Las versiones maliciosas afectan al sistema mediante un script postinstall; en particular, al usar el plugin VSCode Nx Console aumenta el riesgo de ejecutarlo sin darse cuenta
  • El equipo de Nx aplicó medidas para evitar recurrencias y controles de seguridad adicionales, y las versiones implicadas ya fueron eliminadas de npm

Resumen general

  • Este aviso de seguridad trata sobre un grave ataque a la cadena de suministro dirigido a los paquetes de Nx y algunos plugins relacionados, con código malicioso distribuido a través de npm
  • Esas versiones maliciosas escaneaban el sistema de archivos del usuario para recopilar credenciales, rutas y otros datos, y los subían a un repositorio de Github (s1ngularity-repository)
  • El script malicioso postinstall también modificaba los archivos de configuración del shell del usuario (.zshrc, .bashrc) para agregar un comando de apagado del sistema
  • Se detallan el vector de ataque y su desarrollo, las versiones afectadas, las acciones inmediatas recomendadas para los usuarios y las medidas para evitar una recurrencia

Medidas urgentes

Lo que todos deben verificar

  1. Revisar en la lista de repositorios de su cuenta de Github si se creó s1ngularity-repository
  2. Descargar los archivos incluidos en ese repositorio para conservarlos como registro
  3. Eliminar el repositorio desde Github
  4. Enviar un correo a security@nrwl.io para recibir instrucciones sobre cómo descifrar la información filtrada
  5. Reemplazar de inmediato todas las credenciales y tokens de todas las cuentas

Cómo reemplazar el token de Github

  • Visitar https://github.com/settings/connections/…
  • Revocar el acceso de la app conectada para invalidar el token existente
  • Si usa gh CLI, volver a autenticarse para generar un nuevo token
  • Si no se hace, existe el riesgo de que el token anterior sea utilizado de forma maliciosa

Dejar de usar y limpiar las versiones maliciosas de Nx

  • Verificar con npm ls nx si la versión de Nx actualmente en uso corresponde a una versión maliciosa
  • Si es una versión infectada, actualizar con npm uninstall nx && npm install nx@latest
  • Limpiar la caché con npm cache clean --force

Usuarios que ya fueron infectados

  • Reemplazar los tokens de npm y Github
  • Restablecer todas las contraseñas y credenciales de Github y de los servicios relacionados
  • Revisar si se insertaron comandos extraños en los archivos .zshrc y .bashrc, y eliminarlos

Si administra un repositorio interno de paquetes

  • Es necesario eliminar de inmediato las versiones maliciosas del proxy del registro interno para bloquear una propagación adicional

Versiones afectadas

Paquete 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
  • Eliminadas de npm al cierre de las 10:44 PM EDT

@nx/devkit, @nx/js, @nx/workspace, @nx/node, @nx/eslint, @nx/key, @nx/enterprise-cloud

  • Eliminados de npm a las 10:44 PM y 6:20 AM EDT

Detalles del vector de ataque

Causa del workflow vulnerable

  • Se introdujo en Github Actions un workflow vulnerable que permitía la ejecución de código arbitrario
  • Al insertar cierto código bash en el título del PR, el workflow ejecutaba comandos del sistema, una vulnerabilidad de tipo Bash Injection
  • Se abusó del trigger pull_request_target, que otorga privilegios elevados (como GITHUB_TOKEN)
  • Hasta que se eliminó, el workflow vulnerable se mantuvo en una rama antigua distinta de main, lo que permitió al atacante ejecutar el workflow con un PR malicioso y robar secretos

Proceso de robo del token de npm

  • Mediante el workflow vulnerable, se hizo que se ejecutara publish.yml
  • publish.yml almacenaba el token de npm en Github Secrets, y durante ese proceso el token fue enviado a un webhook externo
  • Finalmente, el atacante usó ese token para subir a npm versiones maliciosas de Nx y de los paquetes compatibles

Comportamiento de los paquetes maliciosos

Recolección de información, incluidas credenciales, y publicación en un repositorio de Github

  • Al ejecutarse el script postinstall del paquete infectado de Nx, recopilaba la ubicación de diversos archivos de texto y datos de credenciales
  • Esa información se codificaba en base64 y se subía a un repositorio de Github llamado s1ngularity-repository
  • Aunque el repositorio real ya haya sido eliminado, como antes estuvo público, debe asumirse la posibilidad de filtración de información

Alteración de perfiles del shell (.zshrc, .bashrc)

  • postinstall insertaba el comando sudo shutdown -h 0, provocando el apagado del sistema al abrir la terminal y posibilitando la exposición de contraseñas

Distintos escenarios en los que puede ejecutarse postinstall

  • Además de ejecutarse explícitamente con npm install/yarn/pnpm install, puede activarse en diversos casos como dependencias transitivas, extensiones del editor o ejecución de scripts

  • En particular, la extensión Nx Console para VSCode (versiones 18.6.30 ~ 18.65.1) podía instalar automáticamente nx@latest al iniciar el editor, lo que podía disparar la ejecución de postinstall

  • En esencia, hay que tener presente que la instalación de módulos de NPM puede ocurrir en muchos lugares incluso sin intención explícita

  • A partir de Nx Console (18.66.0), se eliminó el proceso de instalación de latest nx

Cronología del ataque y la respuesta

21 de agosto

  • 4:31 PM: se hizo merge de un PR que incluía la vulnerabilidad de inyección Bash
  • 10:48 PM: se publicó en X (antes Twitter) una publicación señalando la vulnerabilidad

22 de agosto

  • Tarde: investigación interna y rollback del workflow vulnerable (incompleto)
  • Se introdujo CodeQL para detectar vulnerabilidades similares en futuros PR

24 de agosto

  • Se produjo un commit en el fork del atacante con indicios de filtración del token de npm
  • Se creó y eliminó un PR malicioso, y publish.yml fue ejecutado por ese PR

26 ~ 27 de agosto (distribución de versiones maliciosas y respuesta)

  • Se publicaron sucesivamente en npm múltiples versiones maliciosas de Nx y sus plugins
  • Se reportaron issues a las comunidades de Github y NPM
  • 10:44 PM: NPM tomó medidas como la eliminación total de esas versiones
  • 11:57 PM: se invalidaron todos los tokens de publicación de paquetes relacionados con Nx
  • 27 de agosto: parche para Nx Console, activación de 2FA, transición al modelo Trusted Publisher y medidas adicionales

Prevención y respuesta posterior

  • Se hizo obligatorio el uso de 2FA para todos los maintainers de la organización nrwl
  • Se adoptó el mecanismo de Trusted Publisher. Queda prohibida la publicación basada en tokens de npm
  • En adelante, los paquetes solo se publicarán tras pasar validación basada en confianza y 2FA
  • También se aplicarán por etapas controles adicionales para detección de riesgos, aprobación de PR y protección de ramas

Lecciones y próximos pasos

  • Este incidente vuelve a poner en evidencia, tanto a nivel local como internacional, la importancia de la seguridad de la cadena de suministro, de los pipelines de CI/CD y del principio de mínimos privilegios en los workflows
  • Tras una revisión interna, el equipo planea compartir con la comunidad lo aprendido

Contacto

  • Se puede consultar a security@nrwl.io

Referencias y apéndice

  • Principales issues de Github, cronología y publicaciones relacionadas
  • Se proporciona un ejemplo del script telemetry.js incluido en los paquetes infectados
  • Ese script recopila rutas de archivos de texto importantes dentro del sistema de archivos con el objetivo de generar un inventario

Resumen final

  • Es importante aplicar las actualizaciones y parches más recientes de Nx y de los plugins relacionados
  • Se recomienda reemplazar de inmediato la información principal de autenticación, como la de npm y Github
  • Este incidente recuerda que deficiencias en la seguridad de la cadena de suministro y en la gestión de permisos de workflows pueden derivar en un accidente de gran escala

Aún no hay comentarios.

Aún no hay comentarios.