- Versões maliciosas do pacote Nx e de plugins foram publicadas no npm, escaneando o sistema de arquivos, coletando credenciais e depois enviando tudo para um repositório da conta Github do usuário
- Para verificar se houve impacto, é preciso confirmar se o repositório s1ngularity-repository foi criado na conta do Github
- Em caso de infecção, é obrigatório trocar tokens e senhas, excluir o repositório malicioso e verificar arquivos de configuração do shell
- As versões maliciosas afetam o sistema por meio de um script postinstall; o risco de execução involuntária aumenta especialmente ao usar o plugin VSCode Nx Console
- A equipe do Nx aplicou medidas adicionais de segurança e prevenção de recorrência, e as versões relacionadas foram removidas do npm
Visão geral e resumo
- Este aviso de segurança trata de um grave ataque à cadeia de suprimentos envolvendo o pacote Nx e alguns plugins relacionados, com código malicioso distribuído via npm
- Essas versões maliciosas escaneavam o sistema de arquivos do usuário para coletar credenciais, caminhos e outras informações, enviando os dados para um repositório do Github chamado
s1ngularity-repository - O script malicioso de
postinstalltambém modificava os arquivos de configuração do shell do usuário (.zshrc,.bashrc) para adicionar comandos de desligamento do sistema - O documento detalha o vetor de ataque, a progressão do incidente, as versões afetadas, as ações imediatas que os usuários devem tomar e as medidas de prevenção de recorrência
Como agir com urgência
O que todos devem verificar
- Verifique na lista de repositórios da sua conta Github se foi criado o
s1ngularity-repository - Baixe os arquivos incluídos nesse repositório e mantenha-os arquivados como registro
- Exclua o repositório no Github
- Envie um e-mail para
security@nrwl.iopara receber orientações sobre como decodificar as informações vazadas - Troque imediatamente todas as credenciais e tokens de todas as contas
Como trocar o token do Github
- Acesse https://github.com/settings/connections/…
- Revogue o acesso do app conectado para invalidar o token existente
- Se você usa o gh CLI, autentique-se novamente para gerar um novo token
- Se isso não for feito, há risco de abuso do token antigo
Interromper o uso das versões maliciosas do Nx e limpar o ambiente
- Verifique se a versão atualmente em uso do Nx é uma das versões maliciosas com o comando
npm ls nx - Se for uma versão infectada, atualize com
npm uninstall nx && npm install nx@latest - Limpe o cache com
npm cache clean --force
Usuários já infectados
- Troque os tokens do npm e do Github
- Redefina todas as senhas e credenciais do Github e de serviços relacionados
- Verifique os arquivos
.zshrce.bashrcpara identificar comandos desconhecidos inseridos e remova-os
Para administradores de repositórios internos de pacotes
- É necessário remover imediatamente as versões maliciosas do proxy no registro interno da empresa para bloquear propagação adicional
Versões afetadas
Pacote 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
- Removidas do npm até 10:44 PM EDT
@nx/devkit, @nx/js, @nx/workspace, @nx/node, @nx/eslint, @nx/key, @nx/enterprise-cloud
- Removidos do npm até 10:44 PM e 6:20 AM EDT
Detalhes do vetor de ataque
Causa do workflow vulnerável
- Uma vulnerabilidade que permitia execução arbitrária de código foi introduzida no workflow do Github Actions
- Ao inserir um código bash específico no título de um PR, surgia uma vulnerabilidade em que comandos do sistema eram executados no workflow (Bash Injection)
- O problema foi explorado por meio do gatilho
pull_request_target, que concedia privilégios elevados, incluindoGITHUB_TOKEN - Até ser removido, o workflow vulnerável permaneceu em branches antigas, não apenas na
main, permitindo que o invasor executasse o workflow com PRs maliciosos e roubasse segredos
Processo de roubo do token npm
- O workflow vulnerável foi usado para executar o
publish.yml - O
publish.ymlarmazenava o token do npm no Github Secrets, e nesse processo o token era enviado para um webhook externo - Por fim, o invasor usou esse token para publicar no npm versões maliciosas do Nx e dos pacotes compatíveis
Comportamento do pacote malicioso
Coleta de informações com credenciais e publicação em repositório do Github
- Quando o script
postinstalldo pacote Nx infectado era executado, ele coletava localizações de vários arquivos de texto e informações de credenciais - Os dados eram codificados em base64 e enviados para um repositório do Github chamado
s1ngularity-repository - Mesmo que o repositório real já tenha sido excluído, é preciso considerar a possibilidade de vazamento, já que anteriormente ele esteve público
Alteração do perfil do shell (.zshrc, .bashrc)
- O
postinstallinseria o comandosudo shutdown -h 0, podendo induzir o desligamento do sistema ao abrir o terminal e expor senhas
Vários cenários em que o postinstall pode ser executado
-
Além da execução explícita de
npm install/yarn/pnpm install, ele também pode rodar em várias situações, como dependências transitivas, extensões de editor e execução de scripts -
Em especial, a extensão Nx Console para VSCode (versões 18.6.30 ~ 18.65.1) podia instalar automaticamente
nx@latestao iniciar o editor, acionando opostinstall -
Em essência, é preciso ter em mente que instalações de módulos NPM podem acontecer em vários pontos mesmo sem intenção direta
-
A partir do Nx Console 18.66.0, o processo de instalar o
latest nxfoi removido
Linha do tempo do ataque e da resposta
21 de agosto
- 4:31 PM: PR com a vulnerabilidade de injeção Bash foi mesclado
- 10:48 PM: Uma publicação apontando a vulnerabilidade foi postada no X (antigo Twitter)
22 de agosto
- Tarde: investigação interna e rollback do workflow vulnerável (incompleto)
- Com a adoção do CodeQL, passou a haver detecção de vulnerabilidades semelhantes em PRs futuros
24 de agosto
- Foi feito um commit no fork do invasor com indícios de vazamento do token npm
- Um PR malicioso foi criado e depois removido, e o
publish.ymlfoi executado por esse PR
26 a 27 de agosto (distribuição das versões maliciosas e resposta)
- Várias versões maliciosas do Nx e de plugins foram publicadas no npm em sequência
- Houve relatos do problema para as comunidades Github/NPM
- 10:44 PM: o NPM removeu todas as versões afetadas e tomou outras medidas
- 11:57 PM: todos os tokens de publicação de pacotes relacionados ao Nx foram invalidados
- 27 de agosto: correção no Nx Console, ativação de 2FA, migração para Trusted Publisher e outras medidas adicionais
Medidas preventivas e resposta posterior
- 2FA passou a ser obrigatório para todos os maintainers da organização nrwl
- Foi adotado o mecanismo de Trusted Publisher. Publicações baseadas em token npm foram proibidas
- Daqui em diante, os pacotes serão publicados somente após verificação com 2FA e confiança
- Detecção adicional de risco, aprovação de PR e proteção de branch serão aplicadas em etapas
Lições e próximos passos
- O incidente reforça a importância global da segurança da cadeia de suprimentos, dos pipelines de CI/CD e da redução de privilégios em workflows
- Após nova avaliação interna, a equipe pretende compartilhar com a comunidade o que aprendeu
Contato
- Contato disponível via
security@nrwl.io
Referências e apêndice
- Principais issues do Github, linha do tempo e posts relacionados
- É fornecido um exemplo do script
telemetry.jscontido no pacote infectado - Esse script coleta, com o objetivo de criar um inventário, os caminhos de arquivos de texto importantes no sistema de arquivos
Resumo da conclusão
- É importante aplicar as atualizações e correções mais recentes do Nx e dos plugins relacionados
- Recomenda-se a troca imediata das principais credenciais de autenticação, como npm e Github
- O caso mostra como falhas em segurança da cadeia de suprimentos e no gerenciamento de permissões de workflow podem levar a um grande incidente
Ainda não há comentários.