3 pontos por GN⁺ 2025-08-29 | Ainda não há comentários. | Compartilhar no WhatsApp
  • 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 postinstall també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

  1. Verifique na lista de repositórios da sua conta Github se foi criado o s1ngularity-repository
  2. Baixe os arquivos incluídos nesse repositório e mantenha-os arquivados como registro
  3. Exclua o repositório no Github
  4. Envie um e-mail para security@nrwl.io para receber orientações sobre como decodificar as informações vazadas
  5. 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 .zshrc e .bashrc para 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, incluindo GITHUB_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.yml armazenava 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 postinstall do 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 postinstall inseria o comando sudo 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@latest ao iniciar o editor, acionando o postinstall

  • 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 nx foi 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.yml foi 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.js contido 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.

Ainda não há comentários.