- 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
postinstalltambié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
- Revisar en la lista de repositorios de su cuenta de Github si se creó
s1ngularity-repository - Descargar los archivos incluidos en ese repositorio para conservarlos como registro
- Eliminar el repositorio desde Github
- Enviar un correo a
security@nrwl.iopara recibir instrucciones sobre cómo descifrar la información filtrada - 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
ghCLI, 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 nxsi 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
.zshrcy.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 (comoGITHUB_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.ymlalmacenaba 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
postinstalldel paquete infectado de Nx, recopilaba la ubicación de diversos archivos de texto y datos de credenciales - Esa información se codificaba en
base64y se subía a un repositorio de Github llamados1ngularity-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)
postinstallinsertaba el comandosudo 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@latestal iniciar el editor, lo que podía disparar la ejecución depostinstall -
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.ymlfue 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.jsincluido 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.