Como agentes de programação com IA foram usados para distribuir malware no ataque ao pacote malicioso do Nx
27 de agosto de 2025
0 minutos de leituraEm 26 e 27 de agosto de 2025 (UTC), oito versões maliciosas do Nx e do Nx Powerpack releases foram publicadas no npm em duas linhas de versão e ficaram disponíveis por cerca de 5 horas e 20 minutos, até serem removidas. O ataque também afeta a extensão Nx Console para VS Code.
Atualização de 1º de setembro: agora sabemos que a causa raiz da versão maliciosa do Nx publicada no npm foi um workflow de CI do GitHub Actions com falhas , incluído por meio de um pull request em 21 de agosto. Estima-se que a contribuição de código tenha sido gerada pelo Claude Code. Um commit malicioso subsequente, em 24 de agosto, modificou o workflow de CI para que o token do npm usado na publicação do conjunto de pacotes Nx fosse enviado a um servidor controlado por um invasor por meio de um webhook.

Além das técnicas tradicionais, o payload usou agentes locais de programação com IA como armas (claude, gemini e q), com um prompt perigoso para inventariar arquivos confidenciais e, em seguida, exfiltrar segredos, credenciais e dados confidenciais da máquina para um repositório público do GitHub chamado s1ngularity-repository-NNNN, com um sufixo numérico. Acreditamos que este seja provavelmente um dos primeiros casos documentados de malware usando CLIs de assistentes de IA para reconhecimento e exfiltração de dados.
Os mantenedores do Nx publicaram um aviso oficial de segurança, que a Snyk está acompanhando por meio dos seguintes avisos:
A hipótese atual é que um token do npm comprometido com permissões de publicação foi usado para distribuir os pacotes maliciosos. Todas as versões comprometidas já foram efetivamente removidas do registro do npm.
Se você instalou as versões afetadas, altere as credenciais imediatamente, procure no GitHub por s1ngularity-repository-* e siga as etapas de limpeza abaixo.
O que é o Nx?
O Nx é um sistema de build e uma ferramenta de monorepo bastante usados em projetos JavaScript e TypeScript, com milhões de downloads semanais. A popularidade do Nx amplia o alcance de incidentes como este em ecossistemas de cadeia de suprimentos de código aberto, como o npm.
Malware usa agentes de programação com IA para exfiltrar dados
Este incidente inovou nos ataques a pacotes maliciosos no npm: o malware postinstall tentou usar várias ferramentas de IA via CLI localmente, incluindo o Claude Code da Claude, o Gemini CLI do Google e o novo agente de programação por linha de comando q da Amazon. Em seguida, invocou essas ferramentas com flags inseguras para contornar as proteções e varrer o sistema de arquivos em busca de caminhos confidenciais, registrando os resultados em /tmp/inventory.txt (e em um arquivo de backup).
Exemplos observados: execução de agentes de programação com IA usando flags como --dangerously-skip-permissions (Claude Code), --yolo (Gemini CLI) e --trust-all-tools (Amazon q).
O prompt incorporado instruiu o agente a enumerar recursivamente artefatos de carteiras, chaves SSH, arquivos .env e outros alvos de alto valor, respeitando um limite de profundidade e creating /tmp/inventory.txt(.bak).
O prompt fornecido aos agentes de programação com IA foi o seguinte:
O malware também inclui uma variante mínima do prompt, criada exclusivamente para inventariar caminhos de arquivos em texto simples (sem conteúdo), o que confirma ainda mais o uso de agentes no reconhecimento.
Por que o ataque ao pacote malicioso do Nx é importante: transformar agentes de IA “prestativos” em ferramentas automatizadas de reconhecimento representa uma escalada significativa nos ataques à cadeia de suprimentos de código aberto e provavelmente é um dos primeiros casos documentados publicamente de CLIs de assistentes de IA sendo manipuladas dessa forma.
Análise do malware de agentes de IA
O script telemetry.js, executado após a instalação, importa recursos de processamento de processos filhos, define o prompt e prepara a coleta de dados:
Em seguida, ele realiza verificações multiplataforma para garantir que possa ser executado corretamente em ambientes macOS, Windows e Linux:
O código malicioso então continua preparando as CLIs dos assistentes de programação com IA e suas flags:
Por fim, ele inclui código que coleta credenciais do npm, credenciais do GitHub e outras informações confidenciais, além de configurar o inventário e publicar esses dados em repositórios públicos do GitHub:
O que aconteceu no comprometimento do Nx?
Como o ataque foi possível?
Os investigadores acreditam que um token do npm de um mantenedor com permissões de publicação foi comprometido e que, em seguida, versões maliciosas foram publicadas diretamente no npm. Vale destacar que elas não tinham proveniência, um mecanismo que permite verificar criptograficamente a origem e a integridade dos pacotes publicados. Este incidente destaca a necessidade crucial de adotar e exigir verificações de proveniência nas cadeias de suprimentos de código aberto.
Como o ataque ao Nx foi executado?
Um script postinstall (chamado telemetry.js) é executado durante a instalação do pacote Nx (quando os desenvolvedores executam npm install ou npm install nx). Após a instalação do Nx, o script realiza a coleta local e o reconhecimento por meio de agentes de IA, roubando credenciais e tokens do GitHub dos usuários (usando o comando gh auth token, quando disponível). Em seguida, cria um repositório público do GitHub na conta da vítima e codifica em base64 três vezes todos os dados coletados e os envia para results.b64.
Quais dados foram visados e de onde?
O payload buscava tokens do GitHub, tokens do npm (~/.npmrc), chaves SSH, variáveis de ambiente e uma ampla variedade de artefatos de carteiras de criptomoedas, coletados nas estações de trabalho dos desenvolvedores e potencialmente em quaisquer outros executores de CI ou de build onde o pacote tenha sido instalado.
Havia um componente destrutivo?
Sim. Possivelmente na tentativa de encobrir o ataque e causar mais danos, o malware adicionou sudo shutdown -h 0 aos arquivos ~/.bashrc e ~/.zshrc, fazendo com que novos shells fossem encerrados imediatamente.
Pacotes e versões afetados
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 já removidas).Plugins do Nx (exemplos):
@nx/devkit,@nx/js,@nx/workspace,@nx/node,@nx/eslint(variantes maliciosas21.5.0e/ou20.9.0) e@nx/key,@nx/enterprise-cloud(3.2.0).Extensão para VS Code: Nx Console
Ações imediatas (faça agora)
Verifique se sua conta do GitHub foi usada para exfiltrar dados. Procure repositórios com o nome
s1ngularity-repository-*. Se encontrar algum, tome imediatamente as medidas recomendadas pelas equipes de segurança de produto e de segurança da informação.Altere todas as credenciais que possam estar na máquina: tokens do GitHub, tokens do npm, chaves SSH e quaisquer chaves de API em arquivos
.env.Audite e limpe seu ambiente conforme as instruções da equipe de segurança de produto
Identifique o uso do Nx nos projetos. Execute
npm ls nx(e verifique opackage-lock.json) para localizar instalações transitivas. Se encontrar uma versão afetada, desinstale-a e instalenx@latest.Quem usa a Snyk pode usar o Snyk SCA e o Snyk SBOM para localizar e monitorar projetos em toda a organização.
Se houver CLIs de IA instaladas, revise o histórico do shell em busca de flags perigosas (
--dangerously-skip-permissions,--yolo,--trust-all-tools).
Medidas preventivas futuras contra ataques à cadeia de suprimentos
Exija o uso do arquivo de lock na CI com
npm ci.Desative os scripts de instalação por padrão: use
--ignore-scriptse definaignore-scripts=trueem um arquivo.npmrcno escopo do usuário ou do projeto para neutralizar scriptspostinstallmaliciosos.Ative a autenticação de dois fatores no npm, de preferência no modo de autenticação e publicação:
npm profile enable-2fa auth-and-writes.Verifique a proveniência antes de instalar sempre que possível. É fundamental observar que as versões maliciosas do Nx foram publicadas sem proveniência (!), enquanto as versões recentes e legítimas tinham proveniência anexada. Esse é um indicador útil durante a triagem.
Verifique suas instalações antes de executá-las com npq (e/ou Snyk Advisor) para que você possa controlar as instalações com base em sinais de confiança e nas informações da Snyk. Considere criar um alias local de
npmparanpq.Faça varreduras e monitore continuamente com a Snyk (
snyk test/snyk monitor) para detectar novas divulgações e automatizar correções. A Snyk também ajuda a localizar instalações de dependências específicas nas equipes de P&D.Use um registro privado ou proxy (por exemplo, o Verdaccio) para reduzir a exposição direta e aplicar políticas de publicação e consumo.
Leituras recomendadas: 10 boas práticas de segurança para npm e Segurança no npm: como prevenir ataques à cadeia de suprimentos, da Snyk.
Cronologia do ataque
Confira a cronologia do ataque ao Nx, conforme descrita no relatório original de segurança do GitHub:
UTC (resumo para equipes de resposta a incidentes):
22:32 -21.5.0publicada → 22:39 -20.9.0→ 23:54 -20.10.0+21.6.0→
27 de agosto 00:16 -20.11.0→ 00:17 -21.7.0→ 00:30 - alerta da comunidade →
00:37 -21.8.0+20.12.0→ 02:44 - npm remove as versões afetadas → 03:52 - acesso da organização revogado.EDT (conforme registrado no aviso):
18h32 - primeira onda (incluindo variantes de plugins@nx/*) → 20h30 - primeiro problema relatado no GitHub →
22h44 - npm remove as versões e revoga os tokens afetados.
Indicadores de comprometimento (IoCs)
Sistema de arquivos:
/tmp/inventory.txt,/tmp/inventory.txt.bak; arquivos de configuração do shell (~/.bashrc,~/.zshrc) com o comandosudo shutdown -h 0adicionado.Artefatos da conta do GitHub: um repositório público chamado
s1ngularity-repositorycomresults.b64(codificado em base64 três vezes).Rede/processo: chamadas anômalas à API de
api.github.comdurante a execução denpm install; chamadas detelemetry.jsao comandogh auth token.
Sobre ataques à segurança da cadeia de suprimentos
Isso não acontece isoladamente. Já vimos ataques à CI e às contas de mantenedores permitirem o sequestro de lançamentos:
Ultralytics (dezembro de 2024): uma cadeia de injeção em templates do GitHub Actions levou à publicação de versões maliciosas do pip e ao roubo de credenciais. O ataque à Ultralytics exemplifica como uma configuração incorreta de CI pode permitir a adulteração de artefatos.
Comprometimento dos mantenedores do ESLint/Prettier (julho de 2025): phishing e typosquatting (
npnjs.com) coletaram credenciais do npm e enviaram malware para pacotes populares — mais um lembrete para reforçar a segurança das contas de mantenedores com autenticação de dois fatores.
Mais observações sobre confiança em IA
Trate agentes locais de programação com IA como qualquer outra automação privilegiada: restrinja o acesso a arquivos e à rede, revise com frequência e não execute às cegas as CLIs de agentes de programação com IA em modos YOLO. Evite flags que ignorem permissões ou “confiem em todas as ferramentas” para reforçar ainda mais sua segurança.
Este incidente mostra como é fácil transformar CLIs de assistentes de programação com IA em agentes autônomos maliciosos quando as proteções estão desativadas.
A segurança das proteções que você implementa determina se um assistente será útil ou uma ameaça. Não deixe ao acaso a segurança do código gerado por IA nem dos seus sistemas. O guia da Snyk sobre proteções para código de IA oferece as ferramentas necessárias para proteger todo o ciclo de vida da IA, desde as dependências dos seus modelos até o código que eles geram.
E-BOOK
Proteções para código gerado por IA
Tenha as ferramentas necessárias para implementar proteções eficazes e garantir que seu código gerado por IA seja eficiente e seguro.
